案例:ORA-00600: internal error code, arguments: [4097]

本案例来自某省电信一套11.2.0.4的rac,应用的存储过程调用一直在报ORA-00600: internal error code, arguments: [4097],对于经常搞恢复的人来说,这个错误非常熟悉,都不用分析直接重建undo即可,但是作为一个专业的troubleshooter,还是多少分析一下来龙去脉吧。。。

查看trace发现报错的sql是一个dblink插入远程库的sql

我们知道ORA-00600[4XXX]都是与undo息息相关的报错,而在call stack里并未找到ktu相关函数调用,所以怀疑是remote端数据库的undo异常导致的。

查看remote端,数据库为单实例10.2.0.4,从报错trace里可以看到同样的sql也是报的ORA-00600[4097]

通常在trace的最后一个Block header dump极有可能是访问报错的block,所以搜索”Block header dump“先看看

报错的block是一个索引,dataobj#为 0x5f48f ,这明显是一个业务表上的索引,从ITL上的slot 0x01看出读取该块需要访问8号undo段头事务表的slot 27做块清除找到符合该次逻辑读的commit scn,那么看看8号undo段头事务表slot 27

可以看到索引块ITL中的XID的wrap#(0x149736)居然比事务表27 slot的wrap#要大,这明显是不可能的事情,所以报出了ORA-00600[4097]。

解决方法很简单就是重建undo表空间并删除老的undo表空间。 ORA-00600[4097] 一般在不一致的open数据库经常遇到,由于该环境为正常的生产环境,通常不会出现 ORA-00600[4097] ,所以个人怀疑有写丢失的可能性。

此条目发表在Oracle, Oracle troubleshooting分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

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