离线安装Oracle 19c在CentOS 8上可行,但必须先安装OL8专属的oracle-database-preinstall-19c(el8.rpm),不可用EL7包;它强制提供ksh、libnsl等依赖并配置内核参数,跳过或装错将导致rpm安装失败或configure卡住。

离线安装 Oracle 19c RPM 包在 CentOS 8 上是可行的,但必须严格按依赖顺序安装,且不能跳过 oracle-database-preinstall-19c —— 它不是可选组件,而是强制前置条件。跳过它或装错版本,oracle-database-ee-19c 安装会直接失败并报一堆“missing dependency”错误。
为什么 rpm -ivh oracle-database-ee-19c.rpm 会报错?
根本原因不是包损坏,而是 oracle-database-ee-19c 的 RPM spec 明确声明了对 oracle-database-preinstall-19c 的强依赖(Requires),且校验其版本号。CentOS 8 默认仓库里没有这个包,yum/dnf 也搜不到,所以直接 rpm 安装必然失败。
常见错误现象:
error: Failed dependencies: oracle-database-preinstall-19c is needed by oracle-database-ee-19c-1.0-1.x86_64- 即使手动加
--force --nodeps强装,后续/etc/init.d/oracledb_ORCLCDB-19c configure会卡在 “Preparing for db operation”,因为内核参数、用户权限、目录属主等全都没被预设
必须离线,那 preinstall 包从哪来?
只能从 Oracle 官方 YUM 源下载对应 EL8 的 RPM,不能混用 EL7 的包(比如 oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm 在 CentOS 8 上会因 libnsl、ksh 等底层库不兼容而安装失败)。
实操建议:
- 去 https://www.php.cn/link/e33beac875ea9bfa499fe75ffa71f2a1 手动下载
oracle-database-preinstall-19c-*.el8.x86_64.rpm(注意后缀是el8,不是el7) - 同时下载页面里列出的直接依赖项(页面通常会标出 Requires):
ksh、libaio-devel、libnsl(注意:CentOS 8 默认带libnsl-2.28-72.el8.x86_64,但oracle-database-preinstall-19c有时会要求 i686 版本,需额外下载libnsl-2.28-72.el8.i686.rpm) - 全部上传到目标服务器同一目录,按顺序执行:
rpm -ivh ksh-*.rpm<br>rpm -ivh libaio-devel-*.rpm<br>rpm -ivh libnsl-*.rpm<br>rpm -ivh oracle-database-preinstall-19c-*.el8.x86_64.rpm
装完 preinstall 后,ee 包仍提示 NOKEY 怎么办?
这是 RPM 包签名验证警告,不影响功能,但若想消除,需导入 Oracle 公钥:
先下载公钥:wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol8(离线环境需提前下载好)
再导入:
rpm --import RPM-GPG-KEY-oracle-ol8
然后才能干净安装 ee 包:
yum localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm(用
yum localinstall 而非 rpm -ivh,它能自动处理本地依赖闭环)
configure 脚本卡住或报共享内存不足?
/etc/init.d/oracledb_ORCLCDB-19c configure 是真正建库步骤,它依赖 oracle-database-preinstall-19c 设置的内核参数。但离线环境下容易漏掉两点:
-
shmmax和shmall值未生效:检查/etc/sysctl.conf是否已写入,然后必须运行sysctl -p加载,否则 configure 会因ORA-27123: unable to attach to shared memory segment失败 -
swap分区缺失:Oracle 19c 要求至少 2GB swap,CentOS 8 最小化安装常无 swap。离线环境不能用swapon挂网络存储,得手动创建文件型 swap:dd if=/dev/zero of=/swapfile bs=1G count=2<br>mkswap /swapfile<br>swapon /swapfile<br>echo "/swapfile none swap sw 0 0" >> /etc/fstab
最关键的细节:所有配置(sysctl、swap、hosts 解析、ORACLE_HOSTNAME)必须在运行 configure 前完成,且 oracle 用户的 .bash_profile 里 ORACLE_SID 和 ORACLE_HOME 必须与脚本默认值一致(通常是 ORCLCDB 和 /opt/oracle/product/19c/dbhome_1),否则 configure 会静默使用空值导致监听启动失败。


















