oracle 19c 在 rhel 8 上可安装但非官方认证,需跳过硬编码检查、安装 libnsl 和 compat-libcap1(而非已移除的 compat-libpthread/libstdc++)、配置 /etc/sysctl.d/99-oracle.conf、扩容 /dev/shm 并禁用 selinux。

Oracle 19c 官方文档未将 RHEL 8 列为“认证操作系统”,但实际可装——前提是绕过硬编码检查、补全被移除的运行时依赖、并手动调平内核与权限配置。强行照搬 RHEL 7 的 yum install compat-libpthread compat-libstdc++ 命令会失败,且污染系统。
为什么 compat-libpthread 和 compat-libstdc++ 在 RHEL 8 上根本不存在
RHEL 8 的 glibc 和 libstdc++ 已彻底移除对旧 ABI 的兼容层。compat-libpthread 是为 LinuxThreads 设计的过渡包,只存在于 EL7 及更早仓库;dnf search compat-libpthread 返回空结果不是源没配好,而是它压根不在任何官方或 EPEL 源中。同理,compat-libstdc++-33 在 RHEL 8 中已被删除,Oracle 安装脚本里对该包名的检查属于“伪依赖”——真正需要的是符号级兼容,而 RHEL 8 自带的 libstdc++-8.5.0 已提供 GLIBCXX_3.4.20 及以上版本。
- 验证符号存在:
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.20 - 若输出含该字符串,说明 C++ ABI 满足要求,无需额外安装兼容包
- 强行从 EL7 手动安装 RPM 会导致
glibc版本冲突、ldconfig缓存污染,甚至systemd启动失败
runInstaller 报 INS-08101 或找不到 libnsl.so.1 怎么办
这是 RHEL 8 上最常遇到的两个连锁报错:INS-08101 多由 CV_ASSUME_DISTID=RHEL7.6 环境变量缺失或 supportedOSCheck 被触发引起;libnsl.so.1 缺失则直接导致 OUI 和 Perl 子进程崩溃。
- 必须安装:
libnsl(提供/lib64/libnsl.so.1)、compat-libcap1(修复getcap/setcap调用)、oracle-database-preinstall-19c(el8 版本) - 正确命令顺序:
sudo dnf install -y libnsl compat-libcap1→sudo dnf install -y oracle-database-preinstall-19c - 运行安装器时加参数跳过检查:
./runInstaller -ignorePrereq -J"-Doracle.install.db.validate.supportedOSCheck=false" - 若仍报
libnsl.so.1找不到,检查LD_LIBRARY_PATH是否被覆盖:unset LD_LIBRARY_PATH后重试,不要在.bash_profile里硬写/lib64
RHEL 8 特有配置项不能照抄 RHEL 7
很多网上教程把 RHEL 7 的 /etc/sysctl.conf 参数原样复制到 RHEL 8,结果重启后失效——RHEL 8 推荐使用 /etc/sysctl.d/99-oracle.conf 单独管理;/dev/shm 默认挂载 size=4G,但 Oracle 要求至少等于 sga_max_size;SELinux 在 root.sh 阶段会拒绝修改上下文,临时设为 permissive 更稳妥。
-
/dev/shm必须扩容:编辑/etc/fstab,改行为tmpfs /dev/shm tmpfs size=8G,noexec,nosuid,nodev 0 0,再执行sudo mount -o remount /dev/shm -
pdksh已废弃,Oracle 检查脚本仍调用它:建软链sudo ln -s /bin/mksh /bin/pdksh - 禁用 SELinux:
sudo setenforce 0+ 修改/etc/selinux/config中SELINUX=disabled - 内核参数如
kernel.shmall需按物理内存重新计算,不能直接套用 RHEL 7 示例值
最关键的细节是:Oracle 19c 在 RHEL 8 上启动监听器或建库时,容易因 /dev/shm 大小不足或 libstdc++.so.6 权限问题触发 ORA-27123;而这些错误不会出现在安装日志里,只在首次 sqlplus / as sysdba 后才暴露。装完别急着庆祝,先 ls -l /usr/lib64/libstdc++.so.6 确认 oracle 用户有读权限,再 df -h /dev/shm 核对大小。











