簡單描述了解決過程.對類似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表刪除, 再改名改表即可,問題解決,後續權限交給相關開發人員解決。