又碰到一个ORA-7445错误,更郁闷的是,发现诊断问题的信息已经不全了。
数据库版本仍然是9204,从alert文件中发现了ORA-7445错误,打开相应的trace文件发现是由一个SQL语句引起的,其中堆栈中前两个有意义的调用是qerhjWalkHashBucket和qerhjProbeHashTable。
从出错函数名称上已经可以确定,肯定问题与HASH JOIN有关。用qerhjWalkHashBucket查询了一下METALINK的7445错误,发现了一个与这个问题很像的bug:Bug 2514869。
从问题描述上看,这个bug会在HASH JOIN外连接时发生,且连接中的一个对象是视图,且对视图使用了绑定变量。
从受影响的数据库版本上看,9202是确认影响的,而且版本低于10g的都可能受到影响。虽然在9203的PATCH集中解决了这个问题,但是并不排除,这个问题在9204中重现。
唯一难于确定的是,这个SQL语句是否执行了HASH JOIN外连接,这个SQL当前的执行计划虽然包括HASH JOIN,但是外连接采用的是NESTED LOOP OUTER。至于错误产生的时候采用的何种执行计划,现在已经无法找到了。这个错误在元旦之前出现的,由于地震的原因,上不了METALINK,也一直没有去分析这个错误。目前数据库中包含的执行计划以及是元旦时产生的,而且数据库也重新收集了统计信息,无法保证目前的执行计划与错误产生时的一致。因此,只能先记录一下,等错误重现时再进行确认了。
Metalink没有给出具体的解决方法,因为无论是升级到10g,还是将补丁降级到9203都是不可接受的。好在这个bug的危害不大。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69125/,如需转载,请注明出处,否则将追究法律责任。