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 安装方式的优势与限制
- 2. RPM 安装前置准备
- 3. 安装 preinstall 包
- 4. 安装 Oracle Database RPM 包
- 5. 配置数据库(/etc/init.d/oracledb_*)
- 6. 创建数据库
- 7. 配置环境变量与验证
- 8. RPM 安装的目录结构
- 9. 常见坑与排错
- 10. RPM vs ZIP vs 图形化对比
- 11. 最佳实践
- 12. 参考资料
1. 概述:RPM 安装方式的优势与限制
Oracle 从 18c 起官方提供 RPM 包形式的安装介质[1],相比传统 ZIP + OUI 方式,RPM 安装把”解压、配置环境、注册服务”整合到了一个 yum localinstall 命令中。
核心优势[1][2]:
- 极简流程:
yum install一条命令完成软件安装 - 自动配置依赖:preinstall 包会自动配置内核参数、用户、资源限制
- 不需要图形界面:无需 OUI、无需响应文件
- 可纳入配置管理:Ansible、SaltStack 等可直接管理 RPM
- 默认路径规范:所有安装到
/opt/oracle,符合 OFA
主要限制:
- 路径固定:默认
/opt/oracle/product/19c/dbhome_1,不能修改 - SID 固定:默认
ORCLCDB,需手工修改配置文件才能改 - 依赖 systemd/init.d:以服务方式启停,部分场景不灵活
- 不适用 RAC:RPM 包仅支持单实例,RAC 需用 GI + ZIP 方式
- preinstall 包版本敏感:不同 OS 版本必须用对应版本的 preinstall 包
适用场景:
- 开发/测试环境快速拉起 Oracle
- CI/CD 流水线中的数据库实例
- Docker 镜像构建
- DBA 入门学习
不适用场景:
- RAC 集群部署
- 需要自定义安装路径
- 需要打补丁的复杂场景(RPM 方式打 RU 较繁琐)
- 生产核心系统(推荐 ZIP + 静默安装,可控性更强)
2. RPM 安装前置准备
2.1 硬件与系统要求
| 资源 | 最低要求 | 推荐 |
|---|---|---|
| 物理 memory | 2 GB | 8 GB+ |
| Swap | 1.5×物理内存(≤16GB) | 与物理内存相同 |
| /tmp 空间 | 1 GB | 5 GB |
| /opt 空间 | 10 GB | 20 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用户和oinstall、dba等组 - 配置
/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-libcap1、compat-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 安装完成后:
- 软件解压到
/opt/oracle/product/19c/dbhome_1 - 创建
/etc/init.d/oracledb_ORCLCDB-19c服务脚本 - 创建
/etc/sysconfig/oracledb_ORCLCDB-19c.conf配置文件 - 尚未创建数据库(数据库需用
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]:
- /etc/oratab 中无对应条目
- listener.ora 中 HOST 错误(RHEL 8 默认返回 IPv6)
- 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. 最佳实践
- 优先用 preinstall 包:避免手工配置内核参数和资源限制
- RHEL 8 用 el8 版本 preinstall:避免内核参数缺失[5]
- ORACLE_PWD 用强密码:默认空密码会被随机生成弱密码
- 修改 SID 和 PDB 名:默认 ORCLCDB 不适合生产
- 配置 /dev/shm:内存自动管理时必须足够大
- 配置大页:内存 > 8GB 时启用 HugePages
- 安装后立即备份:建库完成后做一次全备
- 打补丁到最新 RU:19.3 基础版有已知 bug
- 配置 EM Express:方便 Web 管理数据库
- 纳入 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
相关文章