How to take RMAN Backup using Shell Script


Create directory structure to keep rman backup


mkdir -p /oracle/stage/rman



Create RMAN backup script file


RMAN backup script to take  DB FULL backup


vi /home/oracle/full_backup.sh


#!/bin/bash


. /home/oracle/.bash_profile


export ORACLE_SID=PROD

export ORACLE_HOME=/u01/app/oracle/product/11.2.0

export DATE=$(date +%y-%m-%d_%H%M%S)


rman target / log=/home/oracle/prod_${DATE}.log << EOF

run

{

allocate channel ch1 device type disk format '/oracle/stage/rman/prod_full_bkp_%u';

allocate channel ch2 device type disk format '/oracle/stage/rman/prod_full_bkp_%u';

delete noprompt obsolete;

backup database;

backup archivelog all delete input;

release channel ch1;

release channel ch2;

}

EOF



Schedule Backup Under Crontab


Give execute permissions on the shell script


chmod 775 /home/oracle/full_backup.sh


crontab -e


Schedule to run at 11 PM Daily


00,23 * * * /home/oracle/full_backup.sh





Another format

#!/bin/bash

export ORACLE_SID=your_db_sid
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
DATESTAMP=$(date +%Y%m%d_%H%M%S)

BACKUP_DIR=/u02/rman_backups

mkdir -p $BACKUP_DIR

rman target / <<EOF
RUN {
  CONFIGURE CONTROLFILE AUTOBACKUP ON;
  CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$BACKUP_DIR/ctrlfile_%F.bkp';

  BACKUP AS COMPRESSED BACKUPSET
    DATABASE FORMAT '$BACKUP_DIR/datafile_%d_%T_%U.bkp'
    TAG 'FULL_DB_BACKUP';

  BACKUP ARCHIVELOG ALL DELETE INPUT
    FORMAT '$BACKUP_DIR/archivelog_%d_%T_%U.bkp'
    TAG 'ARCHIVELOG_BACKUP';

  BACKUP CURRENT CONTROLFILE
    FORMAT '$BACKUP_DIR/controlfile_%d_%T_%U.bkp'
    TAG 'CONTROLFILE_BACKUP';
}
EXIT;
EOF


If you like please follow and comment