如何解决ora-600 12700错误问题

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

简单描述了解决过程.对类似12700错误起一个抛砖引玉的作用.

一、问题现象:

在报警文件中从早上9:30开始,一直到处理问题时,出现大量的ORA-600 12700错误。通过TRC文件,发现是执行以下语句,就会报这个错误:

select ID,AVERTEXID,AVERTEXTYPE,ZVERTEXID,ZVERTEXTYPE from PHYSICALCONNECTION

where (AVERTEXTYPE='C' and AVERTEXID in (840402))

or (ZVERTEXTYPE='C' and ZVERTEXID in (840402))

二、问题还原:

再次执行下面的语句,不能返回结果,直接报600 12700错误。

Select Id, Avertexid, Avertextype, Zvertexid, Zvertextype

From cq.Physicalconnection

Where (Avertextype = 'C' And Avertexid In (840402))

Or (Zvertextype = 'C' And Zvertexid In (840402))

三、问题分析:

1、使用下面的SQL语句,都不会报错:

Select Id, Avertexid, Avertextype, Zvertexid, Zvertextype

From cq.Physicalconnection

Where (Avertextype = 'C' And Avertexid In (840402));

Select Id, Avertexid, Avertextype, Zvertexid, Zvertextype

From cq.Physicalconnection

Where (Zvertextype = 'C' And Zvertexid In (840402));

Select Id, Avertexid, Avertextype, Zvertexid, Zvertextype

From cq.Physicalconnection

Where (Zvertextype = 'C' And Zvertexid In (840402))

Union All

Select Id, Avertexid, Avertextype, Zvertexid, Zvertextype

From cq.Physicalconnection

Where (Avertextype = 'C' And Avertexid In (840402)) ;

2.分析表

执行下面的分析语句,也没有报任何错误。

ANALYZE TABLE cq.Physicalconnection VALIDATE STRUCTURE CASCADE

看来表数据是好的

3.重建这个表的索引

Alter index CQ.IDX_AVERTEXID Rebuild

/

Alter index CQ.IDX_PHYCONN_ACONNECTPOINT Rebuild

/

Alter index CQ.IDX_PHYCONN_OLDID Rebuild

/

Alter index CQ.IDX_PHYCONN_OWNERTYPE Rebuild

/

Alter index CQ.IDX_PHYCONN_ZCONNECTPOINT Rebuild

/

Alter index CQ.IDX_ZVERTEXID Rebuild

/

Alter index CQ.sys_c0011311 Rebuild

重建索引后,问题依旧。

4.根据METALINK上的说明,设置10078事件,问题依旧

Set event 10078

At session level

SQL> Alter session set events '10078 trace name context forever'

SQL> alter system flush shared_pool;

Run the select query failing with ORA-00600[12700]

具体参见Note:337631.1

5.根据Note:155933.1的说法,应该是ROWID找不到了,因此,我想到重建建立一个表来测试一下。

Create Table cq.Physicalconnection_bak As Select * From cq.Physicalconnection

再执行:

Select Id, Avertexid, Avertextype, Zvertexid, Zvertextype

From cq.Physicalconnection_bak

Where (Avertextype = 'C' And Avertexid In (840402))

Or (Zvertextype = 'C' And Zvertexid In (840402))

执行以上语句无问题。

因此,决定通过重新创建表语句来解决这个问题。

四、解决问题

通过Create Table cq.Physicalconnection_bak As Select * From cq.Physicalconnection,再把这个cq.Physicalconnection表删除,

再改名改表即可,问题解决,后续权限交给相关开发人员解决。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有