Oracle

ASM 磁碟組創建問題

  • February 1, 2018

我有 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)

引用自:https://dba.stackexchange.com/questions/143693