Tuesday, January 12, 2010

ORA-00205: error in identifying control file

Problem Description
Whenever you try to start your oracle database instance or mount your database it fails with ORA-00205 error message as below.
SQL> startup
ORACLE instance started.

Total System Global Area 535662592 bytes
Fixed Size 1334380 bytes
Variable Size 306185108 bytes
Database Buffers 222298112 bytes
Redo Buffers 5844992 bytes
ORA-00205: error in identifying control file, check alert log for more info

Error Investigation
As error message "ORA-00205: error in identifying control file, check alert log for more info" suggests to look for alert log messages so immediately after getting this error message you should look for alert log message.

Based on this error message you might get various types of alert long entries which would really help you to solve your problem. Following is the several versions of error messages.

Error Message Version 01:
ORA-00202: control file: '/oracle/controlfile/contro101.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Fri Jan 8 11:19:42 2010
ORA-205 signalled during: ALTER DATABASE MOUNT...
Fri Jan 8 11:19:50 2010
Shutting down instance (abort)

Error Message Version 02:
ORA-00202: controlfile: '/oracle/controlfile/CONTROL01.CTL'
ORA-27086: skgfglk: unable to lock file - already in use
OSD-04002: unable to open file
O/S-Error: (OS 5) Access is denied.

Error Message Version 03:
ORA-00202: control file: 'F:\ORACLE\CONTROL.CTL'
ORA-27047: unable to read the header block of file
OSD-04006: ReadFile() failure, unable to read from file
O/S-Error: (OS 38) Reached the end of the file.

Error Message Version 04:
Errors in file /oracle/9.2.0/admin/bdump/abc_ckpt_3117.trc:
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: '/oracle/data/ctl03.dbf'
ORA-27072: skgfdisp: I/O error
Linux Error: 30: Read-only file system
Additional information: 2


General Cause And Solution of ORA-00205 Problem:
The ORA-00205 problem is reported because the system could not find a control file of the specified name and size. The name of control file is specified by the CONTROL_FILES initialization parameter within spfile/pfile. While mounting oracle database oracle finds that in the disk all those files are not there or size is unmatched as it is specified within spfile/pfile.

If you see ORA-00205 is reported while starting up/mount the oracle database then check that the proper control filename is referenced in the CONTROL_FILES initialization parameter in the initialization parameter. If not check your correct spfile/pfile or fix location of CONTROL_FILES parameter within spfile/pfile and try again to mount the database.

Whenever you are using mirrored control files, that is, more than one control file is referenced in the initialization parameter file, remove the control filename listed in the message from the initialization parameter file and restart the instance. If the message does not recur, remove the problem control file from the initialization parameter file and create another copy of the control file with a new filename in the initialization parameter file.

Step by step Solution
Step 01: After you see ORA-00205 immediately look for alert log files for further investigation.

Step 02: Check the control_files parameter in your initialization parameter. You can simply check by ,
SQL> show parameter control_files

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string D:\APP\ARJU\ORADATA\A\CONTROL0
1.CTL, D:\APP\ARJU\ORADATA\A\C
ONTROL02.CTL, D:\APP\ARJU\ORAD
ATA\A\CONTROL03.CTL

Now compare this location with the location of controlfile in your disk system.

From the alert log if you see error message like version 1 i.e you have noticed "ORA-00202: control file: '/oracle/controlfile/contro101.ctl'" then from your CONTROL_FILES initialization parameter remove the entry /oracle/controlfile/contro101.ctl if you have multiple version of controlfiles and start the database. If you fail then again check for alert logs. If it is same error message like points to another controlfile then try to remove that control file too if you have at least three versions of controlfiles. If you fail then possibly all of your controlfiles are lost. In that case you need to restore controlfile from previous backup or create a new one if you don't have any previous backup of controlfile. In the post Recover database after only lose of all controlfiles it is discussed how you can recover controlfile. In the post Restore the Controlfile from Backup using RMAN it is discussed how you can restore controlfile from previous RMAN backup using RMAN. In the post How to create controlfile it is discussed how to create a controlfile whenever you are lost all controlfile and you don't have any backups.

If you see other version of error versions then take necessary actions as alert log suggests. For example if you see error message like version 2 that is
"ORA-00202: controlfile: '/oracle/controlfile/CONTROL01.CTL'
ORA-27086: skgfglk: unable to lock file - already in use"
then ensure that oracle database is shutdown cleanly and no other process is holding lock of the control file. After you ensure that try starting database again.

If you see error message like version 3 that is
"ORA-27047: unable to read the header block of file
OSD-04006: ReadFile() failure, unable to read from file"
then possibly your control file got corrupted and follow the same steps as it is demonstrated in step 2 for error version 01.

If you see error message like version 4 that is
"ORA-00202: controlfile: '/oracle/data/ctl03.dbf'
ORA-27072: skgfdisp: I/O error
Linux Error: 30: Read-only file system"
then ensure that your control file has proper permission set from operating system. That means it must have read, write permission to oracle owner user.

Step 03:
After you identify and solve the problem ensure that you have multiple copies of your CONTROL_FILES parameter onwards. If you use spfile in your database startup then after your nomount state of database and physically copied controlfiles to all locations as you want, you can point multiple copies of controlfile by issuing "ALTER SYSTEM SET CONTROL_FILES=..., ..." command from database. A similar example is demonstrated in the topic ORA-00214: Controlfile Version Inconsistent on Startup or Shutdown
Related Documents:

How to Restore the Controlfile from Backup.

No comments:

Post a Comment