Oracle安装卡在swap检查失败是因为校验脚本只认priority≥0且已激活的swap,需用fallocate或dd创建文件型swap、chmod 600、swapon -p 10启用,并验证/proc/swaps中priority≥0及SwapTotal增加。

Oracle安装卡在swap检查失败,不是swap真不够,而是它没认出你已有的swap——临时建一个文件型swap并正确启用,5分钟内就能过检。
为什么free -m显示足够但runInstaller仍报错
Oracle校验脚本不读free -m缓存,而是直接解析/proc/meminfo里的SwapTotal。更关键的是:它只统计「已激活 + priority ≥ 0」的swap区。常见失效原因包括:
-
swapon /swapfile没加-p参数,导致实际priority = -1(systemd-swap或某些发行版默认行为) -
/swapfile权限不是600,mkswap可能静默失败,或swapon拒绝挂载 - 路径含
~、相对路径或SELinux受限目录(如/home、/root),swapon表面成功但未真正生效 - 用
fallocate创建但文件系统不支持(如老版本ext3),或未禁用写缓存(chattr +C缺失),mkswap报错
用fallocate还是dd?选哪个更稳
线上应急首选fallocate:快、不占I/O、无磁盘写压力;虚拟机或低配环境用dd更兼容。二者核心差异在底层机制:
-
fallocate -l 4G /tmp/swapfile:瞬间完成,要求文件系统为ext4/xfs;空间不足时直接报错,不写零也不触发磁盘满 -
dd if=/dev/zero of=/tmp/swapfile bs=1M count=4096:慢但通用,适用于所有Linux发行版;避免用太小bs(如32K),易因count计算错误导致大小偏差 - 无论哪种,创建后必须立刻执行
chmod 600 /tmp/swapfile,否则swapon会拒绝(内核强制检查) - 别用
dd if=/dev/urandom——Oracle不需要加密内容,纯拖慢速度还可能触发熵池阻塞
启用后Oracle还不认?重点查priority和路径
运行swapon --show或cat /proc/swaps,确认两件事:
- 你的swap文件是否出现在列表中(路径要完全一致,比如
/tmp/ora_swap不能写成tmp/ora_swap) - 最后一列
priority值是否≥0;若为负数,立刻执行:swapoff /tmp/swapfile && swapon -p 10 /tmp/swapfile - 不要依赖
swapon -a全局加载——它会reload所有/etc/fstab条目,可能把正在用的swap分区也关掉,引发Oracle OOM - 验证是否真正生效:
grep SwapTotal /proc/meminfo输出值应比之前增加对应大小(单位kB)
临时方案做完就走,别碰/etc/fstab
Oracle安装只需要swap在runInstaller运行期间被识别,不是长期服务需求。所以:
- 临时swap文件建议放在
/tmp下,安装完可立即swapoff /tmp/swapfile && rm /tmp/swapfile - 不要往
/etc/fstab里加行——重启后多一个swap区未必坏事,但万一fstab写错导致系统无法启动,就得进救援模式修复 - 如果机器后续要长期跑Oracle,再考虑永久配置;但注意:Oracle 19c起对swap要求已放宽(>16GB RAM只需16GB swap),不必盲目堆大
真正容易被忽略的是priority字段和/proc/swaps的实时输出——很多人只看free -h就以为万事大吉,结果Oracle根本没把它当swap算。


















