資料庫使用者不能登入 alert日誌報ORA-04031故障分析處理

passion_of_data發表於2014-04-29
現象:
1、在資料庫主機sqlplus  / as sysdba都進不去。

2、alert日誌中報錯如下:
Errors in file /oracle/admin/dbrac/bdump/dbrac2_q000_1329.trc:
ORA-22303: type "SYS"."AQ$_HISTORY" not found
ORA-00604: error occurred at recursive SQL level 1
ORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","select user#,type# from user...","sql area","tmp")

原因如下:
1、由於不能在share pool中分配記憶體導致不能登入
2、導致share pool不能分配記憶體的原因是資料庫大量使用常量SQL(未使用繫結變數SQL)硬解析導致。

此時資料庫sqlplus / as sysdba都進不去,怎麼辦?

解決辦法:
1、基於快速恢復資料庫原則,首先將pmon程式予以kill,重新拉起資料庫

2、目前為減少該故障發生的概率,方法如下:
在自動計劃中加入自動刷資料庫share pool計劃,每天晚上1點刷一次,該操作對業務影響可以忽略,刷share pool的SQL如下:
alter system flush shared_pool; 
 
3、為了徹底解決該問題,需應用方將常量SQL(未使用繫結變數SQL)全部修改成使用繫結變數SQL。


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

相關文章