oraclerman
Table of Contents
Script: Bash: AIX: Oracle RMAN Backup
Summary: How to handle Oracle backup and restore through rman.
Date: Around 2013
Refactor: 8 March 2025: Checked links and formatting.
#!/bin/bash # set -x ### Script Variables WHATAMI=`basename $0` BASEDIR=`dirname $0` ### Oracle Variables ORACLE_HOME=/opt/oracle/product/10.2 ORACLE_BASE=/opt/oracle ORACLE_SID=<sid> ### Offsitecopy Variables GZIP=/usr/bin/gzip TAR=/usr/local/bin/tar . "$BASEDIR/mail.txt" . "$BASEDIR/offsitecopy.func" HOSTNAME=`hostname` HOSTNAME_SHORT=`hostname -s` BCKROOT=/var/backup/oracle BCKPDIR=${BCKROOT}/rman_backupdir RMANDIR=${BCKROOT}/rman_workdir RMANLOGDIR=${BCKROOT}/rman_logs RMANLOGFILE=${RMANDIR}/rman_backup.log RMANCROSSLOGFILE=${RMANDIR}/rman_crosscheck.log BACKUPFILE="${BCKPDIR}/${HOSTNAME_SHORT}_${ORACLE_SID}-RMAN_`date +%Y%m%d%H%M`.tgz" LOGFILE="$BCKPDIR/logfile_`date +%Y%m%d%H%M`.log" TOUSER="syncuser" TOHOST="syncserver.company.local" TODIR="/srv/syncdata/Oracle/${HOSTNAME_SHORT}_${ORACLE_SID}" DOCOPY="0" RMANRESULT="0" ZIPRESULT="0" ### Export Required Variables export ORACLE_SID ORACLE_BASE ORACLE_HOME BCKROOT BCKPDIR RMANDIR BASEDIR removeFunction() { echo "Removing old backup files from ${RMANDIR}" rm ${RMANDIR}/* } mailFunction() { if [ "$1" == "RMAN" ]; then echo "RMAN backup was not created succesfully, consult ${RMANLOGDIR}/rman_backup.log on ${HOSTNAME}" | mail -s "Failed $1 Backup" $MAILTOFAIL fi if [ "$1" == "ZIP" ]; then echo "Tar or zip was not created succesfully, consult ${BACKUPFILE}.log on ${HOSTNAME}" | mail -s "Failed $1 Backup" $MAILTOFAIL fi if [ "$1" == "SUCCESS" ]; then echo "RMAN backup was succesful, but the RMAN was not copied to the syncserver" | mail -s "RMAN Backup Succeedded, but not copied!" $MAILTOFAIL fi removeFunction } failFunction() { echo echo "RMAN Result = $RMANRESULT" echo "ZIP Result = $ZIPRESULT" echo if [ ! "$RMANRESULT" == "0" ]; then echo "RMAN backup was not created succesfully..." echo "Please consult `tput bold``tput smul`${RMANLOGDIR}/rman_backup.log`tput sgr0`." mailFunction RMAN fi if [ ! "$ZIPRESULT" == "0" ]; then echo "Tar or zip was not created succesfully..." echo "Please consult `tput bold``tput smul`${BACKUPFILE}.log`tput sgr0`" mailFunction ZIP fi removeFunction exit 1 } copyFunction() { if [ "$ZIPRESULT" == "0" ]; then if [ "$DOCOPY" == "1" ]; then offsitecopy "${BACKUPFILE}" "$TOUSER" "$TOHOST" "$TODIR" "$LOGFILE" "$WHATAMI" "$HOSTNAME" "$MAILTOSUCCESS" "$MAILTOFAIL" removeFunction else echo echo "Copy to offsite location is not enabled." echo "Modify the script under Offsitecopy Variables to enable offsitecopy" echo mailFunction SUCCESS fi else failFunction; fi } zipRman() { if [ "$RMANRESULT" == "0" ]; then echo echo "Tar-zipping RMAN backup and logs..." $TAR -cf - ${RMANDIR} | $GZIP > ${BACKUPFILE} ZIPRESULT=$? copyFunction else failFunction fi } rmanBackup() { echo echo "Starting RMAN backup now for Oracle Database ${ORACLE_SID}..." echo "${ORACLE_HOME}/bin/rman target / "cmdfile=${BASEDIR}/oracle_rman_backup.cmd"" ${ORACLE_HOME}/bin/rman target / cmdfile=\"${BASEDIR}/oracle_rman_backup.cmd\" > ${RMANLOGFILE} RMANRESULT=$? sleep 5 mv $RMANLOGFILE $RMANLOGDIR zipRman } rmanCrosscheck() { echo echo "Starting RMAN crosscheck now for Oracle Database ${ORACLE_SID}..." echo "${ORACLE_HOME}/bin/rman target / "cmdfile=${BASEDIR}/oracle_rman_crosscheck.cmd"" ${ORACLE_HOME}/bin/rman target / cmdfile=\"${BASEDIR}/oracle_rman_crosscheck.cmd\" > ${RMANCROSSLOGFILE} sleep 5 mv $RMANCROSSLOGFILE $RMANLOGDIR } rmanCrosscheck rmanBackup echo echo "INFO - RMAN backup finished" echo
As you can see, there is an external reference to offsitecopy and mail.txt. Both are described in Bash: Function: Offsitecopy.
Crosscheck Commandfile
run { crosscheck backup; crosscheck backupset; crosscheck archivelog all; delete noprompt expired backup; delete noprompt expired backupset; delete noprompt expired archivelog all; delete noprompt obsolete; }
Note: It's important to configure the RMAN setting below in the RMAN configuration so that cleanup actions do not delete valid files.
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
This setting can be checked by the RMAN command 'show all':
bash-3.00$ rman target / Recovery Manager: Release 10.2.0.4.0 - Production on Tue Nov 2 09:17:01 2010 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: <sid>(DBID=71467001) RMAN> show all; using target database control file instead of recovery catalog RMAN configuration parameters are: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS; CONFIGURE BACKUP OPTIMIZATION OFF; CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET; CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE ENCRYPTION FOR DATABASE OFF; # default CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/oracle/product/10.2/dbs/snapcf_<sid>.f'; # default RMAN> exit Recovery Manager complete.
Backup Commandfile
run { backup database format '/var/backup/oracle/rman_workdir/%d_%u_%s'; backup current controlfile format '/var/backup/oracle/rman_workdir/<sid>ctl_date%T%U'; sql 'alter system archive log current'; backup archivelog from time 'SYSDATE-1' format '/var/backup/oracle/rman_workdir/arch_%d_%u_%s'; }
Simple Commandfile
spool log to "/var/backup/oracle/rman_workdir/rman_backup.log" run { backup database format '/var/backup/oracle/rman_workdir/%d_%u_%s'; } exit; spool log off; exit
oraclerman.txt · Last modified: by 127.0.0.1