Oracle 11g安装时swap检查失败,只需临时创建并启用优先级≥0的文件型swap(如fallocate -l 4G /tmp/swapfile && chmod 600 /tmp/swapfile && mkswap /tmp/swapfile && swapon -p 10 /tmp/swapfile),即可通过校验。
oracle 11g 安装时卡在「swap size: expected x.xxgb, found y.yygb」红标页,不是 swap 不够,而是它根本没认出你已有的 swap —— 临时建一个文件型 swap 并正确启用,5 分钟内就能过检。
为什么 free -m 显示 swap 足够,runInstaller 还报错
Oracle 校验脚本不看 free -m 的缓存输出,而是直接读 /proc/meminfo 中的 SwapTotal 和 SwapFree,再套用分级公式(例如物理内存 1–2GB 时,要求 swap ≥ 1.5×RAM)。更关键的是:它只认「已激活 + 优先级 ≥ 0」的 swap 区。常见踩坑点包括:
-
swapon /swapfile后没指定-p,导致 priority = -1(systemd-swap 或某些发行版默认行为),Oracle 直接跳过该 swap - swap 文件权限不是
600,mkswap可能静默失败或被内核拒绝挂载 - 路径放在
/home或/root下,SELinux 策略阻止访问,swapon表面成功但实际未生效 - 用了
fallocate创建文件但没禁用写缓存(chattr +C),某些内核版本下mkswap会报错
用 dd 还是 fallocate?选哪个更稳
线上应急首选 fallocate,快且不占 I/O;虚拟机或低配环境用 dd 更兼容。二者核心差异在底层机制和容错性:
-
fallocate -l 4G /swapfile:瞬间完成,但要求文件系统为 ext4/xfs;若目标分区空间不足,会直接报错,不写零也不触发磁盘满 -
dd if=/dev/zero of=/swapfile bs=1M count=4096:慢但通用,适用于所有 Linux 发行版;注意别用太小的bs(如 32K),易因 count 计算错误导致大小偏差 - 无论哪种,创建后必须立刻执行
chmod 600 /swapfile,否则swapon会拒绝(内核强制检查) - 避免用
dd if=/dev/urandom——Oracle 不需要加密内容,纯拖慢速度还可能触发熵池阻塞
swapon 后 Oracle 还不认?重点查 priority 和路径
运行 swapon --show 或 cat /proc/swaps,确认两件事:
- 你的 swap 文件是否出现在列表中(路径要完全一致,比如
/tmp/ora_swap不能写成tmp/ora_swap) - 最后一列
priority值是否 ≥ 0;若为负数,立刻执行:swapoff /swapfile && swapon -p 10 /swapfile - 不要依赖
swapon -a全局加载——它会 reload 所有 fstab 条目,可能把正在用的 swap 分区也关掉,引发 Oracle OOM - 验证是否真正生效:
grep SwapTotal /proc/meminfo输出值应比之前增加对应大小(单位 kB)
临时方案做完就走?这些细节决定成败
安装完成前别关终端,swap 文件是临时的,但 Oracle 校验只发生在 runInstaller 启动瞬间。容易被忽略的关键点:
- swap 文件必须放在可写、无 SELinux 限制的路径:
/tmp或/var/tmp最稳妥;/home/oracle在多数 RHEL/CentOS 上会被 SELinux 拦截 - 如果系统启用了
zram或systemd-swap,建议先systemctl stop systemd-swap再操作,避免干扰 - RAC 环境下,所有节点 swap 大小、优先级、启用状态必须严格一致,哪怕只差 1MB 或 priority 差 1,都可能在集群启动阶段失败
- 安装完别急着删 swap 文件——Oracle 实例启动时仍会校验可用虚拟内存(
MemTotal + SwapTotal≥sga_max_size + pga_aggregate_target * 1.5),删早了可能 ORA-27102











