Oracle 19c在RHEL 8上部署需绕过硬编码检查、补全libnsl.so.1等缺失依赖、手动配置sysctl.d内核参数及oracle用户limits,否则runInstaller将报INS-08101或libnsl.so.1 not found错误。

Oracle 19c 在 RHEL 8 上可部署,但不是“开箱即用”——必须绕过硬编码检查、补全被移除的运行时依赖、手动调平内核参数,否则 runInstaller 会卡在检查阶段或直接报 INS-08101、libnsl.so.1 not found。
runInstaller 报 INS-08101 或找不到 libnsl.so.1 怎么办
这是 RHEL 8 上最典型的连锁失败:前者多因安装器硬校验操作系统 ID 失败,后者是 Perl 子进程加载失败的直接原因。
- 必须安装
libnsl(提供/lib64/libnsl.so.1),RHEL 8 默认不带;compat-libcap1也得装,否则setcap调用失败导致监听器无法绑定端口 - 不要执行
dnf install compat-libpthread compat-libstdc++——这两个包在 RHEL 8 官方源里根本不存在,强行从 EL7 手动装会导致glibc版本冲突和systemd启动异常 - 运行安装器时加两个关键参数:
./runInstaller -ignorePrereq -J"-Doracle.install.db.validate.supportedOSCheck=false" - 如果仍报
libnsl.so.1找不到,先unset LD_LIBRARY_PATH再重试;不要在.bash_profile里硬写/lib64到该变量中,它会覆盖系统默认搜索路径
内核参数必须写进 /etc/sysctl.d/99-oracle.conf
RHEL 8 的 systemd-sysctl 服务按字母序加载 /etc/sysctl.d/*.conf,且会跳过语法错误或格式不规范的行。直接改 /etc/sysctl.conf 很可能无效。
- 必须写入的四组值:
kernel.shmmax=4398046511104、kernel.shmall=1073741824、kernel.sem=250 32000 100 128、fs.aio-max-nr=1048576 - 写完后执行
sysctl --system,再逐个验证:sysctl kernel.shmmax、sysctl fs.aio-max-nr,输出值必须和文件里一致 -
kernel.shmall单位是 page(不是字节),设成1073741824对应 4GB;若误写为字节级数值(如4294967296),实际只分配了 1MB 左右内存,SGA 分配必失败 - 避免
/etc/sysctl.conf和/etc/sysctl.d/99-oracle.conf同时定义同一参数,否则以最后加载的为准,排查困难
静默安装前必须配置 oracle 用户资源限制
Oracle 19c 安装和后续实例启动对进程数、文件描述符有硬性要求,仅靠 oracle-database-preinstall-19c 包不够,必须显式配置 limits.d。
- 创建
/etc/security/limits.d/30-oracle.conf,内容为:oracle soft nofile 1024<br>oracle hard nofile 65536<br>oracle soft nproc 16384<br>oracle hard nproc 16384<br>oracle soft stack 10240<br>oracle hard stack 32768
- 注意:
soft stack必须 ≥ 10240,否则sqlplus / as sysdba连接时会报 ORA-01034 + ORA-27101 - 这些限制在用户登录时才加载,所以切 oracle 用户后要新开 shell,不能复用当前未重新登录的会话
-
oracle-database-preinstall-19c包只设置部分项,且不包含stack,漏掉就会在数据库启动阶段失败
最容易被忽略的是:所有修改(内核参数、limits、环境变量)都必须在 su - oracle 后新开 shell 中验证生效,而不是在 root 下跑一遍命令就认为 OK。Oracle 安装器和数据库进程只认当前会话的实际生效值,不读取配置文件的“理论值”。











