最近在一个10.1.0.5 rac 数据库上经常出现:
Errors in file /u01/app/oracle/admin/IBUDB/udump/ibudb2_ora_28331.trc:
ORA-07445: exception encountered: core dump [qeesTraverseExpr()+17] [SIGSEGV] [Address not mapped to object] [0x0] [] []
sdtcs_getexecname: ignored overriding value [oracleIBUDB2]
然后还伴随着一堆的转储信息:
Trace dumping is performing id=[cdmp_20111207101220]
Wed Dec 7 10:48:09 2011
Trace dumping is performing id=[cdmp_20111207104800]
Wed Dec 7 11:17:56 2011
Trace dumping is performing id=[cdmp_20111207111747]
Wed Dec 7 11:40:03 2011
Trace dumping is performing id=[cdmp_20111207113954]
操作系统平台为RedHat Linux AS 3 32bit.
通过分析trace 文件发现了一个很复杂的SQL,这个SQL在GROUP中使用了HAVING GROUPING函数。尝试执行这个SQL就会出现“ORA-03113 :通信通道文件结束”,并且在alert中出现ORA-7445错误。
修改这个SQL替换掉GROUPING函数,错误随机消失。查询Metalink得知,这是部分平台的9i\10gR1版本早就存在的一个Bug:
Bug 4573980 – Dump in qeesTraverseExpr using a GROUPING operator in a GROUP BY clause (Doc ID 4573980.8)
或者直接升级数据库到10.2及以上版本。