首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

DBCA 靜默建庫遭遇 ORA-27102: out of memory 完整排查與解決實戰

     編輯:Oracle 教學

DBCA 靜默建庫遭遇 ORA-27102: out of memory 完整排查與解決實戰

在使用 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%

Alert Log 關鍵警告

[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 總量,導致共享記憶體段分配失敗。

解決方案:擴大 /dev/shm

1. 臨時掛載擴容(立即生效)

[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,滿足資料庫記憶體需求。

2. 重新執行 DBCA 建庫

[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.

建庫成功完成,實例正常啟動。

3. 永久生效:修改 /etc/fstab

[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,確保資料庫持久穩定運行。

最佳實務建議

  1. 預先規劃:安裝 Oracle 前,依據 memory_target 或 sga_target 設定 /dev/shm 大小,建議至少為 SGA 目標值的 1.5 倍。
  2. 核心參數配合:同步設定 kernel.shmmax、kernel.shmall 等 sysctl 參數,避免單一段限制。
  3. 監控告警:將 /dev/shm 使用率納入監控,防止其他程序佔用導致資料庫異常。
  4. Response File 驗證:DBCA 靜默安裝前,先用 dbca -validate 檢查回應檔與環境是否符合需求。

總結

ORA-27102 本質是作業系統層面的共享記憶體不足。透過 Alert Log 的明確提示,快速定位至 /dev/shm 過小,採取「臨時掛載擴容 + 永久 fstab 修改」雙重策略,即可徹底解決。此類問題在虛擬機、容器或預設安裝的 Linux 環境中高發,建議納入 Oracle 安裝前檢查清單(Pre-install Checklist)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved