今天一个收取物流数据的程序在运行过程中,突然弹出错误:ORA-600 [6033] [] [] [] []。
在通知我以后,查看alter.log文件:
tail -n 50 alert_cms.log
上面记录了具体错误信息位于:$ORACLE_HOME/admin/cms/udump/cms_ora_774646.trc。
于是查看该文件:
more $ORACLE_HOME/admin/cms/udump/cms_ora_774646.trc
看到该文件太长,一行行看不出名堂。遂放弃。
转而登录metalink,并直接进入有关600的错误页面:
我输入6033后,点击lookup error按钮,查询有关6033的具体说明部分:
ORA-600 [6033] "null value retrieved from index leaf lookup"。
ok,这说明索引的叶子节点出了问题。按照提示,我先找出cms_ora_774646.trc里记录的所有表:
grep -i 'from' $ORACLE_HOME/admin/cms/udump/cms_ora_774646.trc
然后把所有的表都运行一遍:
ANALYZE TABLE
并把这些表对应的索引全部重建一遍。这里面有一个是global temporary table,则该临时表对应的索引是不能重建的,否则要报错的。
然后,再次运行程序,依然报错。
想了一下,这个错误应该就是索引叶子有问题。但是重建索引依然没解决,那看来就是临时表的索引问题了。
检查了一下程序,与该临时表有关的sql语句就一句,而且确实走了fast full index scan。于是,改程序,添加/* full(tbname)*/,同时重建该临时表以及索引。问题解决。
初步认为,添加/* full(tbname)*/和重建该临时表以及索引只要做其中之一就应该能解决问题。不过没有测试环境,不好测试了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9842/viewspace-156317/ ,如需转载,请注明出处,否则将追究法律责任。