2011-03-28 52 views
2

我對錶格有一個簡單的UPDATE...WHERE EXISTS...。 Oracle(通過所有其他客戶端工具)立即(無延遲)返回一個ORA-03113,指示可能的連接問題,& c。我直接在數據庫框中運行。更新語句導致Oracle「沒有更多數據從套接字讀取」?

此實例已啓動,正在運行,並且很開心。我可以發出任何SQL和複雜的過程,許多模式都可以運行。這只是一個特定的SQL語句。

它可能是什麼?如何找出答案?

$ sqlplus user/pass  
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Mar 28 13:04:38 2011 

Copyright (c) 1982, 2007, Oracle. All Rights Reserved. 

Connected to: 
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production 
With the Partitioning, OLAP, Data Mining and Real Application Testing options 

SQL> select * from dual; 

D 
- 
X 

SQL>  update foo_a a 
    2  set a.field0 = (
    3   select b.bar 
    4   from foo_b b 
    5   where b.custom_no = 0 
    6   and b.csf_id = a.id 
    7  ) , a.updated_on = current_timestamp 
    9  where exists (
    8   select 1 
10   from foo_b c 
11   where c.custom_no = 0 
12   and c.csf_id = a.id 
13  ); 
    update foo_a a 
* 
ERROR at line 1: 
ORA-03113: end-of-file on communication channel 


SQL> 
+1

服務器上是否生成跟蹤文件?如果是這樣,你可以發佈該跟蹤? – 2011-03-28 20:48:19

+0

這是一個很大的痕跡。有沒有最能幫助的部分? – Xailor 2011-03-28 20:55:35

+0

什麼數據庫版本,出於興趣? – 2011-03-29 04:48:53

回答

3

Oracle數據庫很少真正崩潰。會話可能會被終止或斷開連接,但數據庫保持不變。

這具有處理查詢中的Oracle錯誤的特徵。通常,可以在跟蹤文件中找到有問題的查詢。有時,警報日誌中還有一條有用的消息,以及一個附加的錯誤代碼。如果您在跟蹤文件中找到查詢,有時可以在Metalink中查找錯誤。在跟蹤文件中,您可能會找到如下行:

ksedmp: internal or fatal error 

後跟一個Oracle錯誤,然後是導致問題的實際查詢。上述信息在您的情況下很可能會有所不同。只是在那裏徘徊,指出錯誤的消息。他們真的不難發現。

你能重寫你的更新語句嗎?這是一個測試環境嗎?你可以消除WHERE EXISTS並用簡單的表達式來代替它,只是爲了看看這是否是問題的根源?

+0

我也在考慮bug。 'foo_b'是一個視圖。如果我創建一個表作爲視圖的投影,則會運行更新。該視圖是一個簡單的選擇。必須有一些附帶數據引起這種情況。 – Xailor 2011-03-28 22:51:27

+0

有一次,我在最近的記憶中看到過這個觀點。在我們的例子中,Oracle支持有一個「特殊的」系統參數設置來處理它。 – DCookie 2011-03-28 23:07:04

2

這對能夠爲發生了無數或原因,從網絡問題,數據庫崩潰通信故障一個非常通用的錯誤。

檢查this以防萬一,以便爲您提供一些可能的原因。

+0

正確,從而混淆。數據庫已啓動,網絡不在運行。 – Xailor 2011-03-28 20:56:29

+2

在這種情況下,負責該連接的服務器端進程崩潰。即Oracle錯誤。應該有一個跟蹤文件寫出來。您將需要聯繫支持。 – 2011-03-28 21:43:18

+0

有時,Oracle 10g發生錯誤時,由於連接過多(通常是資源的症狀被完全佔用),監聽器「窒息」 – Soronthar 2011-03-28 22:11:20

1

ORA-03113 =接觸的支持

他們會問的第一個問題:你完全修補?

相關問題