2012-07-18 100 views
0

我需要幫助搞清楚爲什麼我的數據庫服務器崩潰時,我執行以下查詢:SQL提取XML的Clob導致Oracle 10g數據庫,以凍結

SELECT T.COLLECTION_ID, T.CYCLE_ID, T.PHASE_ID, EXTRACT(T.XML_DOCUMENT, '/') 
FROM THINGS T 
WHERE T.COLLECTION_ID = 1668 AND T.CYCLE_ID = 26601 AND T.DELETED = 0 
ORDER BY T.COLLECTION_ID, T.CYCLE_ID, T.PHASE_ID 

其他細節:

  • 的CLOB在此記錄的上述XML_DOCUMENT列中是780kb
  • 數據庫是Oracle 10g
  • CLOB中的XML格式正確

如果在上面的PLSQL中沒有什麼明顯的可以改變以避免數據庫凍結,沒有人有任何想法如何/如果我可以調整我的服務器或數據庫,以避免這些類型的查詢崩潰一般?

任何潛在的解決方案或建議非常重視,謝謝!

+0

你真的是指死機或某種ORA-XXXXX錯誤 – 2012-07-18 00:19:35

+0

崩潰。因此,崩潰後對數據庫的其他調用會得到以下錯誤: ORA-12571:TNS:數據包寫入器故障和ORA-03135:連接丟失聯繫。當數據庫由我們的數據庫管理員關閉時,我們也會得到「ORA-01089:即時關機正在進行 - 不允許任何操作」,但這對於這個問題是多餘的。 – fuzzyanalysis 2012-07-18 00:27:25

+0

與您處理的其他文檔相比,此XML文檔是否異常複雜?您能否將XML文檔解壓縮爲文本並嘗試通過其他XML解析器解析它?也許這個文檔的格式不正確,導致它無法處理。 – 2012-07-18 01:18:25

回答

0

升級到Oracle 11g解決了我們的問題。 11g比10g更有效地處理XML操作,並且更好地處理故障。

Another person on Oracle forums使用不同的XML操作得出了類似的結論,所以假設升級是適當的解決方案可能是安全的。

1

您(或您的DBA)需要查看警報日誌和跟蹤文件以瞭解正在發生的事情的詳細信息。任何災難性的Oracle錯誤應爲寫入崩潰進程的跟蹤文件。

還檢查你在各級NLS設置/數據庫字符集;我曾經遇到過與你的描述有些膚淺相似的情況,我通過改變DB字符集來解決這個問題。

如果另一臺機器上的另一個用戶(操作系統和數據庫用戶)嘗試相同的查詢,會發生什麼情況?

讓DBA檢查塊損壞情況。倒出DB塊並檢查奇數字符。

請讓我們知道您找到什麼;這對我很有意思。

+0

謝謝,這些都是一些很棒的建議。回答你的問題:在其他機器上遠程運行相同語句的其他用戶會發生這種情況。 – fuzzyanalysis 2012-07-18 02:16:13

+0

DBA可以與數據庫建立雙層連接嗎?這將有助於確定它是否是通過監聽器進行連接的問題。如果在遇到問題之後會發生什麼情況,Listener而不是DB重新啓動? – Karl 2012-07-18 02:57:38

+0

我們終於明白了。看起來升級到Oracle 11g解決了這個問題...... 11g似乎更好地處理命令。我們將有問題的XML複製到11g進行測試,並得到以下錯誤:「ArrayOfSelectedRecordLe1818_T」上的IMP錯誤63 ......最後,DBA能夠複製數據,而上面的PLSQL不再導致問題。所以答案是「Oracle 11g更好地處理XML」 - 模糊,但答案完全相同。 – fuzzyanalysis 2012-07-19 00:42:13