网友俱乐部 » » Oracle教程 » 如何解决ora-60012700错误问题

2008-4-2 08:37 lonjew
如何解决ora-60012700错误问题

如何解决ora-60012700错误问题
    简单描述了解决过程.对类似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表删除,
再改名改表即可,问题解决,后续权限交给相关开发人员解决。

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.