一、问题现象: 在报警文件中从早上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, ZvertextypeFrom cq.PhysicalconnectionWhere (Avertextype = 'C' And Avertexid In (840402)) Or (Zvertextype = 'C' And Zvertexid In (840402))
三、问题分析: 1、使用下面的SQL语句,都不会报错: Select Id, Avertexid, Avertextype, Zvertexid, ZvertextypeFrom cq.PhysicalconnectionWhere (Avertextype = 'C' And Avertexid In (840402));Select Id, Avertexid, Avertextype, Zvertexid, ZvertextypeFrom cq.PhysicalconnectionWhere (Zvertextype = 'C' And Zvertexid In (840402));Select Id, Avertexid, Avertextype, Zvertexid, ZvertextypeFrom cq.PhysicalconnectionWhere (Zvertextype = 'C' And Zvertexid In (840402))Union AllSelect Id, Avertexid, Avertextype, Zvertexid, ZvertextypeFrom cq.PhysicalconnectionWhere (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 10078At session levelSQL> 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, ZvertextypeFrom cq.Physicalconnection_bakWhere (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表删除, 再改名改表即可,问题解决,后续权限交给相关开发人员解决。