SHIFT

--- Sjoerd Hooft's InFormation Technology ---

User Tools

Site Tools


oraclerman
Differences

This shows you the differences between two versions of the page.

Link to this comparison view

oraclerman [2013/05/04 13:18] (current)
sjoerd created
Line 1: Line 1:
 += Script: Bash: AIX: Oracle RMAN Backup =
  
 +This describes the way to handle Oracle backup and restore through rman.
 +
 +<code bash>
 +#!/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
 +</​code>​
 +As you can see, there is an external reference to offsitecopy and mail.txt. Both are described in [[offsitecopy]]. ​
 +
 += Crosscheck Commandfile =
 +<​code>​
 +run {
 +crosscheck backup;
 +crosscheck backupset;
 +crosscheck archivelog all;
 +delete noprompt expired backup;
 +delete noprompt expired backupset;
 +delete noprompt expired archivelog all;
 +delete noprompt obsolete;
 +}
 +</​code>​
 +
 +> Note: It's important to configure the RMAN setting below in the RMAN configuration so that cleanup actions do not delete valid files.
 +
 +<​code>​
 +CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
 +</​code>​
 +
 +This setting can be checked by the RMAN command 'show all':
 +<​code>​
 +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.
 +</​code>​
 +
 += Backup Commandfile
 +<​code>​
 +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';​
 +}
 +</​code>​
 +
 += Simple Commandfile =
 +<​code>​
 +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
 +</​code>​
 +
 +{{tag>​scripts oracle backup}}
oraclerman.txt ยท Last modified: 2013/05/04 13:18 by sjoerd