公司动态

Oracle 19c RPM安装实战:30分钟快速部署与深度解析

📅 2026/8/5 6:46:51
Oracle 19c RPM安装实战:30分钟快速部署与深度解析
1. 为什么选择RPM包安装Oracle 19c如果你在Linux上装过Oracle数据库大概率经历过从官网下载那一大堆压缩包、手动创建目录、配置环境变量、运行静默安装脚本的“标准流程”。这个过程繁琐、容易出错而且对新手极不友好。我第一次在CentOS 7上装11g的时候光是解决各种依赖和内核参数问题就花了大半天。后来Oracle从18c开始为部分Linux发行版主要是Oracle Linux、Red Hat Enterprise Linux及其衍生版提供了RPM包安装方式。到了19c这个方式已经相当成熟。简单来说RPM包把数据库软件、预安装脚本、依赖关系都打包好了你只需要像安装一个普通软件那样用yum或rpm命令就能搞定。这不仅仅是安装方式的改变更是一种理念的转变——让数据库的部署变得更标准化、更接近现代软件的分发方式。我最近在几台新服务器上部署Oracle 19c全部采用了RPM方式。实测下来从准备环境到数据库创建完成最快的一台只用了不到30分钟而且过程清晰可控几乎没遇到什么“玄学”错误。这篇文章我就把整个基于RPM包安装Oracle 19c的完整流程、核心原理、以及我踩过的几个坑毫无保留地分享给你。无论你是DBA新手还是习惯了传统安装方式的老手相信都能从中获得一些新的启发。2. 安装前的核心准备环境与包解析很多人觉得RPM安装就是“一键搞定”其实不然。前期准备工作的质量直接决定了安装过程的顺利程度和后续运行的稳定性。这一步没做好后面全是坑。2.1 系统环境检查与调优首先你需要一台干净的、满足最低要求的Linux服务器。我强烈推荐使用Oracle Linux 7/8 或者 RHEL/CentOS 7/8。其他发行版如Ubuntu理论上可以但依赖问题会非常棘手不推荐在生产环境尝试。安装前请务必逐项核对以下清单内存与交换空间官方建议最小内存为1GB但为了性能我建议至少4GB。交换空间Swap的大小有讲究可以参考这个公式如果内存小于2GBSwap应为内存的2倍内存2GB到16GB之间Swap等于内存大小内存超过16GBSwap至少16GB。你可以用free -h命令查看。磁盘空间/tmp目录至少需要1GB空间。数据库软件本身大约需要7GB而数据文件、日志文件等所在的目录比如/u01则需要根据你的数据量来规划建议预留50GB以上。用df -h命令检查。内核参数这是传统安装中最麻烦的一环。幸运的是Oracle的RPM包依赖项oracle-database-preinstall-19c会自动帮你配置大部分参数。但我们仍需了解关键的几个以便排查问题kernel.sem信号量设置关系到进程通信。kernel.shmall系统可用的共享内存总页数。kernel.shmmax单个共享内存段的最大字节数。fs.file-max系统最大文件句柄数。net.core.rmem_default等网络参数。 你可以通过sysctl -a | grep 参数名来查看当前值。预安装包会将其调整到Oracle推荐的值记录在/etc/sysctl.d/目录下的配置文件中。用户与组预安装包会自动创建操作系统用户oracle和组oinstall软件所有者、dbaOSDBA组。这是与手动安装一个很大的不同我们不需要再手动去创建了。2.2 RPM包依赖与oracle-database-preinstall-19c的作用这是RPM安装方式的灵魂所在。oracle-database-preinstall-19c这个包是Oracle官方提供的一个“环境准备包”。它的作用相当于一个智能化的“一键配置脚本”。当你用yum安装它时它会自动完成以下工作创建必要的用户和组oracle, oinstall, dba等。设置内核参数通过sysctl。修改用户资源限制/etc/security/limits.conf比如nofile打开文件数和nproc进程数。安装Oracle数据库所需的大量基础依赖包比如binutils,compat-libstdc,gcc,ksh,libaio等等。手动安装时漏掉任何一个依赖都可能导致安装失败而这个包帮你一次性全解决了。所以安装的第一步不是去下载数据库软件包而是先安装这个预安装包。这能帮你扫清至少80%的环境障碍。2.3 获取正确的RPM安装包你需要从Oracle官方网站下载两个核心的RPM包需要注册Oracle账户oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm以EL8为例版本号可能更新。oracle-database-ee-19c-1.0-1.x86_64.rpm企业版。如果你需要标准版则下载oracle-database-se-19c的包。一个重要提示请务必根据你的操作系统版本来选择对应的RPM包。为EL7如CentOS 7编译的包在EL8如RHEL 8/AlmaLinux 8上很可能无法安装或运行因为底层库的版本不同。下载后可以将它们上传到服务器的某个目录例如/opt/oracle。3. 分步安装实操与原理剖析环境准备好包也下载了现在开始动手安装。我会把每一步在做什么、为什么这么做都讲清楚。3.1 第一步安装预配置包假设你把下载的RPM包都放在了/opt/oracle目录。cd /opt/oracle sudo yum localinstall -y oracle-database-preinstall-19c*.rpm执行这个命令时发生了什么yum localinstall命令会处理本地RPM文件并自动解决其声明的依赖关系虽然这个预安装包依赖很少。安装过程会输出大量信息显示它正在创建用户、组、修改系统配置。安装完成后你可以验证一下id oracle # 查看oracle用户是否创建成功 groups oracle # 查看oracle用户所属的组应该包含oinstall和dba sudo sysctl -p /etc/sysctl.d/98-oracle-database-sysctl.conf # 使新的内核参数生效通常安装时已自动执行3.2 第二步安装数据库软件RPM包接下来安装主软件包sudo yum localinstall -y oracle-database-ee-19c*.rpm这一步的本质是什么这个RPM包并没有立即安装一个“立即可用”的数据库。它做的是以下几件事将Oracle 19c的所有二进制文件、库文件、配置文件解压并部署到Oracle的默认目录/opt/oracle/product/19c/dbhome_1下。这就是ORACLE_HOME。在系统中注册Oracle的相关服务脚本。提供一系列管理命令和模板。安装完成后你会发现/opt/oracle/product/19c/dbhome_1目录下已经有了完整的Oracle软件。但是如果你尝试连接会发现还没有数据库实例。这是因为RPM安装将软件部署和数据库创建这两个步骤解耦了。3.3 第三步创建数据库实例这是与传统安装方式差异最大的一步。我们不是运行dbca数据库配置助手图形界面或静默脚本而是使用一个RPM包提供的配置脚本。Oracle RPM包安装后会提供一个服务配置文件/etc/sysconfig/oracledb_ORCLCDB-19c.conf注意文件名中的ORCLCDB是默认的数据库名19c是版本。但默认情况下这个文件可能不存在我们需要先创建它或者使用更直接的方法。更推荐的方法是使用/etc/init.d下的助手脚本sudo /etc/init.d/oracledb_ORCLCDB-19c configure运行这个脚本时背后发生了什么脚本会检查环境变量。它会提示你为SYS,SYSTEM,PDBADMIN等管理用户设置密码。这里有个坑脚本可能对密码复杂度有要求如包含大小写字母和数字如果密码太简单可能会报错。建议设置一个符合复杂度的密码。脚本会调用Oracle底层的工具基于一个模板在指定的ORACLE_HOME下创建一个新的数据库实例CDB容器数据库默认包含一个PDB。这个过程包括创建数据文件、控制文件、重做日志文件、初始化参数文件spfile等。数据库创建完成后脚本会自动启动数据库并配置其在系统启动时自动运行。数据库创建完成后默认的数据库名DB_NAME是ORCLCDB实例名ORACLE_SID通常也是ORCLCDB。插拔数据库PDB的名字是ORCLPDB1。3.4 第四步环境变量配置与基础验证数据库创建好了但你的shell环境还不知道它。需要为oracle用户设置环境变量。编辑oracle用户的家目录下的.bash_profile文件sudo su - oracle vi ~/.bash_profile在文件末尾添加以下内容export ORACLE_HOME/opt/oracle/product/19c/dbhome_1 export ORACLE_SIDORCLCDB export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:$LD_LIBRARY_PATH export NLS_LANGAMERICAN_AMERICA.AL32UTF8 # 设置字符集根据需求调整保存退出后执行source ~/.bash_profile使配置生效。现在进行最关键的验证sqlplus / as sysdba如果成功进入SQL*Plus提示符说明你已经以操作系统认证的方式属于dba组连接到了数据库。执行几个简单命令SELECT name, open_mode FROM v$database; SELECT instance_name, status FROM v$instance;你应该能看到数据库ORCLCDB处于OPEN状态实例状态为OPEN。恭喜你一个基于RPM安装的Oracle 19c数据库已经成功运行了。4. 安装后的关键配置与优化安装完成只是开始要让数据库好用、安全还需要进行一些关键配置。这些步骤在传统安装中也需要做但在RPM安装的标准化路径下操作起来更清晰。4.1 监听器配置与启动RPM安装默认不会配置监听器。监听器是客户端连接数据库的入口必须配置。# 切换到oracle用户 su - oracle # 进入网络管理目录 cd $ORACLE_HOME/network/admin # 创建监听器配置文件 listener.ora如果不存在的话 vi listener.ora添加以下基本配置LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST your_hostname)(PORT 1521)) (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1521)) ) )将your_hostname替换为你的服务器主机名或IP地址。保存后启动监听器lsnrctl start使用lsnrctl status检查监听器状态应该能看到它正在监听1521端口并且服务ORCLCDB已经注册。4.2 PDB连接与使用19c默认创建的是CDB容器数据库我们的应用数据通常放在PDB插拔数据库里。默认的PDB是ORCLPDB1。在SQL*Plus中你需要连接到这个PDB才能创建用户和表-- 在CDB$ROOT中查看PDB状态 SHOW PDBS; -- 切换到PDB ALTER SESSION SET CONTAINERORCLPDB1; -- 在PDB中创建普通用户 CREATE USER myuser IDENTIFIED BY mypassword; GRANT CONNECT, RESOURCE TO myuser;一个重要提醒很多新手安装后直接用SYSTEM用户在CDB$ROOT里创建对象这是不对的。用户和业务数据应该创建在PDB中。4.3 防火墙与客户端连接如果服务器开启了防火墙如firewalld需要开放1521端口sudo firewall-cmd --permanent --add-port1521/tcp sudo firewall-cmd --reload现在你可以从远程客户端如SQL Developer、其他服务器的sqlplus进行连接了。连接字符串格式为主机名或IP:1521/ORCLPDB1服务名填写ORCLPDB1。5. 常见问题排查与深度解析即使按照步骤来也可能会遇到问题。下面是我在多次RPM安装中遇到的几个典型问题及其根因。5.1 数据库创建脚本执行失败运行sudo /etc/init.d/oracledb_ORCLCDB-19c configure时可能会在中间报错退出。排查思路查看详细日志脚本的日志通常输出到/opt/oracle/cfgtoollogs下的某个子目录中。找到最近时间的目录查看里面的.log文件。错误信息往往非常具体比如“ORA-XXXXX: ...”。检查密码复杂度这是最常见的问题。脚本交互时设置的密码可能不符合Oracle的默认密码策略。解决方法有两种一是设置一个包含大小写字母、数字和特殊字符的复杂密码二是在运行脚本前先手动设置一个简单的密码但需要修改密码策略不推荐生产环境。检查/tmp空间确保/tmp有至少1GB的可用空间。数据库创建过程中会生成大量临时文件。检查内核参数是否生效虽然预安装包配置了参数但需要重启系统或执行sysctl -p才能生效。可以对比/etc/sysctl.d/98-oracle-*.conf中的值和sysctl -a输出的实际值。5.2 “sqlplus: command not found” 或 “ORA-12547: TNS:lost contact”这通常是环境变量ORACLE_HOME和PATH设置不正确导致的。命令找不到确保ORACLE_HOME/bin已加入PATH并且用source命令使配置文件生效或者重新登录oracle用户。ORA-12547这个错误比较棘手通常意味着sqlplus无法找到或加载Oracle的核心库。请按顺序检查$ORACLE_HOME/lib是否在LD_LIBRARY_PATH环境变量中。oracle用户对$ORACLE_HOME目录及其子目录是否有读和执行权限。可以用ls -ld $ORACLE_HOME检查。操作系统是否缺少某些基础库。尽管预安装包解决了大部分依赖但仍有极少数情况会遗漏。可以用ldd $ORACLE_HOME/bin/oracle命令检查二进制文件的依赖是否都能找到。5.3 监听器无法启动或客户端无法连接监听器无法启动检查listener.ora文件的格式和路径是否正确。确保文件在$ORACLE_HOME/network/admin目录下。检查端口1521是否已被其他程序占用netstat -tlnp | grep 1521。客户端无法连接首先在服务器本地用sqlplus username/passwordhostname:1521/ORCLPDB1测试排除网络问题。检查防火墙规则是否生效。检查监听器状态确认服务ORCLPDB1是否已正确注册。有时PDB没有自动注册可以在PDB中执行ALTER SYSTEM REGISTER;。检查客户端的tnsnames.ora配置是否正确或者连接字符串是否写对了服务名是PDB名不是CDB名。5.4 RPM安装与手动安装的目录结构差异习惯了手动安装的人可能会找不到文件。RPM安装有固定的目录结构ORACLE_HOME/opt/oracle/product/19c/dbhome_1数据文件、控制文件、重做日志默认在/opt/oracle/oradata/ORCLCDB下。这个路径是在数据库创建时由配置脚本决定的。快速恢复区FRA默认在/opt/oracle/oradata/ORCLCDB下。配置文件spfile, pfilespfile默认在$ORACLE_HOME/dbs/spfileORCLCDB.ora而数据文件目录下会有对应的pfile备份。了解这个结构对于后续的备份、恢复、迁移操作至关重要。6. 进阶管理服务控制与软件维护RPM安装方式将Oracle数据库更多地视为一个“系统服务”这带来了管理上的便利。6.1 使用系统服务管理数据库RPM安装后数据库实例是作为一个系统服务来管理的。你可以使用以下命令具体命令可能因系统版本而异以下是基于Systemd的EL7/EL8# 查看服务状态 sudo systemctl status oracledb_ORCLCDB-19c # 启动数据库服务这会启动实例和监听器吗不一定看配置 sudo systemctl start oracledb_ORCLCDB-19c # 停止数据库服务 sudo systemctl stop oracledb_ORCLCDB-19c # 设置开机自启 sudo systemctl enable oracledb_ORCLCDB-19c注意这个systemctl服务主要控制的是数据库实例的启动和停止。监听器lsnrctl通常需要单独配置服务或手动管理。你可以将监听器的启动命令加入到oracle用户的.bash_profile或者创建一个独立的systemd服务单元文件。6.2 RPM包的更新与卸载更新如果有新的RPM包版本如19c的补丁集RU理论上可以使用yum localinstall或rpm -Uvh进行升级。但在生产环境操作前务必在测试环境进行完整验证升级前需要备份数据库。卸载卸载也需要按顺序进行。# 1. 删除数据库实例这将删除数据文件 sudo /etc/init.d/oracledb_ORCLCDB-19c delete # 2. 卸载数据库软件包 sudo yum remove oracle-database-ee-19c # 3. 可选卸载预安装包。注意这会移除它创建的用户和组但不会还原修改的内核参数。 sudo yum remove oracle-database-preinstall-19c警告delete操作是不可逆的会删除该数据库实例的所有数据文件、控制文件和日志文件。执行前必须确保已有完整备份。7. 从传统安装迁移到RPM管理的思考如果你已经有一个手动安装的Oracle 19c环境是否值得迁移到RPM管理这取决于你的需求。适合迁移的场景新环境部署毫无疑问RPM是首选能极大提升部署效率和一致性。环境标准化团队需要统一的部署规范减少因手工操作导致的环境差异。希望集成到自动化运维体系RPM包更容易被Ansible、SaltStack等配置管理工具调用。需要谨慎评估的场景现有生产环境迁移风险高。RPM安装有固定的ORACLE_HOME和数据目录与现有环境可能冲突。更稳妥的做法是1在新服务器上用RPM部署新实例2使用Oracle Data Pumpexpdp/impdp或传输表空间等技术迁移数据。非标准目录结构如果你的现有数据库使用了非常规的目录结构迁移会比较麻烦。高度定制化的环境如果手动安装时修改了大量内核参数、资源限制且与预安装包提供的标准值不同需要评估差异的影响。我个人建议对于所有新的、非极端定制化的Oracle 19c on Linux部署都应该优先考虑RPM安装方式。它代表了一种更现代、更规范的软件交付和管理理念。把时间从反复折腾安装环境节省下来投入到更重要的数据库设计、性能优化和业务支持中去这才是DBA价值的真正体现。