Oracle 19c 官方不支持 RHEL 8,compat-libstdc++ 已被移除,需用 libstdc++-8.5.0 替代并跳过预检;同时须安装 libnsl、软链 pdksh、调整 sysctl、禁用 SELinux、扩容 /dev/shm 并校验 libaio 版本。
RedHat 8 安装 Oracle 19c 报错 compat-libstdc++ 找不到
oracle 19c 官方不支持 rhel 8,compat-libstdc++ 这个包在 rhel 8 中已被彻底移除 —— 不是 yum 源没配好,而是它压根不存在。强行找“兼容包”或从旧系统拷文件,大概率导致后续链接失败、oraagent.bin 启动崩溃或监听器异常。
替代方案:用 libstdc++ 和 glibc 的实际版本对齐
Oracle 19c 实际依赖的是 C++ 标准库的 ABI 兼容性,不是包名。RHEL 8 自带的 libstdc++.so.6(来自 libstdc++-8.5.0)已满足 Oracle 19c 的符号需求,但安装脚本硬检查 compat-libstdc++ 包名,属于“伪依赖”。
- 确认当前系统
libstdc++版本:yum list installed libstdc++ - 检查关键符号是否存在:
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.20(Oracle 19c 需要至少到GLIBCXX_3.4.20,RHEL 8 默认提供到GLIBCXX_3.4.26) - 跳过 RPM 包检查:运行
runInstaller时加参数-ignorePrereq -J"-Doracle.install.db.validate.supportedOSCheck=false"
必须同步处理的其他 RHEL 8 兼容性问题
只解决 compat-libstdc++ 不够,Oracle 19c 在 RHEL 8 上卡在多个预检环节:
-
libnsl缺失:RHEL 8 将其拆出为独立包,需手动安装sudo yum install libnsl -
pdksh被废弃:Oracle 检查脚本仍调用它,但 RHEL 8 只有mksh;可建软链:sudo ln -s /bin/mksh /bin/pdksh -
sysctl.conf内核参数位置变化:RHEL 8 推荐用/etc/sysctl.d/99-oracle.conf,且部分参数如kernel.shmall需按物理内存重新计算,不能照搬 RHEL 7 示例 - SELinux 策略冲突:安装过程中的
root.sh会因 SELinux 拒绝修改某些上下文而失败;临时设为 permissive 模式更稳妥:sudo setenforce 0
安装后立即验证的关键点
即使安装成功,RHEL 8 上的 Oracle 19c 很容易在首次启动或建库时报 ORA-27123: unable to attach to shared memory segment 或监听器无法注册服务。
- 检查
/dev/shm挂载:RHEL 8 默认挂载为size=4G,但 Oracle 要求至少等于sga_max_size;建议改写/etc/fstab行为tmpfs /dev/shm tmpfs size=8G,noexec,nosuid,nodev 0 0并sudo mount -o remount /dev/shm - 确认
oracle用户对/usr/lib64/libstdc++.so.6有读权限(默认有,但若之前手动替换过库文件可能丢失) - 监听器日志中若出现
TNS-12547: TNS:lost contact,大概率是libaio版本不匹配,需确保安装的是libaio-0.3.112-1.el8(非 el7 或 el9 版本)
这些点不提前对齐,数据库能装上,但基本跑不起来。RHEL 8 + Oracle 19c 是“能用”,但每一步都得绕过设计假设。











