rhel 8 上 oracle 19c rpm 安装必须使用适配 el8 的 oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm,否则缺失 fs.aio-max-nr 等内核参数;libnsl 需同时安装 x86_64 和 i686 版本,ksh 需建 pdksh 符号链接,root.sh 不可跳过且须清空 cv_assume_distid 环境变量。

RHEL 8 上 Oracle 19c 的 RPM 安装必须依赖适配 el8 的 preinstall 包和配套依赖,官方不提供独立的 “Oracle 19c 专用 YUM 源”;所谓“配置本地 YUM 源”,本质是为安装 oracle-database-preinstall-19c 和其依赖(如 libnsl、compat-libcap1)搭建可离线/可控的软件分发基础。
为什么不能直接用 Oracle 官方 YUM 源?
RHEL 8 系统默认无法访问 Oracle 官方公开 YUM 源(yum.oracle.com),该源要求有效 Oracle 账户 + 订阅凭证,且其仓库元数据未对 RHEL 8 全面开放;强行配置 baseurl=https://yum.oracle.com/repo/OracleLinux/OL8/oracle/instantclient/x86_64/ 类路径会返回 404 或 403。实际能用的只有两个路径:RHEL 自带 BaseOS/AppStream 仓库 + 第三方兼容包仓库(如 EPEL、Oracle 提供的 compat 仓库)。
必须补全的两个本地仓库目录(BaseOS + AppStream)
RHEL 8 ISO 镜像拆分为两个逻辑仓库:BaseOS(核心系统包)和 AppStream(应用与中间件),缺一不可。挂载后需分别配置:
- 确认 ISO 已挂载:
mount /dev/sr0 /mnt(输出含/dev/sr0 on /mnt type iso9660) - 创建 repo 文件:
/etc/yum.repos.d/rhel8-local.repo - 写入以下内容(注意路径中
BaseOS和AppStream是镜像内真实目录名):
[BaseOS] name=BaseOS baseurl=file:///mnt/BaseOS/ gpgcheck=0 enabled=1 [AppStream] name=AppStream baseurl=file:///mnt/AppStream/ gpgcheck=0 enabled=1
执行 dnf clean all && dnf makecache 后,dnf list available | grep libnsl 应能查到 libnsl.x86_64 和 libnsl.i686 —— 这是 Oracle 19c 启动 sqlplus 的硬性依赖。
如何获取 oracle-database-preinstall-19c 和 compat 包?
oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm 不在 RHEL 8 ISO 中,必须单独获取;compat-libcap1、compat-libstdc++-33 等也已从 RHEL 8 默认仓库移除:
- 优先从 Oracle 官网下载对应 el8 的 preinstall RPM:
oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm(不是 el7 版本) - 将该 RPM 放入本地目录(如
/tmp/oracle-rpms/),并用createrepo /tmp/oracle-rpms/生成仓库元数据 - 添加 repo 配置:
/etc/yum.repos.d/oracle-local.repo,内容为:[oracle-local]<br>name=Oracle Local RPMs<br>baseurl=file:///tmp/oracle-rpms/<br>gpgcheck=0<br>enabled=1
- 对于 compat 包:从 EPEL 8 仓库安装(
dnf install epel-release -y),或从 Oracle 提供的 compat 仓库(如https://yum.oracle.com/repo/OracleLinux/OL8/compat/x86_64/)手动下载并放入同一createrepo目录
root.sh 执行前最易忽略的三个检查点
RPM 安装完成只是解压文件,真正初始化靠 root.sh;它失败往往不是因为脚本本身,而是 YUM 源没配全导致的前置缺失:
-
/etc/sysctl.conf中必须存在fs.aio-max-nr = 1048576—— el7 preinstall 包不会写入此值,el8 版本才带;若手动补,记得运行sysctl -p -
oracle用户的nproc和nofile限制必须来自/etc/security/limits.d/oracle-database-preinstall-19c.conf,且该文件必须被pam_limits.so加载(检查/etc/pam.d/login是否含required pam_limits.so) - 执行
/opt/oracle/product/19c/dbhome_1/root.sh前,确保CV_ASSUME_DISTID未被设为 RHEL7.x 值(如RHEL7.6),否则卡在 OS 检查;临时清空:unset CV_ASSUME_DISTID
YUM 源配得再全,如果 root.sh 执行时发现内核参数或用户限制没生效,它就会静默退出或报错 ORA-01034: ORACLE not available —— 此时回看 /etc/sysctl.conf 和 limits.d 比重装 RPM 更有效。











