Oracle 19c RPM安装实战:30分钟快速部署与深度解析
2026/8/5 6:46:36 网站建设 项目流程

1. 为什么选择RPM包安装Oracle 19c?

如果你在Linux上装过Oracle数据库,大概率经历过从官网下载那一大堆压缩包、手动创建目录、配置环境变量、运行静默安装脚本的“标准流程”。这个过程繁琐、容易出错,而且对新手极不友好。我第一次在CentOS 7上装11g的时候,光是解决各种依赖和内核参数问题就花了大半天。

后来,Oracle从18c开始,为部分Linux发行版(主要是Oracle Linux、Red Hat Enterprise Linux及其衍生版)提供了RPM包安装方式。到了19c,这个方式已经相当成熟。简单来说,RPM包把数据库软件、预安装脚本、依赖关系都打包好了,你只需要像安装一个普通软件那样,用yumrpm命令就能搞定。这不仅仅是安装方式的改变,更是一种理念的转变——让数据库的部署变得更标准化、更接近现代软件的分发方式。

我最近在几台新服务器上部署Oracle 19c,全部采用了RPM方式。实测下来,从准备环境到数据库创建完成,最快的一台只用了不到30分钟,而且过程清晰可控,几乎没遇到什么“玄学”错误。这篇文章,我就把整个基于RPM包安装Oracle 19c的完整流程、核心原理、以及我踩过的几个坑,毫无保留地分享给你。无论你是DBA新手,还是习惯了传统安装方式的老手,相信都能从中获得一些新的启发。

2. 安装前的核心准备:环境与包解析

很多人觉得RPM安装就是“一键搞定”,其实不然。前期准备工作的质量,直接决定了安装过程的顺利程度和后续运行的稳定性。这一步没做好,后面全是坑。

2.1 系统环境检查与调优

首先,你需要一台干净的、满足最低要求的Linux服务器。我强烈推荐使用Oracle Linux 7/8 或者 RHEL/CentOS 7/8。其他发行版(如Ubuntu)理论上可以,但依赖问题会非常棘手,不推荐在生产环境尝试。

安装前,请务必逐项核对以下清单:

  1. 内存与交换空间:官方建议最小内存为1GB,但为了性能,我建议至少4GB。交换空间(Swap)的大小有讲究,可以参考这个公式:如果内存小于2GB,Swap应为内存的2倍;内存2GB到16GB之间,Swap等于内存大小;内存超过16GB,Swap至少16GB。你可以用free -h命令查看。
  2. 磁盘空间/tmp目录至少需要1GB空间。数据库软件本身大约需要7GB,而数据文件、日志文件等所在的目录(比如/u01)则需要根据你的数据量来规划,建议预留50GB以上。用df -h命令检查。
  3. 内核参数:这是传统安装中最麻烦的一环。幸运的是,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/目录下的配置文件中。
  4. 用户与组:预安装包会自动创建操作系统用户oracle和组oinstall(软件所有者)、dba(OSDBA组)。这是与手动安装一个很大的不同,我们不需要再手动去创建了。

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账户):

  1. oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm(以EL8为例,版本号可能更新)。
  2. 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包并没有立即安装一个“立即可用”的数据库。它做的是以下几件事:

  1. 将Oracle 19c的所有二进制文件、库文件、配置文件解压并部署到Oracle的默认目录/opt/oracle/product/19c/dbhome_1下。这就是ORACLE_HOME。
  2. 在系统中注册Oracle的相关服务脚本。
  3. 提供一系列管理命令和模板。

安装完成后,你会发现/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

运行这个脚本时,背后发生了什么?

  1. 脚本会检查环境变量。
  2. 它会提示你为SYS,SYSTEM,PDBADMIN等管理用户设置密码。这里有个坑:脚本可能对密码复杂度有要求(如包含大小写字母和数字),如果密码太简单,可能会报错。建议设置一个符合复杂度的密码。
  3. 脚本会调用Oracle底层的工具,基于一个模板,在指定的ORACLE_HOME下创建一个新的数据库实例(CDB容器数据库,默认包含一个PDB)。这个过程包括创建数据文件、控制文件、重做日志文件、初始化参数文件(spfile)等。
  4. 数据库创建完成后,脚本会自动启动数据库,并配置其在系统启动时自动运行。

数据库创建完成后,默认的数据库名(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_SID=ORCLCDB export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export NLS_LANG=AMERICAN_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 CONTAINER=ORCLPDB1; -- 在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-port=1521/tcp sudo firewall-cmd --reload

现在,你可以从远程客户端(如SQL Developer、其他服务器的sqlplus)进行连接了。连接字符串格式为:主机名或IP:1521/ORCLPDB1,服务名填写ORCLPDB1

5. 常见问题排查与深度解析

即使按照步骤来,也可能会遇到问题。下面是我在多次RPM安装中遇到的几个典型问题及其根因。

5.1 数据库创建脚本执行失败

运行sudo /etc/init.d/oracledb_ORCLCDB-19c configure时,可能会在中间报错退出。

排查思路:

  1. 查看详细日志:脚本的日志通常输出到/opt/oracle/cfgtoollogs下的某个子目录中。找到最近时间的目录,查看里面的.log文件。错误信息往往非常具体,比如“ORA-XXXXX: ...”。
  2. 检查密码复杂度:这是最常见的问题。脚本交互时设置的密码可能不符合Oracle的默认密码策略。解决方法有两种:一是设置一个包含大小写字母、数字和特殊字符的复杂密码;二是在运行脚本前,先手动设置一个简单的密码,但需要修改密码策略(不推荐生产环境)。
  3. 检查/tmp空间:确保/tmp有至少1GB的可用空间。数据库创建过程中会生成大量临时文件。
  4. 检查内核参数是否生效:虽然预安装包配置了参数,但需要重启系统或执行sysctl -p才能生效。可以对比/etc/sysctl.d/98-oracle-*.conf中的值和sysctl -a输出的实际值。

5.2 “sqlplus: command not found” 或 “ORA-12547: TNS:lost contact”

这通常是环境变量ORACLE_HOMEPATH设置不正确导致的。

  • 命令找不到:确保ORACLE_HOME/bin已加入PATH,并且用source命令使配置文件生效,或者重新登录oracle用户。
  • ORA-12547:这个错误比较棘手,通常意味着sqlplus无法找到或加载Oracle的核心库。请按顺序检查:
    1. $ORACLE_HOME/lib是否在LD_LIBRARY_PATH环境变量中。
    2. oracle用户对$ORACLE_HOME目录及其子目录是否有读和执行权限。可以用ls -ld $ORACLE_HOME检查。
    3. 操作系统是否缺少某些基础库。尽管预安装包解决了大部分依赖,但仍有极少数情况会遗漏。可以用ldd $ORACLE_HOME/bin/oracle命令检查二进制文件的依赖是否都能找到。

5.3 监听器无法启动或客户端无法连接

  • 监听器无法启动:检查listener.ora文件的格式和路径是否正确。确保文件在$ORACLE_HOME/network/admin目录下。检查端口1521是否已被其他程序占用:netstat -tlnp | grep 1521
  • 客户端无法连接
    1. 首先在服务器本地用sqlplus username/password@hostname:1521/ORCLPDB1测试,排除网络问题。
    2. 检查防火墙规则是否生效。
    3. 检查监听器状态,确认服务ORCLPDB1是否已正确注册。有时PDB没有自动注册,可以在PDB中执行:ALTER SYSTEM REGISTER;
    4. 检查客户端的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, pfile)spfile默认在$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 localinstallrpm -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 Pump(expdp/impdp)或传输表空间等技术迁移数据。
  • 非标准目录结构:如果你的现有数据库使用了非常规的目录结构,迁移会比较麻烦。
  • 高度定制化的环境:如果手动安装时修改了大量内核参数、资源限制,且与预安装包提供的标准值不同,需要评估差异的影响。

我个人建议,对于所有新的、非极端定制化的Oracle 19c on Linux部署,都应该优先考虑RPM安装方式。它代表了一种更现代、更规范的软件交付和管理理念。把时间从反复折腾安装环境节省下来,投入到更重要的数据库设计、性能优化和业务支持中去,这才是DBA价值的真正体现。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询