2011-03-20 60 views
0

當我上運行的Oracle 11g下一個SQL語句我ORA - 03113 但同樣的語句在Oracle 10gR2中運行正常 任何一個可以幫助我在這個問題上select語句給予ORA-03113在Oracle 11

SELECT /*+ INDEX_JOIN(b) */ 
      b.child_ 
     FROM tab1 b 
START WITH b.child_ IN (
    SELECT /*+ INDEX_JOIN(c) */ 
      c.id 
     FROM tab2 c 
     WHERE c.id IN (SELECT /*+ INDEX_JOIN(d) */ 
          d.id 
         FROM tab3 d 
         WHERE d.id2 = 'X' 
        UNION 
        SELECT 'X' 
         FROM DUAL)) 
CONNECT BY b.parent_ = PRIOR b.child_ 
+0

對於那些不瞭解Oracle錯誤代碼的人,ORA-03113是'通信通道上的文件結束'(http://ora-03113.ora-code.com /)。 – 2011-03-20 13:52:20

+0

你到目前爲止嘗試過什麼?例如刪除提示,將UNION更改爲UNION ALL? – 2011-03-21 03:23:30

回答

5

ORA-03113是Oracle的通用「服務器故障」錯誤之一。在包含診斷信息的USER_DUMP_DEST目錄中應該有一個跟蹤文件。如果你不走運,將會有一個核心轉儲(在CORE_DUMP_DEST目錄中)。我說不幸,因爲很難從堆轉儲中獲取堆棧跟蹤。

您可能很需要DBA來幫助訪問這些文件,也可以解釋。

ORA-03113通常表示數據庫的完整性問題,如塊或索引損壞。因此,您可能還需要DBA協助解決此問題。

總之,我認爲投票決定從ServerFault遷移此項目的人是錯誤的。

+5

我知道ORA-03113是由Oracle中的錯誤引起的,所以OP的問題可能不是損壞的數據文件。在這種情況下,解決方案是重寫查詢。導致此錯誤的查詢通常具有子查詢,因此有一件事是嘗試使用更少的子查詢重新編寫查詢。 – 2011-03-20 14:04:56

0

我對Exists子查詢支持分頁查詢有同樣的問題。我們通過將子查詢重新寫入一個簡單的問題來識別問題,然後找到了一個更改子查詢select語句的簡單解決方案:我們改爲僅選擇我們需要的字段,即tablename.id,而不是使用tablename.*。問題就解決了。

希望這會有所幫助。