Oracle 11g Linux 安裝過程中,內核參數檢測值與實際設置不符、Swap 空間不足導致 ORA-27102 是兩大高頻阻礙。本文記錄根因分析、臨時擴容 Swap 方案、永久修復建議。
現象:安裝前按文檔設置 kernel.sem = 250 32000 100 128,但 OUI 檢測顯示 semmsl=250, semmns=32000, semopm=100, semmni=12800(最後一項多兩個 0)。
根因:OUI 讀取 /proc/sys/kernel/sem 顯示為 4 個值,但內部解析邏輯將第 4 值乘以 100 顯示,屬於**顯示 Bug**,實際運行值正確。
結論:**不影響安裝**,可忽略,繼續下一步。
現象:軟件安裝正常,DBCA 創建數據庫階段報 ORA-27102: out of memory,Alert 日志顯示 Linux Error: 12: Cannot allocate memory。
根因:物理內存 + Swap 總量小於 Oracle 要求最小值(通常 4GB+),或 MEMORY_TARGET/SGA_TARGET 設置過大超過可用虛擬內存。
# 1. 切換 root
su - root
# 2. 創建 4GB Swap 文件(根據 OUI 提示缺口決定大小)
dd if=/dev/zero of=/swapfile_4g bs=1M count=4096
# 或 fallocate -l 4G /swapfile_4g (支持即時分配)
# 3. 設置權限並格式化為 Swap
chmod 600 /swapfile_4g
mkswap /swapfile_4g
# 4. 啟用 Swap
swapon /swapfile_4g
# 5. 驗證
swapon -s
# 或
free -h
# 顯示 Swap 總量已增加 4GB
# 6. 重新運行 DBCA,創建數據庫成功
# /etc/fstab 添加一行(重啟後自動掛載)
/swapfile_4g none swap sw 0 0
# 或調整現有 Swap 分區大小(需 LVM/重新分區,風險較大)
# 建議:規劃階段預留足夠 Swap 分區(≥ 物理內存 1.5 倍或 16GB 取較大值)
/dev/shm 大小 ≥ MEMORY_TARGET。mount -o remount,size=8G /dev/shm 臨時擴大共享內存。vm.nr_hugepages = (SGA_Size_MB / 2) + 100。#!/bin/bash
# preinstall_check.sh
echo "=== Swap ==="; free -h
echo "=== /dev/shm ==="; df -h /dev/shm
echo "=== Kernel Sem ==="; cat /proc/sys/kernel/sem
echo "=== Kernel Shmmax ==="; cat /proc/sys/kernel/shmmax
echo "=== Kernel Shmall ==="; cat /proc/sys/kernel/shmall
echo "=== File Limits ==="; cat /etc/security/limits.conf | grep -E 'nofile|nproc|memlock'
echo "=== User Groups ==="; id oracle
echo "=== DNS/Hosts ==="; ping -c 1 $(hostname); cat /etc/hosts
臨時 Swap 文件是「救急神器」,但**生產環境必須規劃專用 Swap 分區 + HugePages + 足夠 /dev/shm**,從源頭消除內存分配失敗風險。