确保系统是最新的:
sudoyum update -y
安装 Oracle 数据库所需的依赖包:
sudoyum install-ybinutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst makesysstat unixODBC unixODBC-devel
Oracle 数据库需要专用的用户和组:
sudogroupaddoinstallsudogroupadddbasudouseradd-goinstall -Gdba oraclesudopasswdoracle
编辑 /etc/sysctl.conf
文件,添加以下内容:
fs.aio-max-nr =1048576fs.file-max =6815744kernel.shmall =2097152kernel.shmmax =4294967295kernel.shmmni =4096kernel.sem =25032000100128net.ipv4.ip_local_port_range =900065500net.core.rmem_default =262144net.core.rmem_max =4194304net.core.wmem_default =262144net.core.wmem_max =1048576
应用更改:
sudosysctl-p
编辑 /etc/security/limits.conf
文件,添加以下内容:
oracle soft nproc 2047oracle hard nproc 16384oracle soft nofile 1024oracle hard nofile 65536oracle soft stack 10240
编辑 /etc/pam.d/login
文件,添加以下内容:
session required pam_limits.so
创建 Oracle 安装目录并设置权限:
sudomkdir-p/u01/app/oraclesudochown-Roracle:oinstall /u01sudochmod-R775/u01
将下载的安装包上传到 CentOS 服务器的 /u01/app/oracle
目录。
解压安装包:
cd/u01/app/oracleunzipLINUX.X64_193000_db_home.zip
.bash_profile
以 oracle
用户登录,编辑 .bash_profile
文件:
vi~/.bash_profile
添加以下内容:
exportORACLE_BASE=/u01/app/oracleexportORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1exportORACLE_SID=orclexportPATH=$ORACLE_HOME/bin:$PATHexportLD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
使环境变量生效:
source~/.bash_profile
以 oracle
用户运行安装程序:
cd$ORACLE_HOME./runInstaller
ORACLE_BASE
和 ORACLE_HOME
路径。/u01/app/oraInventory
。orcl
)和 SID(如 orcl
)。安装完成后,按照提示以 root
用户运行以下脚本:
sudo/u01/app/oraInventory/orainstRoot.shsudo/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
以 oracle
用户启动数据库:
sqlplus / as sysdbaSQL>startup
SQL>selectstatus from v$instance;
如果显示 OPEN
,则表示数据库已成功启动。
SQL>create table test(id number, name varchar2(50));SQL>insert into testvalues (1, 'Oracle Test');SQL>commit;SQL>select* from test;
编辑 $ORACLE_HOME/network/admin/listener.ora
文件,配置监听器:
LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS =(PROTOCOL =TCP)(HOST =localhost)(PORT =1521)))
启动监听器:
lsnrctl start
lsnrctl status
如果启用了防火墙,需要开放 Oracle 端口(如 1521):
sudofirewall-cmd --zone=public --add-port=1521/tcp --permanentsudofirewall-cmd --reload
编辑 /etc/oratab
文件,将 N
改为 Y
:
orcl:/u01/app/oracle/product/19.0.0/dbhome_1:Y
创建 /etc/systemd/system/oracle.service
文件,添加以下内容:
[Unit]Description=Oracle Database ServiceAfter=network.target[Service]Type=forkingUser=oracleEnvironment="ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1"ExecStart=$ORACLE_HOME/bin/dbstart $ORACLE_HOMEExecStop=$ORACLE_HOME/bin/dbshut $ORACLE_HOMERestart=on-abort[Install]WantedBy=multi-user.target
sudosystemctl daemon-reloadsudosystemctl enableoraclesudosystemctl start oracle
至此,Oracle 数据库已在 CentOS 上成功安装并配置完成。你可以通过 SQL*Plus 或其他工具连接到数据库。
$ORACLE_HOME/cfgtoollogs
)。tnsnames.ora
和 sqlnet.ora
文件。在 Oracle 数据库中配置远程访问需要完成以下几个步骤:
tnsnames.ora
文件。sqlnet.ora
文件配置正确。以下是详细的配置步骤:
listener.ora
文件监听器配置文件 listener.ora
位于 $ORACLE_HOME/network/admin
目录下。编辑该文件,确保监听器配置如下:
LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS =(PROTOCOL =TCP)(HOST =<服务器IP或主机名>)(PORT =1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME =orcl)# 全局数据库名(ORACLE_HOME =/u01/app/oracle/product/19.0.0/dbhome_1)(SID_NAME =orcl)# 数据库 SID))
<服务器IP或主机名>
替换为服务器的实际 IP 地址或主机名。GLOBAL_DBNAME
和 SID_NAME
与数据库的实际名称一致。如果监听器未启动,使用以下命令启动:
lsnrctl start
如果监听器已启动,重启监听器以应用更改:
lsnrctl reload
lsnrctl status
确保监听器正在运行,并且能够看到数据库实例的信息。
tnsnames.ora
编辑 $ORACLE_HOME/network/admin/tnsnames.ora
文件,添加以下内容:
ORCL =(DESCRIPTION =(ADDRESS =(PROTOCOL =TCP)(HOST =<服务器IP或主机名>)(PORT =1521))(CONNECT_DATA =(SERVER =DEDICATED)(SERVICE_NAME =orcl)# 全局数据库名))
<服务器IP或主机名>
替换为服务器的实际 IP 地址或主机名。SERVICE_NAME
与数据库的实际名称一致。tnsnames.ora
在客户端的 tnsnames.ora
文件中添加与服务器端相同的配置。文件通常位于以下路径:
%ORACLE_HOME%\network\admin\tnsnames.ora
$ORACLE_HOME/network/admin/tnsnames.ora
例如:
ORCL =(DESCRIPTION =(ADDRESS =(PROTOCOL =TCP)(HOST =<服务器IP或主机名>)(PORT =1521))(CONNECT_DATA =(SERVER =DEDICATED)(SERVICE_NAME =orcl)# 全局数据库名))
默认情况下,Oracle 监听器使用 1521 端口。确保防火墙允许该端口的流量。
sudofirewall-cmd --zone=public --add-port=1521/tcp --permanentsudofirewall-cmd --reload
sudofirewall-cmd --zone=public --query-port=1521/tcp
sqlnet.ora
文件编辑 $ORACLE_HOME/network/admin/sqlnet.ora
文件,确保以下配置:
NAMES.DIRECTORY_PATH=(TNSNAMES, EZCONNECT)SQLNET.AUTHENTICATION_SERVICES=(NTS)
NAMES.DIRECTORY_PATH
指定了名称解析的顺序。SQLNET.AUTHENTICATION_SERVICES
指定了认证方式。在客户端使用 SQL*Plus 测试远程连接:
sqlplus username/password@ORCL
例如:
sqlplus system/oracle@ORCL
username
和 password
替换为实际的数据库用户名和密码。ORCL
替换为 tnsnames.ora
中配置的网络服务名。在客户端使用 tnsping
测试网络服务名配置:
tnsping ORCL
如果配置正确,会显示类似以下内容:
Used TNSNAMES adapter to resolve the aliasAttempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <服务器IP或主机名>)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))OK (10 msec)
确保数据库监听地址正确。可以通过以下 SQL 查询检查:
SELECT*FROMv$listener_network;
确保数据库服务名正确。可以通过以下 SQL 查询检查:
SELECTname,valueFROMv$parameter WHEREname ='service_names';
确保客户端和服务器的时间同步,否则可能会导致连接问题。
如果连接失败,检查以下日志文件以获取更多信息:
$ORACLE_HOME/network/log/listener.log
$ORACLE_HOME/network/log/sqlnet.log
如果使用动态服务注册,确保数据库参数 local_listener
和 remote_listener
配置正确:
ALTERSYSTEM SETLOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=<服务器IP或主机名>)(PORT=1521))';ALTERSYSTEM SETREMOTE_LISTENER='<远程监听器地址>';
如果需要更高的安全性,可以配置 Oracle Net 使用 SSL/TLS 加密通信。具体步骤请参考 Oracle 官方文档。