Oracle 19c安装提示“交换分区建议值不符”绝大多数情况下并非swap真实不足,而是预检查因cgroup v2不兼容(如RHEL/OL 8.4+、Ubuntu 20.04+)误判PRVF-0401/PRVF-0657,或强行套用过时规则;官方要求为动态值:≤2GB RAM需swap≥1.5×RAM,2–16GB需≥1×RAM,>16GB只需≥16GB且已激活即可。
oracle 19c安装时提示“交换分区建议值不符”,绝大多数情况不是 swap 真不够,而是预检查逻辑误判或强行套用过时规则——尤其在 rhel/ol 8+、ubuntu 20.04+ 等启用 cgroup v2 的系统上,prvf-0401 或 prvf-0657 报错根本与 swap 大小无关。
swap 大小到底够不够?先看真实需求,别被警告带偏
Oracle 官方对 swap 的要求是动态的,不是固定值:
- ≤ 2GB RAM → swap ≥ 1.5× RAM
- 2GB–16GB RAM → swap ≥ 1× RAM
- > 16GB RAM → swap ≥ 16GB(上限,不是越多越好)
例如:机器有 32GB 内存,swap 设为 16GB 就完全合规。用 swapon --show 和 free -h 确认已激活且大小达标即可。安装程序却报“建议值 32GB”,那是它自己算错了——因为它没读取 /proc/meminfo 中的 MemTotal,而是硬编码了旧版规则或被 cgroup v2 干扰导致数值解析失败。
为什么 ignorePrereq 加了还失败?顺序和响应文件必须同步改
静默安装中,-ignorePrereq 不是开关,而是一个“触发器”,必须配合响应文件里对应校验项的显式关闭才生效:
-
-ignorePrereq必须放在-responseFile参数之前,顺序颠倒即失效 - 响应文件中必须设
oracle.install.db.checkForOSSupport=false,否则 OS 版本检查仍会拦截 - 必须设
oracle.install.db.DiskSpaceCheck=false,否则磁盘空间不足警告会中断流程 - 保留
oracle.install.db.config.starterdb.password.ALL=xxx,否则跳过检查后卡在密码验证
只加命令行参数、不改响应文件,等于白加;改了响应文件但顺序错,也照样报 PRVF-0002。
cgroup v2 是真凶,swap 扩容是无效操作
在 RHEL 8.4+、Oracle Linux 8.5+、Ubuntu 20.04+ 上,mount | grep cgroup 若输出含 cgroup2 或 unified,就确认是 cgroup v2 导致检查失败。此时:
- 不要用
fallocate或mkswap扩容 swap——它解决不了接口路径变更问题 - 检查内核是否支持降级:
zcat /proc/config.gz | grep CGROUP_V1应返回CONFIG_CGROUP_V1=y - 编辑
/etc/default/grub,在GRUB_CMDLINE_LINUX行末加cgroup_no_v1=memory - 执行
grub2-mkconfig -o /boot/grub2/grub.cfg并重启 - 验证:
cat /proc/cmdline | grep cgroup_no_v1有输出,且ls /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes存在
做完这些,不用动 swap,安装就能正常识别已有空间。
跳过检查后最常踩的坑:内核参数和 /dev/shm 容量
忽略先决条件 ≠ 环境就绪。很多问题在实例启动阶段才暴露,比安装失败更难定位:
-
semmsl过低 → 启动时报ORA-27123: unable to attach to shared memory segment -
ulimit -n(nofile)太小 → 连接数稍高就触发ORA-00020 -
/dev/shm挂载容量 < 4GB → 即使物理内存充足,也会报ORA-27102: out of memory - SELinux 启用未配策略 → 监听器绑定端口失败,报
ORA-12547
这些不会在安装界面报错,但建库或启库时直接失败。跳过检查前,至少该确认 sysctl.conf 和 limits.conf 已按 Oracle 19c 要求调整。


















