Oracle 19c安装硬性要求参数为:kernel.shmmax≥4398046511104、kernel.shmall≥1073741824、kernel.sem=250 32000 100 128、fs.aio-max-nr=1048576;必须写入/etc/sysctl.d/99-oracle.conf并执行sysctl --system,再逐项用sysctl命令验证生效,否则runInstaller在“Checking monitor”阶段卡死。

必须直接改 /etc/sysctl.conf,且 sysctl -p 后要验证生效,否则 runInstaller 会在“Checking monitor”阶段卡死,日志里几乎不报错。
哪些参数是硬性要求,不能调低
Oracle 19c 对共享内存和信号量有最低阈值,低于就拒绝启动或安装失败:
-
kernel.shmmax必须 ≥4398046511104(即 4GB),不是“建议值”,是 Oracle 检查脚本硬编码的下限 -
kernel.shmall要 ≥1073741824(对应 4GB 页数,单位为 page),设小了会导致 SGA 分配失败 -
kernel.sem必须是250 32000 100 128四元组,第四项(数组数量)128不足时,后台进程启动会报ORA-27154: post/wait create failed -
fs.aio-max-nr必须设为1048576,否则异步 I/O 初始化失败,sqlplus / as sysdba连不上实例
为什么 sysctl -p 后还要手动验证
因为 RHEL 8 的 systemd-sysctl 服务可能跳过某些行(比如带中文注释、空行、缩进不规范),导致参数没真正载入:
- 执行
sysctl -p后,必须逐个检查:sysctl kernel.shmmax、sysctl fs.aio-max-nr等,输出值要和/etc/sysctl.conf里写的一致 - 特别注意
kernel.shmall:RHEL 8 默认用pages单位,但有些文档误写成字节,会导致数值差 4096 倍 - 如果
cat /proc/sys/kernel/shmmax显示旧值,说明加载失败,要检查/etc/sysctl.conf是否有语法错误(如等号前后多空格、用了中文符号)
RHEL 8 特有的陷阱:systemd-sysctl 加载顺序问题
RHEL 8 默认启用 systemd-sysctl.service,但它只读取 /etc/sysctl.d/*.conf 和 /etc/sysctl.conf,且按字母序加载——如果你在 /etc/sysctl.d/99-oracle.conf 里覆盖了 /etc/sysctl.conf 中的值,后者反而会被前者覆盖:
- 推荐做法:所有 Oracle 相关参数统一写进
/etc/sysctl.d/99-oracle.conf,删掉/etc/sysctl.conf里的重复项 - 避免混用:不要让
/etc/sysctl.conf和/etc/sysctl.d/*.conf同时定义kernel.shmmax,否则以最后加载的为准,难以排查 - 验证是否被覆盖:
systemctl restart systemd-sysctl && sysctl kernel.shmmax,再对比systemctl status systemd-sysctl日志里有没有 “ignoring” 或 “duplicate” 提示
最容易被忽略的是:内核参数修改后必须重启 systemd-sysctl 或整个系统才能确保 Oracle 安装程序读到最新值——仅 sysctl -p 在某些 RHEL 8.6+ 补丁版本中不可靠,尤其当 oracle-database-preinstall RPM 已预置冲突配置时。











