Take the 2-minute tour ×

I have a somewhat simple UPDATE...WHERE EXISTS... to a table. Oracle (via all other client tools) however immediately (no delay) returns an ORA-03113 which indicates possible connection problems, &c. I am running this directly on the database box.

This instance is up, running, and happy. I can issue any SQL and complex procedures and dozens of schemas are operational. It's just this one particular SQL statement.

What could it be? How to find out?

$ sqlplus user/pass    
SQL*Plus: Release - 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 - 64bit Production

SQL> select * from dual;


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

share|improve this question
Is there a trace file generated on the server? If so, can you post that trace? –  Justin Cave Mar 28 '11 at 20:48
It's a large trace. Is there a section that would be of most help? –  Xepoch Mar 28 '11 at 20:55
What database version, out of interest? –  Jeffrey Kemp Mar 29 '11 at 4:48

3 Answers 3

up vote 3 down vote accepted

Oracle databases very rarely truly crash. The session may be killed or disconnected, but the database stays up.

This has the earmarks of an Oracle bug in processing the query. Usually, the offending query can be found in the trace file. Sometimes there's a helpful message in the alert log as well, along with an additional error code. If you find the query in the trace file, sometimes you can look up the error in Metalink. In the trace file you might find a line like:

ksedmp: internal or fatal error

followed by an Oracle error and then the actual query causing the issue. The above message will quite likely be different in your case. Just poke around in there for messages indicating an error. They really aren't that hard to spot.

Can you rewrite your update statement? Is this a test environment? Can you eliminate the WHERE EXISTS and replace it with a simple expression just to see if that's the source of the problem?

share|improve this answer
I'm thinking bug too. The foo_b is a view. If I create a table as the projection of the view, the update runs. The view is a simple select. There must be some fringe data case causing this. –  Xepoch Mar 28 '11 at 22:51
The one time I've seen this in recent memory involved a view as well. Oracle support had a "special" system parameter setting that took care of it in our case. –  DCookie Mar 28 '11 at 23:07

That's a very generic error for communication failure that can happens for a myriad or reasons, from network problems to database crash.

Check this just in case to give you some ideas on possible causes.

share|improve this answer
Correct, and thus the confusion. Database is up, network is not in play. –  Xepoch Mar 28 '11 at 20:56
In that case, the server-side process responsible for that connection has crashed. i.e. Oracle bug. There should be a trace file written out. You will need to contact support. –  WW. Mar 28 '11 at 21:43
sometimes that error happens with Oracle 10g when the listener "chokes" due too many connections (usually a symptom of the resources being totally consumed) –  Soronthar Mar 28 '11 at 22:11

ORA-03113 = contact support

The first question they will ask: are you fully patched?

share|improve this answer

Your Answer


