Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
?
MOS 上有一篇文章專門介紹這個問題,參考:[ID 779552.1]。
?
在Oracle 10.2.0.4版本中,alert log 可能出現如下錯誤:
?????? ORA-00494:enqueue [CF] held for too long (more than 900 seconds)
?
?????? 這個錯誤,通常和ORA-600 [2103] 一起出現。 他們的產生的原因都是一樣的。進程在指定時間內(默認900秒)不能獲取CF? 隊列。
?
?????? 一般只在系統高負載,高并發,IO 等待和爭奪時,Oracle進程占有相關資源沒有釋放造成。
?
有2個bug 可能導致這個問題:
?????? (1)Bug7692631 - 'DATABASE CRASHES WITH ORA-494 AFTER UPGRADE TO 10.2.0.4'
?????? (2)unpublished Bug 7914003 'KILL BLOCKER AFTER ORA-494 LEADS TO FATALBG PROCESS BEING KILLED'
?
解決方法:
?????? 在10.2.0.4 的Oracle 的機制中會kill 所有block的進程,包括后臺進程和非后臺進程。 要注意的是:
(1)??? 如果是非后臺進程holder 了CF enqueue,那么kill 該進程,那么實例還可以正常運行。
(2)如果是后臺進程,如LGWR holder了,那么kill LGWR 將會導致db crash。
?
為了避免kill 掉blocker 進程(后臺和非后臺進程),可以設置參數:
?????? _kill_controlfile_enqueue_blocker=false.
?
?????? 這樣所有blocker 進程都不會被kill 掉。即使該進程hold 了enqueue 很長時間。一般來說,最好的情況是避免kill 后臺進程,允許kill 非后臺進程。
?
?????? 為了阻止后臺進程被kill,可以在init.ora? 文件里設置參數:_kill_enqueue_blocker=1,該參數默認值為3.
?
?????? 當設置該參數之后,如果enqueue 被后臺進程holder,該后臺進程不會給kill。 所以實例不會crash。 如果enqueue被非后臺進程holder,那么10.2.0.4 的機制還是會嘗試去kill 非后臺進程。
?
?????? Oracle保留ORA-494 的原因是用戶更傾向于instance crash,如果不crash,db 就會hang住。???
?
?
?
?
?
-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(滿);?? DBA2 群:62697977(滿)??DBA3 群:62697850(滿)??
DBA 超級群:63306533(滿);? DBA4 群: 83829929? DBA5群: 142216823???
DBA6 群:158654907? 聊天 群:40132017?? 聊天2群:69087192
--加群需要在備注說明Oracle表空間和數據文件的關系,否則拒絕申請
轉載于:https://www.cnblogs.com/spring3mvc/archive/2011/07/15/2414582.html
總結
以上是生活随笔為你收集整理的Oracle 10.2.0.4 高负载 触发 ORA-00494 错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老板燃气灶JZT-58B7可以换煤气用?
- 下一篇: 为什么不能睡地板?