2011-03-28 38 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 =接触的支持

他们会问的第一个问题:你完全修补?

相关问题