一、問題現象: 在報警文件中從早上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表刪除, 再改名改表即可,問題解決,后續權限交給相關開發人員解決。