ORA-07445: 出現異常錯誤: 核心轉儲 [kcbs_simulate()+5112]

urgel_babay發表於2016-02-29
今天是7月28號,週一。早上剛坐下不久,就收到同事的郵件,說一個伺服器的生產資料庫在26號當機了!
這是alert日誌資訊:
Sat Jul 26 03:39:48 2014
Thread 1 advanced to log sequence 46071
  Current log# 3 seq# 46071 mem# 0: /u02/oracle/oradata/XXEDW/redo31.log
  Current log# 3 seq# 46071 mem# 1: /u03/oracle/oradata/XXEDW/redo32.log
Sat Jul 26 03:54:48 2014
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x8] [PC:0x755AEDC, kcbs_simulate()+5112]
Errors in file /home/oracle/diag/rdbms/xxedw/XXEDW/trace/XXEDW_ora_17158.trc  (incident=464348):
ORA-07445: 出現異常錯誤: 核心轉儲 [kcbs_simulate()+5112] [SIGSEGV] [ADDR:0x8] [PC:0x755AEDC] [Address not mapped to object] []
Incident details in: /home/oracle/diag/rdbms/xxedw/XXEDW/incident/incdir_464348/XXEDW_ora_17158_i464348.trc
Sat Jul 26 03:54:51 2014
Trace dumping is performing id=[cdmp_20140726035451]
Sat Jul 26 03:54:53 2014
Sweep Incident[464348]: completed
Sat Jul 26 03:54:54 2014
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x10] [PC:0x39A707C, kcbsslc()+368]
Errors in file /home/oracle/diag/rdbms/xxedw/XXEDW/trace/XXEDW_pmon_9091.trc  (incident=464180):
ORA-07445: exception encountered: core dump [kcbsslc()+368] [SIGSEGV] [ADDR:0x10] [PC:0x39A707C] [Address not mapped to object] []
Incident details in: /home/oracle/diag/rdbms/xxedw/XXEDW/incident/incdir_464180/XXEDW_pmon_9091_i464180.trc
Trace dumping is performing id=[cdmp_20140726035455]
Sat Jul 26 03:55:07 2014
DBW5 (ospid: 9119): terminating the instance due to error 472
Instance terminated by DBW5, pid = 9119
Sat Jul 26 21:55:38 2014
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0

檢視了trace檔案後dump檔案,裡面顯示了導致觸發的SQL語句,跟開發溝通,瞭解了這條語句。開發說這條語句每天都會執行,而且已經執行了很長時間。
去百度和Google上面檢視發現有類似的案例,讓朋友去metalink上檢視,上面也有相應的解釋。可以搜到id號為1069487.1的一篇文章,文中說明,在10.2.0.4版本至11.1.0.6版本,存在一個bug,如果資料庫的OPTIMIZER_MODE引數值為ALL_ROWS的時候,從檢視中查詢資料時會觸發此bug,從而導致出現ORA-07445的報錯。
我的Oracle版本是11.1.0.6。

檢視隱含引數的方法:
SELECT   ksppinm, ksppstvl, ksppdesc  
 FROM   x$ksppi x, x$ksppcv y  
 WHERE   x.indx = y.indx AND  ksppinm = '引數名'

解決方案

根據oracle metalink上提供的solution,在資料庫級別執行以下sql,以設定隱含引數,即可避免出現此問題。

alter  system set  "_optimizer_connect_by_cost_based"  =  false  scope=both ; 

或者在session級別執行下列sql:
alter  session set  "_optimizer_connect_by_cost_based"  =  false  scope=both ;

或者直接在語句級別加hint: 

當然,考慮到程式的使用情況,在資料庫級別執行隱含引數的設定是最為合適的。
此時執行了,操作,後期還會繼續關注!



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

相關文章