今天QQ有问个问题,说有个应用报错3113,按照常规,让其检查了:
1、用户profile是否设置了idle_time参数,没有。
2、应用与数据库之间有防火墙超时设置,没有。
于是又问他是所有应用都报错,还是某个报错,反馈说是一个SQL,用到了full join。我觉得这个是SQL语法问题,和3113连接断开应该没有关系啊?于是又让他看alert文件有什么记录,反馈说有个报错:“ORA-07445: exception encountered: core dump [kkqtnloCbk()+111] [SIGSEGV] [unknown code] [0x000000000] [] []”。
没见过这种错误,于是搜索MOS,有两篇文章:
ORA-7445 (kkqtnlocbk) (文档 ID 406737.1)
说明kkqtnlocbk和4204383这个bug相关,,Dump [kkqtnlocbk] optimizing ANSI OUTER JOINs with subqueries
在10.2.0.4, 11.1.0.6, 10.2.0.2.P08, 10.2.0.3.P05中修复。
ORA-07445: exception encountered: core dump [kkqtnloCbk()+111] [SIGSEGV] [unknown code] [0x000000000] [] []
说明在使用子查询的ANSI外连接语法时产生一个dump(但这只是一个总体的描述,实际现象可能不同)。临时的解决方法是设置_optimizer_cost_based_transformation值改为off。
描述这个bug在以下版本已经修复:
10.2.0.2 Patch 8 on Windows Platforms
10.2.0.3 Patch 5 on Windows Platforms
10.2.0.4 (Server Patch Set)
11.1.0.6 (Base Release)
他的错误数据库版本正是10.2.0.1,因此有理由怀疑这是由于数据库的bug导致的。解决方法就是上述要么临时设置参数值,要么只能通过打补丁修复。
相关阅读:
ORA-01172、ORA-01151错误处理
ORA-00600 [2662]错误解决
ORA-01078 和 LRM-00109 报错解决方法
ORA-00471 处理方法笔记
ORA-00314,redolog 损坏,或丢失处理方法
ORA-00257 归档日志过大导致无法存储的解决办法