2

我有一个有点简单UPDATE...WHERE EXISTS...的表。Oracle(通过所有其他客户端工具)但会立即(无延迟)返回 ORA-03113,指示可能存在连接问题等。我直接在数据库盒上运行它。

这个实例已经启动、运行并且很开心。我可以发出任何 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>
4

3 回答 3

3

Oracle 数据库很少真正崩溃。会话可能会被终止或断开连接,但数据库会保持正常运行。

这在处理查询时具有 Oracle 错误的标记。通常,有问题的查询可以在跟踪文件中找到。有时,警报日志中也会有有用的消息,以及附加的错误代码。如果您在跟踪文件中找到该查询,有时您可以在 Metalink 中查找错误。在跟踪文件中,您可能会找到如下行:

ksedmp: internal or fatal error

然后是 Oracle 错误,然后是导致问题的实际查询。在您的情况下,上述消息很可能会有所不同。只是在那里四处寻找指示错误的消息。他们真的不难发现。

你能重写你的更新声明吗?这是测试环境吗?你能消除 WHERE EXISTS 并用一个简单的表达式替换它,看看这是否是问题的根源吗?

于 2011-03-28T22:36:42.163 回答
2

这是一个非常普遍的通信故障错误,可能有多种原因发生,从网络问题到数据库崩溃。

检查这个以防万一给你一些关于可能原因的想法。

于 2011-03-28T20:50:21.760 回答
1

ORA-03113 = 联系支持

他们会问的第一个问题:你打好补丁了吗?

于 2011-03-29T10:58:09.683 回答