ORA-04031 的原因分析解決方法

luckyfriends發表於2013-02-04
ORA-04031 的原因分析解決方法

ORA-04031: unable to allocate 4096 bytes of shared memory

下面分析了幾個可能及解決方法


基本上,ORA-04031出現的問題有幾個可能性
A. 沒有繫結編量造成shared_pool碎片過多,同時shared_pool_size太小.

--這個應該是比較常見的,也是Oracle提的最多的。 
--這個通常會建議使用繫結變數,或者簡單的加大shared_pool.或者臨時解決方法就是alter system flush shared_pool.



B. Large_pool,Java_pool太小造成的

--這個透過錯誤資訊的提示很容易判斷(Ora-04031 cannot allocate .. memeory in [large_pool])
--解決方法就是簡單的加大 Large_pool or Java_pool

C. 過度的開CURSOR而不關閉。

--這個問題發生的越來越多,特別是在JAVA執行環境中,頻頻出現。加大Shared_pool或者flush shared_pool往往只能延遲問題出現的時間,而沒法避免。
--判斷方法:
select count(*) from v$open_cursor ;
select * from v$sysstat 
where name = 'opened cursors current'; 
如果出來的值特大(以萬為單位)時,基本就可以確定是這個原因了 
--解決這個問題的方法就是檢查程式,看是否沒有正常的關閉cursor(對於JAVA來說,就是沒有關閉Statement)。或者select sql_text from v$open_cursor,看看都是哪些cursor沒關閉,再去檢查車程式。 
--也有的程式使用了保持一定量的cursor一直open,從而避免cursor過多次的開啟,來提高效能。對於這種情況,則應該選擇適當的shared_pool_size和控制keep_opening的cursor的量。
--也有可能Oracle引數session_cached_cursors太大,解決方法就是把它降低到適當的值

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14710393/viewspace-753916/,如需轉載,請註明出處,否則將追究法律責任。

相關文章