在使用 DBCA 靜默模式(-silent -responsefile)建立 Oracle 資料庫時,若作業系統共享記憶體(/dev/shm,即 tmpfs)空間不足,會導致 ORA-27102: out of memory 錯誤,進而使建庫流程失敗。本文記錄一次真實案例的完整排查、解決與永久修復過程。
[oracle@db01 ~]$ dbca -silent -responsefile dbca.rsp Copying database files 1% complete 2% complete 4% complete 12% complete 100% complete Look at the log file "/DBSoft/oracle/cfgtoollogs/dbca/woo/woo.log" for further details. [oracle@db01 ~]$ cat /DBSoft/oracle/cfgtoollogs/dbca/woo/woo.log SGA size can not be greater than maximum shared memory segment size (0). Refer to Oracle installation guide to configure your operating system kernel parameters. Copying database files DBCA_PROGRESS : 1% DBCA_PROGRESS : 2% ORA-27102: out of memory DBCA_PROGRESS : 4% ORA-01034: ORACLE not available DBCA_PROGRESS : 12% ORA-01034: ORACLE not available DBCA_PROGRESS : 100%
[oracle@db01 ~]$ cat $ORACLE_BASE/diag/rdbms/woo/woo/trace/alert_woo.log Thu Jun 11 22:46:03 2015 Starting ORACLE instance (normal) WARNING: The system does not seem to be configured optimally. Creating a segment of size 0x0000000000800000 failed. Please change the shm parameters so that a segment can be created for this size. While this is not a fatal issue, creating one segment may improve performance
核心線索:Alert Log 明確提示需要建立大小為 0x800000(8MB)的共享記憶體段失敗,建議調整 shm 參數。
Oracle 實例啟動時需分配 SGA,在 Linux 上 SGA 通常映射到 /dev/shm(tmpfs 檔案系統)。若 tmpfs 大小小於 SGA 目標值(或 memory_target),實例無法啟動,拋出 ORA-27102。
檢查當前 /dev/shm 大小:
[oracle@db01 ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_db01-lv_root 35G 8.7G 25G 27% / tmpfs 947M 0 947M 0% /dev/shm /dev/sda1 485M 35M 425M 8% /boot
/dev/shm 僅 947MB,遠小於資料庫所需的 SGA/PGA 總量,導致共享記憶體段分配失敗。
[root@db01 ~]# mount tmpfs /dev/shm -t tmpfs -o size=8g [root@db01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_db01-lv_root 35G 8.7G 25G 27% / tmpfs 8.0G 0 8.0G 0% /dev/shm /dev/sda1 485M 35M 425M 8% /boot tmpfs 8.0G 0 8.0G 0% /dev/shm
將 /dev/shm 從 947MB 擴展至 8GB,滿足資料庫記憶體需求。
[oracle@db01 ~]$ dbca -silent -responsefile dbca.rsp Cleaning up failed steps 5% complete Copying database files 7% complete 9% complete 16% complete 23% complete 30% complete 41% complete Creating and starting Oracle instance 43% complete 48% complete 53% complete 57% complete 58% complete 59% complete 62% complete 64% complete Completing Database Creation 68% complete 71% complete 75% complete 85% complete 96% complete 100% complete Look at the log file "/DBSoft/oracle/cfgtoollogs/dbca/woo/woo7.log" for further details.
建庫成功完成,實例正常啟動。
[oracle@db01 ~]$ cat /etc/fstab # # /etc/fstab # Created by anaconda on Tue Jun 9 19:17:12 2015 # /dev/mapper/vg_db01-lv_root / ext4 defaults 1 1 UUID=9ba8ae31-c918-4ad0-8408-e9e0a7d0beb4 /boot ext4 defaults 1 2 /dev/mapper/vg_db01-lv_swap swap swap defaults 0 0 tmpfs /dev/shm tmpfs size=8g 0 0 <-- 修改此行,將 defaults 改為 size=8g devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0
重開機後 /dev/shm 將自動掛載為 8GB,確保資料庫持久穩定運行。
memory_target 或 sga_target 設定 /dev/shm 大小,建議至少為 SGA 目標值的 1.5 倍。kernel.shmmax、kernel.shmall 等 sysctl 參數,避免單一段限制。/dev/shm 使用率納入監控,防止其他程序佔用導致資料庫異常。dbca -validate 檢查回應檔與環境是否符合需求。ORA-27102 本質是作業系統層面的共享記憶體不足。透過 Alert Log 的明確提示,快速定位至 /dev/shm 過小,採取「臨時掛載擴容 + 永久 fstab 修改」雙重策略,即可徹底解決。此類問題在虛擬機、容器或預設安裝的 Linux 環境中高發,建議納入 Oracle 安裝前檢查清單(Pre-install Checklist)。