Oracle
ASM 磁碟組創建問題
我有 6 個,兩個節點 RAC 數據庫在兩個物理伺服器中執行。
當我嘗試創建新磁碟組時,出現以下錯誤:
ORA-15018: diskgroup cannot be created ORA-04031: unable to allocate 2110040 bytes of shared memory ("large pool","unknown object","large pool","kfr redo buffer")
我收集到 ASM 實例沒有足夠的共享池資源來創建新的磁碟組。我無法重新啟動 ASM 實例以增加共享池。
我的問題是,如果我決定刪除一些未使用的磁碟組,我會創建新的磁碟組嗎?或者是否必須增加共享池?
15018, 00000, “無法創建磁碟組”
原因: 無法創建指定的磁碟組。
**行動:**檢查報告的其他錯誤。
04031, 00000, “無法分配 %s 字節的共享記憶體 ("%s","%s","%s","%s")”
原因: 需要的共享記憶體比共享池或流池中分配的要多。 **操作:**如果共享池記憶體不足,請使用 DBMS_SHARED_POOL 包固定大包,減少共享記憶體的使用,或通過增加初始化參數 SHARED_POOL_RESERVED_SIZE 和 SHARED_POOL_SIZE 的值來增加可用共享記憶體的數量。如果大池記憶體不足,增加初始化參數LARGE_POOL_SIZE。
如果錯誤是從 Oracle Streams 或 XStream 程序發出的,請增加初始化參數 STREAMS_POOL_SIZE 或增加擷取或應用參數 MAX_SGA_SIZE。
出現此錯誤可能有兩個原因:
- 如果您使用的是 11.2.0.2,則可能存在一個錯誤(錯誤 11684854:ASM ORA-4031 IN LARGE POOL FROM CREATE DISKGROUP)考慮升級到 11.2.0.3 或更高版本。
- 您的大型池記憶體不足。您必須在大型池大小上添加記憶體。您也可以考慮按照此 MOS 文件(文件 ID 1107613.1)使用自動記憶體管理。
當然你可以試試,這是我的快速測試(在 11.2.0.4 上):
SQL> select pool, bytes from v$sgastat where name = 'free memory'; POOL BYTES ------------ ---------- shared pool 503941528 large pool 6422528 SQL> drop diskgroup o6cb_fra including contents; Diskgroup dropped. SQL> select pool, bytes from v$sgastat where name = 'free memory'; POOL BYTES ------------ ---------- shared pool 504016600 large pool 8531968
請注意,可用記憶體的增加 (2109440) 幾乎與錯誤消息 (2110040) 中寫入的數量相同。
但是由於您使用的是 11.2.0.3,如果您使用 ASM 的預設記憶體設置,我強烈建議您手動設置記憶體參數。< 11.2.0.4 版本的預設記憶體分配太低,這是一個反復出現的問題。11.2.0.4 至少分配 1 GB 記憶體,但 11.2.0.3 仍然使用大約 300 MB(這會導致上述問題)。
推薦的設置是:
alter system set memory_max_target=4096m scope=spfile sid='*'; alter system set memory_target=1536m scope=spfile sid='*';
來自:ASM 和共享池 (ORA-4031) (Doc ID 437924.1)