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

Oracle 11g ORA-00845 錯誤解決方案:MEMORY_TARGET 與 /dev/shm 空間不足

     編輯:Oracle 資料庫基礎

錯誤現象

ORA-00845: MEMORY_TARGET not supported on this system

常見於:DBCA 創建數據庫、調整 SGA 後重啟、Linux 環境下 Oracle 11g/12c/19c。

根因分析

Oracle 11g 引入 Automatic Memory Management (AMM),參數 MEMORY_TARGET 依賴 Linux /dev/shm (tmpfs) 共享內存文件系統。
報錯核心原因: /dev/shm 空間 小於 MEMORY_TARGET 設定值(或 MEMORY_MAX_TARGET)。
例:SGA 設定 4GB,但 /dev/shm 僅 1GB(Linux 默認往往為物理內存 50%)。

解決方案:擴展 /dev/shm 空間

方法一:臨時掛載(重啟失效,適合緊急測試)

mount -o remount,size=6G /dev/shm

方法二:永久生效(修改 /etc/fstab,推薦生產環境)

# 1. 編輯 fstab
vi /etc/fstab

# 2. 找到 tmpfs 行,修改 size 參數
# 原:tmpfs /dev/shm tmpfs defaults 0 0
# 新:tmpfs /dev/shm tmpfs defaults,size=6G 0 0
# 建議:size 設置為物理內存的 80%-90%,且 ≥ MEMORY_MAX_TARGET

# 3. 重新掛載生效
mount -o remount /dev/shm

# 4. 驗證
df -h /dev/shm
# 輸出應顯示 Size 為 6G

替代方案:放棄 AMM,改用 ASMM (Automatic Shared Memory Management)

若受限於虛擬化環境無法調整 /dev/shm,可禁用 MEMORY_TARGET:

-- 1. 關閉數據庫
SHUTDOWN IMMEDIATE

-- 2. 創建 PFILE(若用 SPFILE)
CREATE PFILE FROM SPFILE;

-- 3. 編輯 PFILE,註釋/刪除 MEMORY_TARGET,設置 SGA/PGA 獨立參數
*.memory_target=0
*.sga_target=3G
*.pga_aggregate_target=1G

-- 4. 啟動數據庫
STARTUP PFILE='/path/to/init.ora'
-- 確認無誤後創建 SPFILE
CREATE SPFILE FROM PFILE;

驗證與監控

-- 查看當前內存參數
SHOW PARAMETER memory_target
SHOW PARAMETER sga_target
SHOW PARAMETER pga_aggregate_target

-- 查看 /dev/shm 使用情況
!df -h /dev/shm

-- 查看 SGA 組件
SELECT * FROM V$SGAINFO;

最佳實踐建議

  1. 規劃階段:OS 層面預留足夠 /dev/shm,或預規劃使用 ASMM(SGA_TARGET + PGA_AGGREGATE_TARGET)。
  2. 監控告警:納入 df -h /dev/shm 到日常巡檢,閾值 80% 報警。
  3. 虛擬化注意:VMware/Hyper-V 動態內存球oon 驅動可能導致 /dev/shm 實際可用縮水,建議預留內存。
  4. 19c 新特性:引入 MEMORY_TARGET 動態調整無需重啟,但底層依賴 /dev/shm 不變。

總結: ORA-00845 本質是 OS 共享內存資源不足。首選擴展 /dev/shm 保持 AMM 優勢(自動平衡 SGA/PGA),次選退回 ASMM 手動管理。切記:修改 fstab 後必須 remount 並驗證 df 輸出。

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