RMAN - Backing Up the Control File
As was shown in the first chapter, the control fileis of great importance to the Oracle database. If the
control file is lost, the database will not run. Therefore, we
need to protect control files from any failure and back them up
correctly. A backup of the control file can be created using RMAN
as follows:
RMAN> backup
current controlfile;
Using the above command, a new backup set is created and the
control file is backed up.
If we want to create a backup of control files each time we do
a backup of the database, use the include current control file
command. In this example, we backup datafile 4 and the current
control file together using one command:
RMAN> backup
datafile 4 include current controlfile;
When the system01.dbf file is backed up, the control file and
the spfile are automatically backed up. This is shown in the
following example:
From the above example, it is obvious that even though we did
not individually backup the control file and the spfile, by
backing up the system01.dbf file, those files have been backed up
automatically.
If the autobackupfeature in
RMAN configuration is enabled, then each time a structural change
is made to the database, an automatic backup of the control file
is performed. This concept was described in detail in Chapter 1
under the section on autobackup.
To create an image copy of the control file,use the following command:
RMAN> backup as
copy current controlfile format c:\bkp_controlfile.ctl;
Using this command, c:\bkp_controlfile.ctl is created. This
file will be a binary copy of the current control file. This type
of file may be used directly without RMAN restoration when all
control files are lost. In the scenario below, we create an image
copy of the control file and recover the database using this file
from loss of all control files:
C:\>rman target \
RMAN> backup as copy current controlfile format 'c:\control.ctl';
#We
take image copy of current control file
<....... output omitted .......>
output filename=C:\control.ctl tag=tag20090819t134500 recid=1
stamp=695310300
RMAN> exit
Recovery Manager complete.
C:\>sqlplus "/ as sysdba"
SQL>
shutdown immediate
SQL>
host
C:\>cd
c:\oracle\product\10.2.0\oradata\test
#Below, after shutting down the database, we delete all control
files
and copy newly created image copy of control file to original
destination
C:\oracle\product\10.2.0\oradata\test>del *.ctl
C:\>copy control.ctl
c:\oracle\product\10.2.0\oradata\test
1 file(s) copied.
C:\>exit
SQL>
startup nomount
SQL>
alter
system set
control_files='c:\oracle\product\10.2.0\oradata\test\control.ctl'
scope=spfile;
System altered.
#Above, in startup nomount mode, we change control_files
parameter in
spfile and indicate newly create image copy of control file.
Then
shutdown the database and bring it to mount mode.
SQL>
shutdown immediate
SQL>
startup mount
SQL>
alter
database open;
alter database open
*
Error at line 1:
ORA-01589: must use resetlogs or noresetlogs option for database
open
#Now, we do not need to open database in resetlogs mode, or we
lose
data in redo log files. So we connect to RMAN and recover the
database. RMAN automatically finds proper redo log file and
apply all changes to
datafiles
SQL>
exit
C:\>rman target /
RMAN> recover database;
<....... output omitted .......>
archive log thread 1 sequence 2 is already on disk as file
C:\oracle\product\10.2.0\oradata\test\redo01.log
archive log filename=C:\oracle\product\10.2.0\oradata\test\redo01.log
thread=1 sequence=2
media recovery complete, elapsed time: 00:00:01
Finished recover at 19-AUG-09
#Now, we can easily open the database using resetlogs option
RMAN> alter database open resetlogs;
database opened
RMAN>
%
Note: The resetlogs operation, performed
after having applied the online redo log file in recovery,
is done because the control file used is a backup control
file and the resetlogs operation synchronizes datafile and
redo log headers to the control file.
|
We can make a RMAN backup set from the control file created
above. To do that, use the backup controlfilecopy command as
shown below:
RMAN> backup as copy current
controlfile format 'c:\control.ctl';
RMAN> backup controlfilecopy 'c:\control.ctl';
channel ora_disk_1: starting full datafile backupset
input control file copy name=C:\control.ctl
RMAN>