ORA-03113: end-of-file on communication channel

Oracle Database suddenly stopped working while the payroll process was going on. When I looked after the problem, all services were running. I restarted all services but it didn't work. When I tried to access alert file, it was inaccessible due to big size. So, I renamed the alert log file and try to start Oracle manually using commands-
SQL>Shutdown Immediate
SQL>Alter database mount;
SQL>Alter database open;
Givs error - ORA-03113: end-of-file on communication channel

So, the database was not opening.

This error can come due to a number of reasons-
a. Alert log file size touched to maximum size
b. Read/Write problem on Disk
c. Database unable to find space to write. etc.

But, when I gone trough the alert log file, I find a number of errors-

Errors in file c:\oracle\diag\rdbms\testdb\testdb\trace\crpfselo_lgwr_816.trc:
ORA-00206: error in writing (block 1013, # blocks 1) of control file
ORA-00202: control file: 'C:\ORACLE\FLASH_RECOVERY_AREA\TESTDB\CONTROL02.CTL'
ORA-27069: attempt to do I/O beyond the range of the file
OSD-04026: Invalid parameter passed.
O/S-Error: (OS 1013) The configuration registry key could not be written.
Errors in file c:\oracle\diag\rdbms\testdb\testdb\trace\testdb_lgwr_816.trc:
ORA-00221: error on write to control file
ORA-00206: error in writing (block 1013, # blocks 1) of control file
ORA-00202: control file: 'C:\ORACLE\FLASH_RECOVERY_AREA\TESTDB\CONTROL02.CTL'
ORA-27069: attempt to do I/O beyond the range of the file
OSD-04026: Invalid parameter passed.
O/S-Error: (OS 1013) The configuration registry key could not be written.
LGWR (ospid: 816): terminating the instance due to error 221
Tue Jul 17 16:09:13 2012
ARC3 started with pid=24, OS id=3088
Instance terminated by LGWR, pid = 816

By observing log file, it seems problem is either with Disk or CONTROL02.CTL file.
Firstly, I tried to check dist using chkdsk utility in safe mode, bit this also didn't give solution.
Then I copied CONTROL01.CTL file from other location to 'C:\ORACLE\FLASH_RECOVERY_AREA\TESTDB\' after renaming control02.ctl file and again rename control01 to control02.ctl. It worked.



Alternatively, We can also use file movement process, that include these steps
• Alter the control_files parameter using the ALTER SYSTEM comamnd.
• Shutdown the database.
• Rename the physical file on the OS.
• Start the database.
The following SQL*Plus output shows how this is done for an instance using an spfile. For instances using a pfile replace the spfile manipulation steps with an amendment of the parameter in the init.ora file.
SQL> ALTER SYSTEM SET control_files='S:\ORACLE\TESTDB\RENAME_CONTROL01.CTL', -
> 'S:\ORACLE\TESTDB\CONTROL02.CTL', -
> 'S:\ORACLE\TESTDB\CONTROL03.CTL' SCOPE=SPFILE;

System altered.

SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> HOST MOVE S:\ORACLE\TESTDB\CONTROL01.CTL S:\ORACL\TESTDB\RENAME_CONTROL01.CTL

SQL> STARTUP

Comments