Oracle安装卡在swap检查失败,90%情况只需创建满足三条件的文件型swap:已激活、priority≥0、路径可访问;需用fallocate/dd创建、chmod600、mkswap、swapon-p10,并验证/proc/swaps和SwapTotal。

Oracle 安装卡在 swap 检查失败,不是必须扩容物理内存或重装系统——90% 的情况,只需创建一个满足三条件的文件型 swap:/swapfile 已激活、priority ≥ 0、路径可访问,5 分钟内就能过检。
为什么 free -h 显示 swap 足够,runInstaller 还报错
Oracle 预检查脚本不读 free 缓存,而是直接解析 /proc/meminfo 中的 SwapTotal。该值只统计「已启用且 priority ≥ 0」的 swap 区。常见断点:
-
swapon /swapfile没加-p参数,系统默认设priority = -1(RHEL 8+/systemd-swap 常见),Oracle 直接跳过 -
mkswap前没执行chmod 600 /swapfile,内核拒绝挂载,swapon表面成功但实际无效 - swap 文件放在
/home或/root下,SELinux 策略阻止访问,swapon返回 0 但/proc/swaps不出现该路径 - 用
fallocate创建后没禁用写缓存(chattr +C /swapfile),某些内核版本下mkswap报错静默失败
创建并启用 swap 文件的最小可行操作链
以添加 4G 为例,绕过所有兼容性陷阱的实操顺序:
- 用
fallocate -l 4G /swapfile(推荐)或dd if=/dev/zero of=/swapfile bs=1M count=4096(兼容性更强) - 立刻执行
chmod 600 /swapfile(缺这步必失败) - 运行
mkswap /swapfile(输出含UUID=才算成功) - 启用并显式设优先级:
swapon -p 10 /swapfile(-p值 ≥ 0 即可,10 是安全值) - 验证:
cat /proc/swaps看是否列出该路径且最后一列为10;再查grep SwapTotal /proc/meminfo,数值应比之前增加4194304(单位 kB)
如何确认问题真是 swap 大小不足,而不是 cgroup v2
别一上来就加 swap。先快速定位根因:
- 运行
mount | grep cgroup:若输出含cgroup2或unified,说明启用了 cgroup v2 → Oracle 19c(含 19.19)预检查不兼容,此时加 swap 文件也无效 - 查日志:
ls /tmp/CVU_*/cvu_err.log 2>/dev/null | xargs grep -l "PRVF-7532";若存在且内容为Sufficient swap space was not found,才是真要加 swap - 看物理内存:若机器有 32GB RAM,Oracle 要求 swap ≥ 16GB(非 32GB),用
swapon --show确认当前已启用 swap 是否达标
临时 swap 文件只是安装时的“过检道具”,不是长期解决方案:安装完成后,等 sqlplus / as sysdba 连上、执行 SELECT status FROM v$instance; 返回 OPEN 后,再执行 swapoff /swapfile && rm /swapfile。提前删可能触发 OOM —— Oracle 安装过程本身不依赖 swap,但建库阶段的临时排序可能换页。


















