Oracle 23c(常被误标为23ai)要求内核参数shmmax≥4294967296、shmall≥1073741824(页)、sem=250 32000 100 128,且oracle用户memlock须设为unlimited,所有配置需写入/etc/sysctl.d/和/etc/security/limits.conf并重启会话生效。
Oracle 23ai(即 23c Free)明确要求内核 ≥ 5.14,但 OL9.6 实际需 6.12
oracle 官方文档未列出“最低内核版本号”,而是通过支持的操作系统版本间接约束。当前实际部署中,oracle-database-free-23c(常被误标为 23ai)在 oracle linux 9.x 上运行,而 ol9.6 内核已升级至 6.12.0 —— 这不是可选,是必须匹配的 abi 和驱动依赖。若强行在内核 runinstaller 会直接报错退出,或后续 dbca 创建数据库时触发 ora-27102: out of memory。
/proc/sys/kernel/shmall 单位是页,不是字节,写错就失效
这是最常踩的坑:很多人看到 “shmall ≥ 1073741824” 就直接 echo 1073741824 > /proc/sys/kernel/shmall,但没意识到该值单位是“内存页数”,不是字节。在标准 PAGE_SIZE=4096 下,这个值对应约 4GB 物理内存;如果系统页大小非默认(比如启用了大页),数值就会错位。更糟的是,echo 直接写入 /proc 是临时生效,且 Oracle 安装脚本不读它 —— 它只认 /etc/sysctl.d/*.conf 中的持久配置。
- 检查当前页大小:
getconf PAGE_SIZE - 验证是否生效:
sysctl kernel.shmall,不是cat /proc/sys/kernel/shmall - 永久修改必须写入
/etc/sysctl.d/98-oracle-23c.conf,再执行sysctl --system
sem 参数必须为 4 个整数,顺序不能乱
kernel.sem 不是单个数字,而是用空格分隔的 4 元组:SEMMSL SEMMNS SEMOPM SEMMNI。Oracle 23c 要求至少 250 32000 100 128。少一个、多一个、顺序颠倒(比如把 128 放第一位),都会导致 ipcs -l 显示异常,进而使实例启动失败。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 查看当前值:
sysctl kernel.sem或cat /proc/sys/kernel/sem - 错误示例:
kernel.sem = 250 32000 128(缺第 4 个)→ 启动时报ORA-27154 - 正确写法必须严格:
kernel.sem = 250 32000 100 128
limits.conf 中 oracle 用户的 memlock 必须设为 unlimited
Oracle 23c 默认启用大页(HugePages),而 memlock 限制决定了用户能锁定多少物理内存。若 limits.conf 中设了固定值(如 64000),即使内核参数全对,sqlplus / as sysdba 登录后执行 startup 仍会卡住,日志里出现 WARNING: You have configured the HugePages feature, but the memlock limit is not set to unlimited。
- 确认设置位置:
/etc/security/limits.d/oracle-database-preinstall.conf(预装包生成)或手动加到/etc/security/limits.conf - 必须两行都写:
oracle soft memlock unlimited和oracle hard memlock unlimited - 新会话才生效 —— 切换用户或重新 ssh,别指望
source一下就管用
transparent_hugepage 仍为 always、或 memlock 没放开、或 shmall 单位算错,照样起不来实例。这些点不是“建议”,是安装流程里真实卡死的位置。










