ora-00600 [12700]的故障一般是由于table或index的数据块有错误故障现象:用户反映,在执行以下一条简单的select命令时报错select * from in_passenger t where t.hotelcode = "xxxxx"其中xxxxx是索引列,不使用索引列则不报错。
处理过程:1. 查看跟踪文件中发生错误的SQL2. 对引发错误的表的数据块进行检查,命令如下analyze table xxxxx validate structure;如果未发现错误,继续检查表上的索引:analyze table xxxxx validate structure cascade;一般经过以上两步,就可以断定是table或是index的错误3. 本案例中,发现是由于index的数据有误,analyze命令报错,返回ora-00600 12700错误,查看trace文件,提示说:表中记录数和索引的记录数不相符,比如表有20000rows,而索引中有20500rows4. 由于这个索引是普通用户的索引,所以重建它: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的文章中,以上两种方式都取得了成功。Oracle数据库报错 ORA-01102 ORA-1102 signalled during....ora-27100:shared memory realm already exists错误的解决相关资讯 Oracle数据库 Oracle入门教程 oracle数据库教程
- Oracle数据库全球化 (03月01日)
- Oracle数据库日期过滤方法性能比较 (02/02/2015 13:20:26)
- Oracle数据库安装中端口被占用问题 (10/29/2014 07:42:24)
| - 在CentOS 6.6上搭建C++运行环境并 (10/10/2015 19:44:40)
- Oracle数据库无法使用localhost和 (11/14/2014 16:39:10)
- 使用SQLT来构建Oracle测试用例 (08/28/2014 06:17:41)
|
本文评论 查看全部评论 (0)