Friday, 4 April 2008

RMAN Backup and Recovery Example

This is one in the list of my Example Series in this blog. Check this blog for more possible examples

I have been using this to backup and recover database. I thought as usual, I should share it.
This is a simple script and should be used with care. This assumes a full backup and recover. It does not take other scenarios into consideration.

RMAN Backup Script

I assume you are running Unix.

This script will help you. Save it as shell script (e.g and make required changes.

# Change and to your own (e.g /u01/oracle/backup)



# Add date to be used in logfile
export TDAY=`date +%a`
export backup_dir = /u01/oracle/backup
export LOGFILE=$backup_dir/$SID_clone.log

echo "Backup Started at `date` \n" >$LOGFILE

$ORACLE_HOME/bin/rman <<'!' 1>> $LOGFILE 2>&1

# Connect to the database. Change this to Sys logon if not using /

connect target /

# Allocate Disk channels. Allocate more if you have enough max process to use

run {
allocate channel t1 type disk;
allocate channel t2 type disk;
allocate channel t3 type disk;
allocate channel t4 type disk;

#backup the whole source database.
# Use tags for easy separation from other backups during restore
tag whole_database_open
format '$backup_dir/df_%u'

# switch out of the current logfile
sql 'alter system archive log current';

#backup the archived logs
archivelog all
format '$backup_dir/al_%u';

# backup a copy of the controlfile that contains records for the backups just made
current controlfile
tag = cf1
format '$backup_dir/cf_%u';


echo "Backup Finished at `date` \n" >>$LOGFILE

RMAN Recovery Script

This one of the routines I use to clone my database from one Server to another. so it may help you, but you have to use it with caution .
hope you are a DBA and can make all the required changes to the scripts. Whereever you see $, it means run from OS. RMAN> means run from RMAN

--I assume the RMAN Backup has been restored to the DISK as well
--I assume your system is Unix
--I assume you will run the commands manually (e.g. copy and paste). If you can script them, thats ok.

Esnure you Rebuild all your configuration as before
Set all your ORACLE_HOME etc.
Prepare all your init ora file as before (restore a previous copy is possible)

Create all the starting mount point as it was for your datafiles.

Logon to RMAN

Run the following command. This part can also be scripted if required.

RMAN> connect target /

Startup the Instance with nomount

RMAN> startup nomount;

# add the init parameter file to the above if not on default location

#If you have or know DBID, set the DBID

RMAN> set dbid

Identify and Restore the control file.


Create a password file

$create password file orapwd file=$ORACLE_HOME/dbs/orapw password=

Modify the script below to use to restore the database

export ORACLE_SID=


connect target /

# Mount the database

alter database mount;

# Allocate Disk channels.

RMAN> run {
allocate channel t1 type disk;
allocate channel t2 type disk;
allocate channel t3 type disk;
allocate channel t4 type disk;

restore database;

# If your rman used a tag,add "from tag " after database above


# Check the LOGFILE for errors

# Recover the Database

RMAN> run {
SET UNTIL logseq = thread = 1;

# Add Temp files because your backup will not have them
# Example

ADD TEMPFILE '//<_tempfile_name>' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 4000M;

# Run reset logs

RMAN> alter database open resetlogs;


Anonymous said...

I want to configure this one in to windows env.

I do not understand meaning of

<> , 2 , &1 in

%ORACLE_HOME/bin/rman <>$LOGFILE 2>&1

DBMS Direct said...

The characters are been changed by the blog editing tool. It is supposed to read $ORACLE_HOME/bin/rman <<'!' 1>> $LOGFILE 2>&1 without the ' '

Fatih said...

Thank you so much for sharing this precious information with us.