Oracle 19c RPM 包快速安装详解

Oracle 19c RPM 包快速安装详解

适用版本:Oracle Database 19c (19.3) for Linux x86-64 RPM 适用场景:Oracle Linux / RHEL 系统快速部署 文档版本:v1.0 / 2026-07


目录


1. 概述:RPM 安装方式的优势与限制

Oracle 从 18c 起官方提供 RPM 包形式的安装介质[1],相比传统 ZIP + OUI 方式,RPM 安装把”解压、配置环境、注册服务”整合到了一个 yum localinstall 命令中。

核心优势[1][2]:

  1. 极简流程yum install 一条命令完成软件安装
  2. 自动配置依赖:preinstall 包会自动配置内核参数、用户、资源限制
  3. 不需要图形界面:无需 OUI、无需响应文件
  4. 可纳入配置管理:Ansible、SaltStack 等可直接管理 RPM
  5. 默认路径规范:所有安装到 /opt/oracle,符合 OFA

主要限制

  1. 路径固定:默认 /opt/oracle/product/19c/dbhome_1,不能修改
  2. SID 固定:默认 ORCLCDB,需手工修改配置文件才能改
  3. 依赖 systemd/init.d:以服务方式启停,部分场景不灵活
  4. 不适用 RAC:RPM 包仅支持单实例,RAC 需用 GI + ZIP 方式
  5. preinstall 包版本敏感:不同 OS 版本必须用对应版本的 preinstall 包

适用场景

  • 开发/测试环境快速拉起 Oracle
  • CI/CD 流水线中的数据库实例
  • Docker 镜像构建
  • DBA 入门学习

不适用场景

  • RAC 集群部署
  • 需要自定义安装路径
  • 需要打补丁的复杂场景(RPM 方式打 RU 较繁琐)
  • 生产核心系统(推荐 ZIP + 静默安装,可控性更强)

2. RPM 安装前置准备

2.1 硬件与系统要求

资源最低要求推荐
物理 memory2 GB8 GB+
Swap1.5×物理内存(≤16GB)与物理内存相同
/tmp 空间1 GB5 GB
/opt 空间10 GB20 GB
操作系统OL 7.4+ / RHEL 7.4+(含 8.x)OL 7.9 / OL 8

2.2 关闭防火墙与 SELinux(开发环境)

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

坑 1:生产环境不要直接关闭防火墙,应开放 1521 端口:

firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --permanent --add-port=5500/tcp  -- EM Express
firewall-cmd --reload

2.3 配置主机名

# 设置主机名
hostnamectl set-hostname oracle19c.example.com

# 配置 hosts
echo "$(hostname -I | awk '{print $1}') oracle19c.example.com oracle19c" >> /etc/hosts

# 验证
hostname -f
ping -c 1 oracle19c

坑 2:hostname 必须能正确解析到本机 IP,否则监听器启动失败。

2.4 下载 RPM 包

从 Oracle 官网下载[3]:

# 19c 数据库 RPM 包(约 2.5 GB)
https://download.oracle.com/otn/linux/oracle19c/19.3/rpm/oracle-database-ee-19c-1.0-1.x86_64.rpm

# 19c preinstall 包(约 30 KB)
# Oracle Linux 7:
https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

# RHEL 8:
https://yum.oracle.com/repo/OracleLinux/OL8/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm

SHA256 校验[3]:

oracle-database-ee-19c-1.0-1.x86_64.rpm
SHA256: c519397aea7af9f097cbde6597783f17964e5d53ea3fd90da042d4b65d379652
sha256sum oracle-database-ee-19c-1.0-1.x86_64.rpm

3. 安装 preinstall 包

preinstall 包是 RPM 安装的关键,它自动完成以下工作[1][4]:

  • 创建 oracle 用户和 oinstalldba 等组
  • 配置 /etc/sysctl.conf 内核参数
  • 配置 /etc/security/limits.d/oracle-database-preinstall-19c.conf 资源限制
  • 安装所有依赖的 RPM 包

3.1 Oracle Linux 7(推荐)

方式一:使用 ULN 或 Oracle Linux yum 源(最简)

yum install -y oracle-database-preinstall-19c

方式二:手动下载安装

curl -o oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm \
    https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

验证

# 检查 oracle 用户
id oracle
# 输出:uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),...

# 检查内核参数
sysctl -a | grep -E "shmmax|sem|aio-max"

# 检查 limits
cat /etc/security/limits.d/oracle-database-preinstall-19c.conf

3.2 RHEL 7

RHEL 7 不在 Oracle 官方 yum 源中,需要手动下载 preinstall 包[4]:

# 下载
curl -o oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm \
    https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

# 安装(会自动安装所有依赖)
yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

# 清理
rm oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

坑 3:RHEL 7 安装 preinstall 包可能因缺少 compat-libcap1compat-libstdc++-33 报依赖错误。需先配置 EPEL 或安装源:

# 安装 EPEL
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# 安装缺失依赖
yum install -y compat-libcap1 compat-libstdc++-33

3.3 RHEL 8 / OL 8

坑 4:RHEL 8 必须用 el8 版本的 preinstall 包[5]:

# ❌ 错误:用 el7 包会缺失 fs.aio-max-nr 等内核参数
yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

# ✅ 正确:用 el8 包
dnf install -y oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm

手动补全缺失项(如未用 el8 包):

# 补全内核参数
echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf
echo "kernel.shmmax = 536870912" >> /etc/sysctl.conf
sysctl -p

****** 补全 limits
cat >> /etc/security/limits.d/oracle-database-preinstall-19c.conf <<'EOF'
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
EOF

RHEL 8 额外依赖处理[5]:

# libnsl 必须同时装 x86_64 和 i686 版本
dnf install -y libnsl libnsl.i686

# ksh 替代 pdksh,需建符号链接
ln -sf /usr/bin/ksh /bin/pdksh

4. 安装 Oracle Database RPM 包

4.1 执行安装

# 进入 RPM 包所在目录
cd /tmp

# 安装(约 5-10 分钟,视磁盘速度)
yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm

安装过程输出

Loaded plugins: ulninfo
Examining oracle-database-ee-19c-1.0-1.x86_64.rpm: oracle-database-ee-19c-1.0-1.x86_64
Marking oracle-database-ee-19c-1.0-1.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package oracle-database-ee-19c.x86_64 0:1.0-1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved
...
Installing:
 oracle-database-ee-19c     x86_64     1.0-1

Complete!

4.2 安装后状态

RPM 安装完成后:

  1. 软件解压到 /opt/oracle/product/19c/dbhome_1
  2. 创建 /etc/init.d/oracledb_ORCLCDB-19c 服务脚本
  3. 创建 /etc/sysconfig/oracledb_ORCLCDB-19c.conf 配置文件
  4. 尚未创建数据库(数据库需用 configure 命令触发)

坑 5:很多人以为 RPM 装完就好了,结果数据库没建起来。yum install 只是装软件,必须执行 configure 才会建库。


5. 配置数据库(/etc/init.d/oracledb_*)

5.1 查看默认配置文件

cat /etc/sysconfig/oracledb_ORCLCDB-19c.conf

默认内容

# db unique name
ORACLE_SID=ORCLCDB
ORACLE_UNQNAME=ORCLCDB
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
ORACLE_VERSION=19c
LISTENER_NAME=LISTENER
# password
ORACLE_PWD=
# template
TEMPLATE_NAME=General_Purpose.dbc
# charset
CHARSET=AL32UTF8
# PDB info
PDB_NAME=ORCLPDB1
LISTENER_PORT=1521
# EM express
EM_EXPRESS_PORT=5500
# create as CDB
CREATE_AS_CDB=true
# number of PDBs
NUMBER_OF_PDBS=1
# PDB options
PDB_OPTIONS=

5.2 修改配置(可选)

生产环境建议修改

# 备份
cp /etc/sysconfig/oracledb_ORCLCDB-19c.conf /etc/sysconfig/oracledb_ORCLCDB-19c.conf.orig

# 修改
vi /etc/sysconfig/oracledb_ORCLCDB-19c.conf

典型修改项

# 改 SID
ORACLE_SID=orcl
ORACLE_UNQNAME=orcl

# 改密码(强密码)
ORACLE_PWD=******

# 改 PDB 名
PDB_NAME=prod

# 改字符集(中文场景一般用 ZHS16GBK 或 AL32UTF8)
CHARSET=AL32UTF8

5.3 修改服务脚本名称(如改了 SID)

如果改了 ORACLE_SID,需要重命名服务脚本和配置文件:

# 复制服务脚本
cp /etc/init.d/oracledb_ORCLCDB-19c /etc/init.d/oracledb_orcl-19c

# 修改脚本内的 SID
sed -i 's/ORCLCDB/orcl/g' /etc/init.d/oracledb_orcl-19c

# 复制配置文件
cp /etc/sysconfig/oracledb_ORCLCDB-19c.conf /etc/sysconfig/oracledb_orcl-19c.conf

# 注册 systemd 服务
chkconfig --add oracledb_orcl-19c
chkconfig oracledb_orcl-19c on

坑 6:服务脚本名称必须严格匹配 oracledb_<SID>-19c,否则 chkconfig 会失败。


6. 创建数据库

6.1 触发建库

# 执行 configure(约 30-60 分钟,视硬件和内存)
/etc/init.d/oracledb_ORCLCDB-19c configure

输出

Configuring Oracle Database ORCLCDB.
Prepare for db operation
8% complete
Copying database files
31% complete
Creating and starting Oracle instance
32% complete
36% complete
40% complete
43% complete
46% complete
Completing Database Creation
51% complete
53% complete
54% complete
Creating Pluggable Databases
58% complete
77% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the log files at:
 /opt/oracle/cfgtoollogs/dbca/ORCLCDB.
Database Information:
Global Database Name:ORCLCDB
System Identifier(SID):ORCLCDB
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details.

6.2 configure 过程解析

configure 内部实际上调用了 dbca -silent 静默建库[1],等效命令:

dbca -silent -createDatabase \
  -templateName General_Purpose.dbc \
  -gdbname ORCLCDB -sid ORCLCDB \
  -characterSet AL32UTF8 \
  -createAsContainerDatabase true \
  -numberOfPDBs 1 \
  -pdbName ORCLPDB1 \
  -pdbAdminPassword Oracle_123 \
  -sysPassword Oracle_123 \
  -systemPassword Oracle_123 \
  -emConfiguration NONE \
  -datafileDestination /opt/oracle/oradata \
  -recoveryAreaDestination /opt/oracle/recovery_area \
  -storageType FS \
  -memoryMgmtType AUTO_SGA \
  -totalMemory 2048

6.3 查看建库日志

# 主日志
ls -lt /opt/oracle/cfgtoollogs/dbca/ORCLCDB/

# 跟踪日志
tail -f /opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log

7. 配置环境变量与验证

7.1 配置 oracle 用户环境变量

su - oracle
vi ~/.bash_profile

添加内容

# Oracle 环境变量
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
export ORACLE_SID=ORCLCDB
export ORACLE_UNQNAME=ORCLCDB

export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

使配置生效

source ~/.bash_profile

7.2 验证数据库

sqlplus / as sysdba
-- 实例状态
SQL> SELECT status FROM v$instance;
STATUS
------------
OPEN

-- 数据库版本
SQL> SELECT banner_full FROM v$version WHERE banner LIKE 'Oracle%';
BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

-- CDB 信息
SQL> SELECT name, open_mode FROM v$pdbs;
NAME            OPEN_MODE
--------------- ----------
ORCLPDB1        READ WRITE

-- 表空间
SQL> SELECT tablespace_name, status FROM dba_tablespaces;

7.3 验证监听器

lsnrctl status

应看到:

  • LISTENER 已启动
  • Services Summary 中包含 ORCLCDB 和 ORCLPDB1

7.4 启停数据库

使用服务脚本

# 停止
/etc/init.d/oracledb_ORCLCDB-19c stop

# 启动
/etc/init.d/oracledb_ORCLCDB-19c start

# 重启
/etc/init.d/oracledb_ORCLCDB-19c restart

使用 systemd

systemctl status oracledb_ORCLCDB-19c
systemctl stop oracledb_ORCLCDB-19c
systemctl start oracledb_ORCLCDB-19c
systemctl enable oracledb_ORCLCDB-19c  -- 开机自启

使用 sqlplus(更灵活):

su - oracle

# 启动
sqlplus / as sysdba <<EOF
startup;
EOF

lsnrctl start

# 停止
sqlplus / as sysdba <<EOF
shutdown immediate;
EOF

lsnrctl stop

8. RPM 安装的目录结构

/opt/oracle/
├── admin/                            -- admin 目录(adump 等)
│   └── ORCLCDB/
│       └── adump/
├── cfgtoollogs/                      -- 配置工具日志
│   ├── dbca/ORCLCDB/
│   ├── netca/
│   └── opatch/
├── checkpoints/
├── diag/                             -- ADR 诊断目录
│   └── rdbms/orclcdb/ORCLCDB/
│       ├── alert/                    -- alert log
│       ├── trace/                    -- trace 文件
│       └── incident/
├── product/                          -- 软件目录
│   └── 19c/
│       └── dbhome_1/                 -- ORACLE_HOME
│           ├── bin/                  -- 可执行文件
│           ├── rdbms/                -- RDBMS 核心代码
│           ├── network/admin/        -- 监听配置
│           ├── dbs/                  -- 参数文件、密码文件
│           └── install/              -- root.sh 等
├── oradata/                          -- 数据文件
│   └── ORCLCDB/
│       ├── control01.ctl
│       ├── system01.dbf
│       ├── sysaux01.dbf
│       ├── undotbs01.dbf
│       ├── users01.dbf
│       ├── redo01.log
│       ├── redo02.log
│       ├── redo03.log
│       └── ORCLPDB1/                 -- PDB 数据文件
└── recovery_area/                    -- 快速恢复区
    └── ORCLCDB/

/etc 下关键文件

/etc/oratab                           -- oratab 文件
/etc/oraInst.loc                      -- Inventory 位置
/etc/init.d/oracledb_ORCLCDB-19c      -- 服务脚本
/etc/sysconfig/oracledb_ORCLCDB-19c.conf  -- 配置文件
/etc/security/limits.d/oracle-database-preinstall-19c.conf  -- limits

9. 常见坑与排错

坑 1:configure 报 ORA-00845 MEMORY_TARGET

原因:/dev/shm 小于 MEMORY_TARGET。

解决

# 查看 /dev/shm 大小
df -h /dev/shm

# 修改 /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=4G 0 0

# 重新挂载
mount -o remount /dev/shm

# 重新 configure
/etc/init.d/oracledb_ORCLCDB-19c delete    -- 先删除已建一半的库
/etc/init.d/oracledb_ORCLCDB-19c configure

坑 2:configure 报 “ORA-01092: ORACLE instance terminated”

原因:内核参数未生效或内存不足。

解决

# 检查内核参数
sysctl -p

****** 查看具体错误
tail -100 /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/alert_ORCLCDB.log

坑 3:configure 卡在某百分比不动

原因:通常卡在 “Creating and starting Oracle instance”,多半是磁盘 I/O 慢或内存不足。

解决

# 检查磁盘 I/O
iostat -x 1 5

# 检查内存
free -h

# 检查进程
ps -ef | grep -E "ora_|dbca"

# 检查 alert log
tail -f /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/alert_ORCLCDB.log

坑 4:lsnrctl start 报 “libclntsh.so.19.1: cannot open shared object file”

原因:LD_LIBRARY_PATH 未包含 ORACLE_HOME/lib[5]。

解决

su - oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
lsnrctl start

或在 ~/.bash_profile 中配置后 source。

坑 5:service start 静默失败,无错误信息

原因[5]:

  1. /etc/oratab 中无对应条目
  2. listener.ora 中 HOST 错误(RHEL 8 默认返回 IPv6)
  3. oracle 用户环境变量缺失

解决

# 1. 检查 oratab
cat /etc/oratab
# 应有:ORCLCDB:/opt/oracle/product/19c/dbhome_1:N

# 2. 检查 listener.ora
cat $ORACLE_HOME/network/admin/listener.ora
# HOST 应为 IPv4 地址,不能是 localhost

# 3. 检查环境变量
su - oracle
echo $ORACLE_HOME
echo $ORACLE_SID
echo $LD_LIBRARY_PATH

坑 6:root.sh 未执行

原因:RPM 安装方式不显式提示执行 root.sh,但内部已完成。

验证

ls -l /etc/oratab
# 应存在且内容正常

ls -l /usr/local/bin/oraenv
ls -l /usr/local/bin/dbhome
ls -l /usr/local/bin/coraenv
# 这三个脚本应该已创建

坑 7:删除数据库重新创建

# 删除数据库
/etc/init.d/oracledb_ORCLCDB-19c delete

# 验证删除
ls /opt/oracle/oradata/ORCLCDB
# 应不存在

# 重新创建
/etc/init.d/oracledb_ORCLCDB-19c configure

坑 8:RPM 安装后想打 RU 补丁

问题:RPM 包是预编译的,打 RU 不能直接用 opatch。

解决方法 1:用 runInstaller -applyRU(需 ZIP 包介质)

# 准备 ZIP 包和 RU 补丁
unzip LINUX.X64_193000_db_home.zip -d /opt/oracle/product/19c/dbhome_1_new

cd /opt/oracle/product/19c/dbhome_1_new
./runInstaller -applyRU /tmp/30585969/

解决方法 2:保持 19.3 不打补丁(仅开发环境)


10. RPM vs ZIP vs 图形化对比

维度RPM 包ZIP + 静默安装ZIP + 图形化
安装时间5-10 分钟(软件)+ 30 分钟(建库)30-60 分钟30-60 分钟
命令数3-4 条5-10 条鼠标点击
图形界面不需要不需要需要
自动配置preinstall 自动需手工需手工
路径自定义不支持(/opt/oracle)支持支持
RAC 支持不支持支持支持
打 RU 补丁麻烦简单(opatch)简单
自动化极佳(Ansible 友好)良好不支持
生产适用开发/测试生产推荐不推荐
学习成本最低中等较高

选择建议

  • 开发测试环境:RPM 包(快)
  • 生产核心系统:ZIP + 静默安装(可控)
  • 入门学习:图形化安装(直观)
  • CI/CD 流水线:RPM 或 Docker
  • RAC 集群:ZIP + 静默安装(必选)

11. 最佳实践

  1. 优先用 preinstall 包:避免手工配置内核参数和资源限制
  2. RHEL 8 用 el8 版本 preinstall:避免内核参数缺失[5]
  3. ORACLE_PWD 用强密码:默认空密码会被随机生成弱密码
  4. 修改 SID 和 PDB 名:默认 ORCLCDB 不适合生产
  5. 配置 /dev/shm:内存自动管理时必须足够大
  6. 配置大页:内存 > 8GB 时启用 HugePages
  7. 安装后立即备份:建库完成后做一次全备
  8. 打补丁到最新 RU:19.3 基础版有已知 bug
  9. 配置 EM Express:方便 Web 管理数据库
  10. 纳入 systemd:用 chkconfig 或 systemctl 管理

12. 参考资料

[1] Oracle Database 19c Installation Guide for Linux,RPM 安装: https://docs.oracle.com/cd/F19136_01/ladbi/running-rpm-packages-to-install-oracle-database.html

[2] Oracle Database 19c for Linux x86-64 下载页: https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html

[3] Oracle 官方 yum 源: https://yum.oracle.com/

[4] Oracle Database 19c RPM 包 SHA256 校验: https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html

[5] php.cn,《如何在 RHEL 8 上通过 RPM 包快速部署 Oracle 19c》: https://global.php.cn/zh/faq/1797073084.html

[6] 腾讯云,《在 Linux 下安装 Oracle》: https://cloud.tencent.com/developer/information/%E5%9C%A8linux%E4%B8%8B%E5%AE%89%E8%A3%85oracle-article

[7] AskTOM,Oracle Database 19c RPM 安装常见问题: https://asktom.oracle.com


相关文章