我对表格有点简单UPDATE...WHERE EXISTS...
。然而,Oracle(通过所有其他客户端工具)立即(无延迟)返回ORA-03113,表示可能的连接问题,& c。我直接在数据库框上运行它。
此实例已启动,运行且开心。我可以发出任何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>
答案 0 :(得分:3)
Oracle数据库非常很少真正崩溃。会话可能会被终止或断开,但数据库会保持不变。
这在处理查询时有Oracle漏洞的标记。通常,可以在跟踪文件中找到违规查询。有时,警报日志中也会显示一条有用的消息,以及其他错误代码。如果在跟踪文件中找到查询,有时您可以在Metalink中查找错误。在跟踪文件中,您可能会找到如下行:
ksedmp: internal or fatal error
后面是Oracle错误,然后是导致问题的实际查询。在您的情况下,上述消息很可能会有所不同。只是在那里寻找指示错误的消息。他们真的不难发现。
您可以重写更新声明吗?这是一个测试环境吗?你可以消除WHERE EXISTS并用一个简单的表达式替换它,看看这是否是问题的根源?
答案 1 :(得分:2)
对于通信故障而言,这是一个非常普遍的错误,可能会出现无数或原因,从网络问题到数据库崩溃。
检查this以防万一,以便了解可能的原因。
答案 2 :(得分:1)
ORA-03113 =联系支持
他们会问的第一个问题:你是否完全修补了?