ITPub博客

首页 > 数据库 > Oracle > ORA-07445: 出现异常错误: 核心转储 [kcbs_simulate()+5112]

ORA-07445: 出现异常错误: 核心转储 [kcbs_simulate()+5112]

Oracle 作者:urgel_babay 时间:2016-02-29 17:30:34 0 删除 编辑
今天是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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-02-29

  • 博文量
    203
  • 访问量
    214794