ORA-03113: end-of-file communications channel

Gator

Member
Ran into an odd problem.

After getting a new computer running Windows XP I moved from C++ Builder 4, DOA 3x, Oracle 8.0.5 client to C++ Builder 5, DOA 4 and Oracle 9 client. After recompiling an application I started getting hangs on inserts or updates that would end with the Oracle EOF error. Some tables would work other tables never worked.

I checked the oracle process on the server side and as soon as the insert command hit the server my app would hang and the server process would hit 100% cpu utilization. It would hold for about 30 seconds and then the server side process would die and I'd get the eof message on the client side.

So far I've found that setting the "UseOCI7" preference to TRUE in my TOracleSession objects gets around this problem. Is this the best solution?
 
Originally posted by Gator:
Ran into an odd problem.

After getting a new computer running Windows XP I moved from C++ Builder 4, DOA 3x, Oracle 8.0.5 client to C++ Builder 5, DOA 4 and Oracle 9 client. After recompiling an application I started getting hangs on inserts or updates that would end with the Oracle EOF error. Some tables would work other tables never worked.
This error is quite often in Oracle9. I guess, you have INSERT ... SELECT statements? Never have seen INSERT ... VALUES failed in this way (unless you have trigger with complicated SELECT on the table)/

Try to repeat your statemnts in SQL*Plus. I may bet you will have the same error. ORA-3113 is not DOA-specific. Concerning 30sec of server CPU activity - more likely it is dump creating. Which exact Oracle version you have on the server?

To prevent this you have to change the execution plan for your statements (each of below described steps may or may not help, this error is quite misterious) by
  • Collect statistics on the tables (don't use DBMS_STAT, just good old ANALYZE or DBMS_UTILITY.ANALYZE_SCHEMA. Form my experience usage of DBMS_STAT quite often results in ORA-3113 and/or ORA-600 on subsequent SELECTa
  • Try to hint your statemnts (RULE quite often (but not always) prevent ORA-3113
  • Rewrite your statemnts in some semantically equivalent but syntactically different, e.g. replace EXIST with IN or vice versa and so on
  • Open TAR with Oracle support

Good luck
 
Back
Top