Vous êtes sur la page 1sur 3

How to recreate a control file in Oracle Database

We should only recreate our control file when we are in certain circumstances :1. All copies of control files present in database are lost or corrupted.
2. We are restoring a backup in which control file is corrupted or missing.
3. We need to change a hard limit database parameter in the control file.
4. If we are moving our database to another server are files are present in different location.
5. Oracle customer support advices us to do so.
Recreating a control file of that database which is able to mount or open.
1. First we have to generate a ascii dump of the control file.
When database is mounted or open :SQL> alter database backup controlfile to trace;
Database altered
Trace file will be generated in User_dump directory.
SQL> show parameter user_dump_dest
NAME
-----------------------user_dump_dest

TYPE
--------string

VALUE
---------------------------/u04/app/cognos/diag/rdbms/orc
l/orcl/trace

Navigate to this directory and locate the latest trace file by using ls -ltr
[cognos@rac1 ~]$ cd /u04/app/cognos/diag/rdbms/orcl/orcl/trace/
[cognos@rac1 trace]$ ls -ltr
2. Create control file creation script from backup trace file :open the trace file named like _orc_1234.trc. It appears like an ordinary trace file but we are
interested in the part having create control file script. Modify the trace file, delete every thing
above the "CREATE CONTROLFILE" and after the "CHARACTER SET" option.
3. Shut down your database with immediate option.
SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
4. Startup the database in nomount mode.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 1025298432 bytes
Fixed Size
1341000 bytes
Variable Size
322963896 bytes
Database Buffers
696254464 bytes
Redo Buffers
4739072 bytes

SQL>
5. Take the control file script and use it to create the control file of the database.
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'+AMIT_R1/orcl/onlinelog/group_1.262.790789015',
'+AMIT_R1/orcl/onlinelog/group_1.263.790789019'
) SIZE 50M BLOCKSIZE 512,
GROUP 2 (
'+AMIT_R1/orcl/onlinelog/group_2.264.790789023',
'+AMIT_R1/orcl/onlinelog/group_2.265.790789025'
) SIZE 50M BLOCKSIZE 512,
GROUP 3 (
'+AMIT_R1/orcl/onlinelog/group_3.266.790789027',
'+AMIT_R1/orcl/onlinelog/group_3.267.790789029'
) SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'+AMIT_R1/orcl/datafile/system.256.790788811',
'+AMIT_R1/orcl/datafile/sysaux.257.790788811',
'+AMIT_R1/orcl/datafile/undotbs1.258.790788813',
'+AMIT_R1/orcl/datafile/users.259.790788813',
'+AMIT_R1/orcl/datafile/example.269.790789095',
'+AMIT_R1/orcl/datafile/amit.271.795743985'
CHARACTER SET AL32UTF8
;
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29
Control file created.
Once the control file successfully created database is automatically mounted.
SQL> select open_mode from v$database;
OPEN_MODE
-------------------MOUNTED
6. Once the database is mounted open the database with reset logs option.
SQL> alter database open resetlogs;
Database altered.

We have started the database with resetlogs so it's important to take a backup
immediately.
7. After the database is open add the existing temp file
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE
'+AMIT_R1/orcl/tempfile/temp.268.790789087' size 1429M REUSE;
Tablespace altered.
NOTE :- If we are using this control file creation script for a new database then some
change have to be made in control file creation script, instead of "CREATE
CONTROLFILE REUSE" we have to use "CREATE CONTROLFILE SET" and instead of
"NORESETLOGS" we have to use "RESETLOGS".
Recreating a control file of that database which is not able to mount.
In this scenario when we donot have a control file then :1. Restore control file from backup.
OR
Create a script of control file from beginning
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
Follow the format listing :
1. location of redo logs.
2. Location of Datafiles.
3. Specify the Characterset.
Once all things are listed correctly, use this to receate your control file.
SQL> startup nomount;
Create your control file from the script created earlier.
I hope this article helped you.
Regards,
Amit Rath