遭遇ORA-00600 [ksnwait:nsevwait]
这件事情在遭遇时候恰巧我们公司一个上海工程师到客户现场修复数据库安全漏洞打了CPU,但是当天晚上数据库就宕机了,客户把事故的根源矛头直指我们,临危受命之下连夜赶往客户现场。
在现场后才感受到此次故障对客户的影响之深,科技部的领导都到位了,匆匆忙忙落位开始诊断,发现数据库alert.log报错如下:
Errors in file /app/oracle/diag/rdbms/prod/prod/trace/prod_pmon_401638.trc: ORA-00600: internal error code, arguments: [ksnwait:nsevwait], [], [], [], [], [], [], [], [], [], [], [] PMON (ospid: 401638): terminating the instance due to error 472 Instance terminated by PMON
当前环境为:
aix 6.1
oracle 11.2.0.1
从上面的报错可以很明确的看到是因为pmon进程宕掉,最终引起数据库崩溃.
关键报错信息00600,ksnwait:nsevwait,这类报错第一眼的感觉就是bug,在OTN上验证了我的诊断,此错误为bug8554900引起,修复补丁为Patch:8554900.
在不应用修复补丁的情况下可以通过尝试使用用参数SQLNET.OUTBOUND_CONNECT_TIMEOUT设置大一点的值去规避,这个bug在11.2.0.2版本之后修复完了,而且考虑到这个版本为11.2.0.1的初始版本,漏洞会比较多,我建议直接将数据库升级到版本11.2.0.3.8版本,客户同意了我的解决方案,并于当晚升上去,最终和开发部分standby一晚上,我还做好了各种回退工作,技术不累人,就是熬夜真心伤身.也幸好客户对我们的信任依然如旧.
总结:
由上面所见,选择一个稳定的数据库版本,可以为后续的数据库运维工作,为数据库的运行带来长远的效益。且行且小心。