遭遇ora-600[19004]

今天本来是休假半天,正在外面办事的时候,突然收到pushmail的告警,oracle数据库中有500多个ora-的报错,心里咯噔了一下,怎么会有那么多的报错!但是又没收到数据库down的pushmail,难道是程序遇到bug了?赶紧打了电话给同事,请他们帮忙看看。

同时也顾不上吃午饭了,匆匆赶到了公司,了解情况。Team Leader已经把该故障升级为一级故障,已经影响到了部分应用模块的正常使用。同事已经在metalink上开了SR,另外也开了一个电话会议,向客户介绍了当前情况。

赶紧先把SR扫了一遍,大致了解了情况,是ora-600[19004]的报错,oracle要求提供explain plan和10053的trace,于是一边登录现网执行语句,查看情况,另一边也介入了电话会议,确认了影响的范围,安抚客户情绪,并表达了针对这个问题的初步诊断分析,以及对策。

在alertlog中,我们看到有大量的报错:

从tracefile中看,语句是类似的,只是带入的变量有所不同。其sql是:

这个sql无论在做explain plan for还是10053的时候,都会报600的错。

在metalink中查到,这个ora-600的报错是一个oracle的bug,在oracle 9208,10105,10203版本的几乎所有平台都会发生。这个bug已经有patch了:patch 4899105

当然,幸好oracle也提供了临时解决方法:

在故障现场,执行了以下2个语句之后,问题解决:

临时的解决故障后,之后的步骤,就是和客户商量时间打上这个重要的patch了。

其实我还是有点纳闷的是,为什么会触发这个bug,难道是统计信息不够精确?但是我的数据库是使用oracle的默认收集统计信息的设置,而且某个月还会手工收集一次,应该不会有很旧的统计信息。另外,如果表的直方图信息有问题,这样的表应该不止一个,为什么直方图的信息会导致600的报错?为什么只是在执行一个sql的时候报错了600,而不是所有信息不准确的且multi join的sql都报错?

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据