• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

ora-00600 [12700]的故障一般是由于table或index的数据块有错误

mysql 搞代码 4年前 (2022-01-09) 38次浏览 已收录 0个评论

ora-00600 [12700]的故障一般是由于table或index的数据块有错误

ora-00600 [12700]的故障一般是由于table或index的数据块有错误

故障现象:

用户反映,在执行以下一条简单的select命令时报错

select * from in_passenger t where t.hotelcode = ‘xxxxx’

其中xxxxx是索引列,不使用索引列则不报错。


处理过程:

1. 查看跟踪文件中发生错误的SQL

2. 对引发错误的表的数据块进行检查,命令如下

analyze table xxxxx validate structure;

如果未发现错误,继续检查表上的索引:

analyze table xxxxx validate structure cascade;

一般经过以上两步,,就可以断定是table或是index的错误

3. 本案例中,发现是由于index的数据有误本文来源gaodai#ma#com搞*!代#%^码$网!,analyze命令报错,返回ora-00600 12700错误,查看trace文件,提示说:

表中记录数和索引的记录数不相符,比如表有20000rows,而索引中有20500rows

4. 由于这个索引是普通用户的索引,所以重建它:

alter index xxxxx rebuild online;

到此为止,问题解决。


后记:

如果损坏的是数据字典上的索引,则不能重建系统,因为系统会报错“不能更改热系统对象”。在itpub上chensq有一篇文章“ora600 12700故障处理”,提到sys.obj$表上的i_obj2索引损坏的解决情况。

如果i_obj2损坏了,最好是exp数据,然后重建库,但在exp的过程中,也要访问到i_obj2,要禁止访问它,主要是两个办法:

1)所有使用到i_obj2的SQL语句都加hint以禁止它的使用

2)更改optimizer_index_cost_adj,使得访问sys.obj$的执行计划不使用索引,而使用全表扫描的方式。

在chensq的文章中,以上两种方式都取得了成功。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ora-00600 [12700]的故障一般是由于table或index的数据块有错误
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址