Rman Bkup.sh

  • Uploaded by: Srinadh Jyothi
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Rman Bkup.sh as PDF for free.

More details

  • Words: 4,298
  • Pages: 23
#!/usr/bin/ksh #---------------------------------------------------------------------------# Script : rman_bkup.ksh # Desc : To perform Oracle RMAN backup commands # Date : 10/22/2003 # Usage : rman_bkup.ksh <[ -r rman_db_name ]> # < -t target_db_name > # <[ -b backup_type ]> # <[ -a d | t ]> # [ -e email | p ] # [ -c d | ] # [ -s tablespace_name ] # [ -v nb_ora_serv ] # [ -y nb_ora_policy ] # [ -i nb_ora_client ] # [ -x start_logseq ] # [ -z end_logseq ] # [ -l no_of_log_files ] # [ -w parameter_file ] # [ -p k | r ] # [ -m ] # [ -n ] # [ -o ] # [ -g ] # [ -d ] # [ -u ] # [ -q ] # # where: # -r rman_db_name - recovery manager database name. # -t target_db_name - target database name. # -b backup_type - valid backup types: # 0 - level zero backup # 1 - level one backup # 2 - level two backup # a - archivelog backup # d - duplicate archivelog backup # t - tablespace backup # b - full database backup # -a t - backup to tape # -a d - backup to disk # -s tablespace_name - tablespace name, needed during # tablespace backup. # -m - Remove old disk backup files from the # old dir & move previous backup files to # the old dir. # -e email - email address to use. # -e p - use the email address in the # db_config.dat configuration file. # -y nb_ora_policy - Netbackup policy to use for the Oracle # backup. # -v nb_ora_serv - Name of the Netbackup master server. # -i nb_ora_client - Name of the Netbackup client. # -c d - Use the default compiled RMAN script. # -c rman_script - Name of the RMAN command script. # If this parameter is passed parameters # [<-b backup_type >] and [<-a d|t>] # are not anymore required.

# -x start_logseq - Backup archivelog starting from this # sequence number. # -z end_logseq - Backup archivelog ending from this # sequence number. # -l no_of_log_files - Number of RMAN log files to retain. # -w parameter_file - Allows the script to get and set up # some or all its backup configuration # parameters by using this parameter # file. It overwrites backup parameter # settings past in the script, if the # parameter has been defined in the # file. # -p k - Include the archive log in the backup # and keep it. # -p r - Include the archive log in the backup # and remove it. # -n - Don't do any backup, just create the # command file. # -o - Over write the command file and # continue backup. # -g - Use the Netbackup enviromental # variables to set up the backup to # be done. # -d - Backup only datafiles that have not # been backup. Use in conjunction # with full database backup. # -u - Do an RMAN NOCATALOG backup. # If this parameter is passed parameter # <[ -r rman_db_name ]> is not anymore # required. # -q - Compress the RMAN disk backup files. # #---------------------------------------------------------------------------# REQUIRED FILE: # # Make sure the following file exist and are located in the directory this # script resides. # # db_config.dat # #---------------------------------------------------------------------------#---------------------------------------------------------------------------# Replace the CURR_DIR variable (below) with the directory path where this # script is currently located. #---------------------------------------------------------------------------sCnt=`ps -ef | awk '$1 == "oracle"' | grep -v grep | grep -c rman` if [ $sCnt -gt "0" ] then exit else CURR_DIR=/orabin/apps/oracle/dbadm/general/config CONFIG_FILE=$CURR_DIR/.db_config #SBT_LIB="/usr/openv/netbackup/bin/libobk.so64.1" sScriptName=$(basename $0) sUser=$(whoami) sGroup=$(groups)

sHostName=$(hostname) sFileNames=${sScriptName%.ksh} AWK="/usr/bin/awk" PSEF="/usr/bin/ps -ef" GREP="/usr/bin/grep" WC="/usr/bin/wc -l" CAT="/usr/bin/cat" CHMOD="/usr/bin/chmod" LS="/usr/bin/ls" TOUCH="/usr/bin/touch" MAILX="/usr/bin/mailx" RM="/usr/bin/rm" MV="/usr/bin/mv" COMPRESS="/usr/bin/compress" UNCOMPRESS="/usr/bin/uncompress" SORT="/usr/bin/sort" DF="/usr/bin/df" DATE="/usr/bin/date" ID="/usr/bin/id" ENV="/usr/bin/env" TAIL="/usr/bin/tail" typeset -i iSw=0 typeset -i iCtr=0 typeset -i iStartSeq=0 typeset -i iEndSeq=0 typeset -i iNoOfLogFiles=10 typeset -i iLogFiles=0 typeset typeset typeset typeset typeset typeset typeset

-u -u -u -u -u -u -u

sMoveRemove="" sNoBackup="" sOverWrite="" sGetNbEnv="" sNotBackup="" sNoCatalog="" sCompress=""

sRmanDb="" sTargetDb="" sDiskTape="" sBkupType="" RMAN="" sPassword="" sRmanUser="" sTargetUser="" sPwdRman="" sPwdTarget="" sStr="" sBackupDir="" sTag="" sMsgLog="" sParamFile="" sRmanFileName="" sTablespace="" sMail=""

sMoveFiles="" sSendMail="" sParms="" s2ndArchDir="" sStoredScript="" sCommand="" sNbPolicy="" sNbServer="" sNbPCSched="" sNbClient="" sPlusArch="" sSbtLib="" sErrFile=$CURR_DIR/$sFileNames.err # FUNCTION : scriptUsage # PARAMETERS: None # DESC : Prints the usage of this script. function scriptUsage { print "USAGE: $sScriptName <[ -r rman_db_name ]>" print " < -t target_db_name>" print " <[ -b backup type ]>" print " <[ -a d|t ]>" print " [ -y nb_ora_policy ]" print " [ -v nb_ora_serv ]" print " [ -e email | p ]" print " [ -s tablespace_name ]" print " [ -c d | <stored_script>]" print " [ -x start_logseq ]" print " [ -z end_logseq ]" print " [ -l no_of_log_files ]" print " [ -w parameter_file ]" print " [ -p k | r ]" print " [ -m ]" print " [ -n ]" print " [ -o ]" print " [ -g ]" print " [ -d ]" print " [ -u ]" print " [ -q ]" exit 6 } # FUNCTION : errorMsg # PARAMETERS: error_message # DESC : Send and log error encountered during execution of this script. function errorMsg { sErrMsg=$1 sMsgRMAN="" if [[ -f $sErrFile ]] then

iSw=$( $CAT $sErrFile | $WC) if (( iSw > 100 )) then $RM $sErrFile $TOUCH $sErrFile $CHMOD g+w $sErrFile fi else $TOUCH $sErrFile $CHMOD g+w $sErrFile fi print $($DATE) >> $sErrFile print "\n$sErrMsg" print "$sErrMsg \n" >> $sErrFile # Don't email if their is no email address. if [[ $sMail != "" ]] then if [[ -f $sMsgLog ]] then sMsgRMAN=$($TAIL -15 $sMsgLog) sMsgRMAN="\n\n"$sMsgRMAN fi print $sErrMsg" "$sMsgRMAN | $MAILX -s "$sTargetDb($sHostName) $sDiskTape Backup Error!!!" $sMail fi }

exit 16

# FUNCTION : createScript # PARAMETERS: maxopenfiles filesperset number_of_channels # DESC : Create the RMAN command script function createScript { sMax=$1 sSet=$2 iC=$3 sDir="" sDir1="" if [[ $sDiskTape == "DISK" ]] then sDir="$sBackupDir/" sDir1="$sBackupDir1/" fi if [[ $sBkupType == "0" ]] then sBk="level_zero" elif [[ $sBkupType == "1" ]] then sBk="level_one" elif [[ $sBkupType == "2" ]] then sBk="level_two" elif [[ $sBkupType == "a" ]] then sBk="archivelog"

elif [[ $sBkupType == "d" ]] then sBk="dup_arch" elif [[ $sBkupType == "b" ]] then sBk="b" else sBk="tablespace" fi sTag=$sTargetDb"_"$sHostName"_"$sBk`date "+%m%d%y"` sRmanFileName=$sBackupDir/$sTargetDb"_"$sBk"_backup.cmd" if [[ -f $sRmanFileName && $sOverWrite == "" ]] then errorMsg "ERROR(6)-> File $sRmanFileName found aborting backup..." fi if [[ $sStoredScript == "d" ]] then sStoredScript=$sBk"_backup" print "run {EXECUTE SCRIPT $sStoredScript;}" > $sRmanFileName else print "run {" > $sRmanFileName # iCtr=1 # while (($iCtr <= $iC)) # do # print "ALLOCATE CHANNEL c$iCtr TYPE $sDiskTape MAXOPENFILES $sMax" >> $sRmanFileName # print $sParms >> $sRmanFileName # (( iCtr = $iCtr + 1 )) # done fdate=`date +"%m-%d-%y"` print "ALLOCATE CHANNEL c1 TYPE $sDiskTape MAXOPENFILES $sMax FORMAT '$sDir"$sTargetDb"_"$sBkupType"_%U_"$fdate".bak' maxpiecesize 50g" >> $sRmanFileName print $sParms >> $sRmanFileName print "ALLOCATE CHANNEL c2 TYPE $sDiskTape MAXOPENFILES $sMax FORMAT '$sDir1"$sTargetDb"_"$sBkupType"_%U_"$fdate".bak' maxpiecesize 50g" >> $sRmanFileName print $sParms >> $sRmanFileName print "ALLOCATE CHANNEL c3 TYPE $sDiskTape MAXOPENFILES $sMax FORMAT '$sDir"$sTargetDb"_"$sBkupType"_%U_"$fdate".bak' maxpiecesize 50g" >> $sRmanFileName print $sParms >> $sRmanFileName print "ALLOCATE CHANNEL c4 TYPE $sDiskTape MAXOPENFILES $sMax FORMAT '$sDir1"$sTargetDb"_"$sBkupType"_%U_"$fdate".bak' maxpiecesize 50g" >> $sRmanFileName print $sParms >> $sRmanFileName

if [[ $sBkupType != "a" && $sBkupType != "d" ]] then if [[ $sBkupType != "t" ]] then

if [[ $sBkupType == "b" ]] then # Backup only datafiles that had not been back up. if [[ $sNotBackup == "Y" ]] then print "BACKUP DATABASE NOT BACKED UP FILESPERSET $sSet" >> $sRmanFileName else print "CROSSCHECK ARCHIVELOG ALL;" >> $sRmanFileName # print "DELETE EXPIRED ARCHIVELOG ALL;" >> $sRmanFileName print "BACKUP as compressed backupset DATABASE FILESPERSET $sRmanFileName fi

$sSet" >>

print "TAG $sTag" >> $sRmanFileName # print "FORMAT '$sDir"$sTargetDb"_"$sBkupType"_%U.bak'" >> $sRmanFileName else print "CROSSCHECK ARCHIVELOG ALL;" >> $sRmanFileName print "BACKUP as compressed backupset INCREMENTAL LEVEL $sBkupType FILESPERSET $sSet database" >> $sRmanFileName print "TAG $sTag" >> $sRmanFileName # print "FORMAT '$sDir"$sTargetDb"_"$sBkupType"_%U.bak' database" >> $sRmanFileName fi else print "BACKUP TABLESPACE \"$sTablespace\" FILESPERSET $sSet" >> $sRmanFileName print "TAG $sTag" >> $sRmanFileName # print "FORMAT '$sDir"$sTargetDb"_"$sBkupType"_%U.bak'" >> $sRmanFileName fi # Include the archive log in the backup. if [[ $sPlusArch == "k" ]] then print "PLUS ARCHIVELOG;" >> $sRmanFileName elif [[ $sPlusArch == "r" ]] then print "PLUS ARCHIVELOG DELETE ALL INPUT;" >> $sRmanFileName print "DELETE NOPROMPT FORCE OBSOLETE;" >> $sRmanFileName else print ";" >> $sRmanFileName print "DELETE OBSOLETE;" >> $sRmanFileName fi else print print print print

"SQL 'alter system switch logfile';" >> $sRmanFileName "BACKUP FILESPERSET $sSet " >> $sRmanFileName "FORMAT '$sDir"$sTargetDb"_"$sBkupType"_%U.bak'" >> $sRmanFileName "TAG $sTag" >> $sRmanFileName

if [[ $sBkupType == "a" ]] then if (( iStartSeq > 0 && iEndSeq > 0 )) then print "ARCHIVELOG FROM SEQUENCE $iStartSeq UNTIL SEQUENCE $iEndSeq DELETE INPUT;" >> $sRmanFileName elif (( iStartSeq > 0 )) then print "ARCHIVELOG FROM SEQUENCE $iStartSeq DELETE INPUT;" >> $sRmanFileName elif (( iEndSeq > 0 )) then

print "ARCHIVELOG UNTIL SEQUENCE $iEndSeq DELETE INPUT;" >> $sRmanFileName else print "ARCHIVELOG ALL DELETE INPUT;" >> $sRmanFileName fi else print "ARCHIVELOG LIKE '$s2ndArchDir/arch%' DELETE INPUT;" >> $sRmanFileName fi fi # # # # # #

iCtr=1 while (($iCtr <= $iC)) do print "RELEASE CHANNEL c$iCtr;" >> $sRmanFileName (( iCtr = $iCtr + 1 )) done

print print print print

"RELEASE "RELEASE "RELEASE "RELEASE

CHANNEL CHANNEL CHANNEL CHANNEL

c1;" c2;" c3;" c4;"

>> >> >> >>

$sRmanFileName $sRmanFileName $sRmanFileName $sRmanFileName

print "}" >> $sRmanFileName $CHMOD g+w $sRmanFileName }

fi

# FUNCTION : compressFile # PARAMETERS: None # DESC : Compress RMAN backup files. function compressFile { sCompressFile="" sStr=$($LS -1t $sBackupDir/*.bak) if [[ $sStr != "" ]] then for sFile in $sStr do if [[ -f $sFile ]] then # print "Compressing $sFile" $COMPRESS $sFile if (( $? > 0 )) then iSw=6 sCompressFile="$sCompressFile\nERROR-> Failed to compress file $sFile ..."

fi fi done

fi if (( iSw > 0 )) then errorMsg "$sCompressFile" fi } # FUNCTION : remove_move_file # PARAMETERS: list_of_rman_backup_files # DESC : Moves and removes RMAN disk backup files. function remove_move_file { sFilesToMove=$1 sMoveFile="" sWeekOldDir="$sMoveDir" if [[ $sFilesToMove != "" ]] then if [[ ! -d $sWeekOldDir ]] then errorMsg "Directory $sWeekOldDir not found!!!" fi # Empty the week old backup directory $RM $sWeekOldDir/* 2>/dev/null for sFile in $sFilesToMove do if [[ -f $sFile ]] then # print "$MV $sFile $sWeekOldDir" $MV $sFile $sWeekOldDir if (( $? > 0 )) then iSw=6 sMoveFile="$sMoveFile\nERROR-> Failed to move file $sFile ..." fi fi done fi if (( iSw > 0 )) then errorMsg "$sMoveFile" fi } # FUNCTION : remove_log_files # PARAMETERS: list_of_rman_log_files # DESC : Removes old RMAN log files.

function remove_log_files { sLogFiles=$1 iLogFileCtr=1 sRmFile="" if [[ $sLogFiles != "" ]] then for sFile in $sLogFiles do #print "FILE: $sFile" if [[ -w $sBackupDir/$sFile ]] then # By default there should be not more than 10 log files. if (( iLogFileCtr > iNoOfLogFiles )) then #print "$RM $sBackupDir/$sFile" $RM $sBackupDir/$sFile if (( $? > 0 )) then iSw=6 sRmFile="$sRmFile\nERROR-> Failed to remove file $sFile ..." fi else (( iLogFileCtr = iLogFileCtr + 1 )) fi #print "iLogFileCtr = $iLogFileCtr" fi done fi if (( iSw > 0 )) then errorMsg "$sRmFile" fi } # FUNCTION : checkProcesses # PARAMETERS: None # DESC : Check if the target database process are running. function checkProcesses { typeset -i iSw=4 if (( $($PSEF | $GREP "ora_pmon_$sTargetDb" | $WC -l) > 1 )) then if (( $($PSEF | $GREP "ora_smon_$sTargetDb" | $WC -l) > 1 )) then if (( $($PSEF | $GREP "ora_lgwr_$sTargetDb" | $WC -l) > 1 )) then if (( $($PSEF | $GREP "ora_dbw0_$sTargetDb" | $WC -l) > 1 )) then

if (( $($PSEF | $GREP "ora_ckpt_$sTargetDb" | $WC -l) > 1 )) then iSw=0 fi else iSw=1 fi else iSw=2 fi else iSw=3 fi fi print $iSw

}

# FUNCTION : get_nb_env # PARAMETERS: None # DESC : Use to get the Netbackup enviromental variables function get_nb_env { sNbPolicy=$($ENV | $GREP ^"NB_ORA_POLICY" | $AWK -F= '{print $2}') sNbServer=$($ENV | $GREP ^"NB_ORA_SERV" | $AWK -F= '{print $2}') sNbPCSched=$($ENV | $GREP ^"NB_ORA_PC_SCHED" | $AWK -F= '{print $2}') sNbClient=$($ENV | $GREP ^"NB_ORA_CLIENT" | $AWK -F= '{print $2}') #print #print #print #print

"sNbPolicy "sNbServer "sNbPCSched "sNbClient

= = = =

$sNbPolicy" $sNbServer" $sNbPCSched" $sNbClient"

if [[ $sNbPCSched == "0" ]] then sBkupType="0" elif [[ $sNbPCSched == "1" ]] then sBkupType="1" elif [[ $sNbPCSched == "2" ]] then sBkupType="2" elif [[ $sNbPCSched == "arch" ]] then sBkupType="a" elif [[ $sNbPCSched == "dup" ]] then sBkupType="d" elif [[ $sNbPCSched == "db" ]] then sBkupType="b" else if [[ $sNbPCSched == "" ]] then errorMsg "No NB_ORA_PC_SCHED was passed!!!" else errorMsg "An invalid NB_ORA_PC_SCHED $sNbPCSched was passed!!!" fi fi # Netbackup does tape backup only sDiskTape="t" }

# FUNCTION : getDbConfig # PARAMETERS: database_name # DESC : Gets the db configuration from the db_config.dat file. function getDbConfig { sDb=$1 cSwRec="0" sOraHome="" sUserName="" sUserPwd="" sDbHost="" sDbHostAlias="" sRmanDir="" sMailTo="" sValue="" sParam="" sNbP="" sNbS="" sNbC="" sSBT="" sMoveDir="" sRmanDir1="" #print "sDb = $sDb" for s in $( $CAT $CONFIG_FILE | $GREP -v ^"#") do #print ">>> s = $s " if [[ $s != "" ]] then sParam=$(print $s | $AWK -F= '{print $1}') # Check if the record had already been found. if [[ $sParam == "ORACLE_SID" && $cSwRec == "0" ]] then sValue=$(print $s | $AWK -F= '{print $2}') if [[ $sValue == $sDb ]] then cSwRec="1" #print ">>> sParam = $sParam" #print ">>> sValue = $sValue" continue fi elif [[ $sParam == "ORACLE_SID" && $cSwRec == "1" ]] then # Exit when the record had already been found and # ORACLE_SID parameter had been encountered again. break elif [[ $cSwRec == "1" ]] then sValue=$(print $s | $AWK -F= '{print $2}')

if [[ $sParam = "ORACLE_HOME" ]] then sOraHome=$sValue elif [[ $sParam = "USER_NAME" ]] then sUserName=$sValue elif [[ $sParam = "USER_PWD" ]] then sUserPwd=$sValue # . /orabin/apps/oracle/dbadm/general/bin/.get_pw dba_sup # sUserPwd=$rplc elif [[ $sParam = "DB_HOST" ]] then sDbHost=$sValue elif [[ $sParam = "DB_HOST_ALIAS" ]] then sDbHostAlias=$sValue elif [[ $sParam = "RMAN_DIR" ]] then sRmanDir=$sValue elif [[ $sParam = "RMAN_DIR1" ]] then sRmanDir1=$sValue elif [[ $sParam = "MAIL_TO" ]] then sMailTo="$sMailTo $sValue" elif [[ $sParam = "NB_ORA_SERV" ]] then if [[ $sNbServer = "" ]] then sNbS=$sValue fi elif [[ $sParam = "NB_ORA_POLICY" ]] then if [[ $sNbPolicy = "" ]] then sNbP=$sValue fi elif [[ $sParam = "NB_ORA_CLIENT" ]] then if [[ $sNbClient = "" ]] then sNbC=$sValue fi elif [[ $sParam = "SBT_LIBRARY" ]] then sSBT=$sValue elif [[ $sParam = "MOVE_DIR" ]] then sMoveDir=$sValue else cSwRec="2" break fi fi fi done if [[ $cSwRec == "0" ]] then print "" elif [[ $cSwRec == "2" ]] then print "ERROR" else print "$sOraHome:$sUserName:$sUserPwd:$sDbHost:$sDbHostAlias:$sRmanDir:$sMailTo:$sNbP:$s NbS:$sNbC:$sSBT:$sMoveDir:$sRmanDir1" fi } # FUNCTION : getParam # PARAMETERS: None # DESC : Use the parameters in the past parameter file.

function getParam { sParam="" sValue="" # Check if the parameter file exists. if [[ ! -f $CURR_DIR/$sParamFile ]] then errorMsg "ERROR-> File $CURR_DIR/$sParamFile not found!" fi for s in $( $CAT $CURR_DIR/$sParamFile | $GREP -v ^"#") do #print ">>> s = $s " if [[ $s != "" ]] then sParam=$(print $s | $AWK -F= '{print $1}') sValue=$(print $s | $AWK -F= '{print $2}') if [[ $sValue != "" ]] then if [[ $sParam = "RMAN_DB" ]] then sRmanDb=$sValue elif [[ $sParam = "TARGET_DB" ]] then sTargetDb=$sValue elif [[ $sParam = "BKUP_TYPE" ]] then sBkupType=$sValue elif [[ $sParam = "DISK_TAPE" ]] then sDiskTape=$sValue elif [[ $sParam = "TABLESPACE" ]] then sTablespace=$sValue elif [[ $sParam = "SEND_MAIL" ]] then sSendMail="$sSenMail $sValue" elif [[ $sParam = "NB_POLICY" ]] then sNbPolicy=$sValue elif [[ $sParam = "NB_SERVER" ]] then sNbServer=$sValue elif [[ $sParam = "NB_CLIENT" ]] then sNbClient=$sValue elif [[ $sParam = "STORED_SCRIPT" ]] then sStoredScript=$sValue elif [[ $sParam = "START_SEQ" ]] then iStartSeq=$sValue elif [[ $sParam = "END_SEQ" ]] then iEndSeq=$sValue elif [[ $sParam = "LOG_FILES" ]] then iLogFiles=$sValue elif [[ $sParam = "MOVE_REMOVE" ]] then sMoveRemove=$sValue elif [[ $sParam = "NO_BACKUP" ]] then sNoBackup=$sValue elif [[ $sParam = "OVER_WRITE" ]] then sOverWrite=$sValue elif [[ $sParam = "GET_NB_ENV" ]] then sGetNbEnv=$sValue elif [[ $sParam = "NOT_BACKUP" ]] then sNotBackup=$sValue

elif [[ $sParam = "PLUS_ARCH" ]] then sPlusArch=$sValue elif [[ $sParam = "NOCATALOG" ]] then sNoCatalog=$sValue elif [[ $sParam = "COMPRESS" ]] then sCompress=$sValue else errorMsg "ERROR-> Parameter $sParam is an invalid parameter!" break fi # Check if the correct value was passed. if [[ $sParam = "MOVE_REMOVE" || \ $sParam = "NO_BACKUP" || \ $sParam = "OVER_WRITE" || \ $sParam = "GET_NB_ENV" || \ $sParam = "NOCATALOG" || \ $sParam = "COMPRESS" || \ $sParam = "NOT_BACKUP" ]] then if [[ $sValue != "Y" && $sValue != "y" && $sValue != "" ]] then errorMsg "ERROR-> Parameter $sParam has an invalid value ($sValue)!!!" fi fi fi

fi done

if [[ $sNoCatalog != "Y" ]] then # Check if the required parameters have been passed. if [[ $sRmanDb == "" || $sTargetDb == "" ]] then errorMsg "ERROR-> RMAN_DB and TARGET_DB are mandatory fields!" fi else if [[ $sTargetDb == "" ]] then errorMsg "ERROR-> TARGET_DB is a mandatory fields!" fi fi # If no rman stored script was passed or the default stored # script parameter was passed. if [[ $sStoredScript == "" || $sStoredScript == "d" ]] then # Check if it is a valid BKUP_TYPE value. if [[ $sBkupType != "0" && \ $sBkupType != "1" && \ $sBkupType != "2" && \ $sBkupType != "a" && \ $sBkupType != "d" && \ $sBkupType != "b" && \ $sBkupType != "t" ]] then errorMsg "ERROR-> BKUP_TYPE ($sBkupType) field valid values are 0, 1, 2, a, d, b or t." fi # Check if it is a valid DISK_TAPE value.

if [[ $sDiskTape != "t" && $sDiskTape != "d" ]] then errorMsg "ERROR-> DISK_TAPE field valid values are t or d." fi # Check if it is a valid PLUS_ARCH value. if [[ $sPlusArch != "k" && $sPlusArch != "r" && $sPlusArch != "" ]] then errorMsg "ERROR-> PLUS_ARCH field valid values are k or r." fi fi } ############################################################################## # # Main # ############################################################################## iSw=0 if (( $# >= 2 )) then while getopts r:t:b:a:s:e:v:y:i:c:x:z:l:w:p:mnogduq option do case $option in r) sRmanDb=$OPTARG;; t) sTargetDb=$OPTARG;; b) sBkupType=$OPTARG;; a) sDiskTape=$OPTARG;; s) sTablespace=$OPTARG;; e) sSendMail=$OPTARG;; y) sNbPolicy=$OPTARG;; v) sNbServer=$OPTARG;; i) sNbClient=$OPTARG;; c) sStoredScript=$OPTARG;; x) iStartSeq=$OPTARG;; z) iEndSeq=$OPTARG;; l) iLogFiles=$OPTARG;; w) sParamFile=$OPTARG;; p) sPlusArch=$OPTARG;; m) sMoveRemove="Y";; n) sNoBackup="Y";; o) sOverWrite="Y";; g) sGetNbEnv="Y";; d) sNotBackup="Y";; u) sNoCatalog="Y";; q) sCompress="Y";; *) print "ERROR-> $sScriptName: unknown option $OPTARG" scriptUsage;; esac done if [[ $sParamFile != "" ]] then getParam

fi # Check if backup will be done with NOCATALOG option. if [[ $sNoCatalog != "Y" ]] then if [[ $sRmanDb == "" || $sTargetDb == "" ]] then scriptUsage fi else if [[ $sTargetDb == "" ]] then scriptUsage fi #if [[ $sDiskTape != "d" && $sStoredScript == "" ]] then # errorMsg "ERROR-> Only disk backup is supported by NOCATALOG option!" #fi fi if [[ $sGetNbEnv == "Y" ]] then get_nb_env fi # If no RMAN command script was passed or the default stored # script parameter was passed. if [[ ($sStoredScript == "" || $sStoredScript == "d") && $sBkupType == "" ]] then scriptUsage fi # Check if it is a valid PLUS_ARCH value. if [[ $sPlusArch != "k" && $sPlusArch != "r" && $sPlusArch != "" ]] then errorMsg "ERROR-> valid -p parameter values are k or r." fi # # Validate and get the oracle home, user and password. # if [[ -f $CONFIG_FILE ]] then # Validate the target database name sStr=$(getDbConfig $sTargetDb) if [[ $sStr == "" ]] then errorMsg "ERROR-> Target db name $sTargetDb is an invalid db name!" elif [[ $sStr == "ERROR" ]] then errorMsg "ERROR-> An invalid parameter was found in $CONFIG_FILE file!!!" else ORACLE_HOME=$(print $sStr | $AWK -F: '{print $1}') sTargetUser=$(print $sStr | $AWK -F: '{print $2}') sPwdTarget=$(print $sStr | $AWK -F: '{print $3}') sBackupDir=$(print $sStr | $AWK -F: '{print $6}') sMail=$(print $sStr | $AWK -F: '{print $7}') sSbtLib=$(print $sStr | $AWK -F: '{print $11}') sMoveDir=$(print $sStr | $AWK -F: '{print $12}') sBackupDir1=$(print $sStr | $AWK -F: '{print $13}') # Get the Netbackup enviromental variables only # if the variables where not passed by Netbackup. if [[ $sGetNbEnv == "" ]] then

sNbPolicy=$(print $sStr | $AWK -F: '{print $8}') sNbServer=$(print $sStr | $AWK -F: '{print $9}') sNbClient=$(print $sStr | $AWK -F: '{print $10}') fi # Check if the backup directory exists. if [[ ! -d $sBackupDir ]] then errorMsg "ERROR-> Backup directory $sBackupDir not found!!!" fi # Check if the ORACLE_HOME directory exists. if [[ ! -d $ORACLE_HOME ]] then errorMsg "ERROR-> ORACLE_HOME directory $ORACLE_HOME not found!!!" fi # Check if the SBT_LIBRARY was passed if [[ $sSbtLib != "" ]] then if [[ ! -f $sSbtLib ]] then errorMsg "ERROR-> SBT_LIBRARY file $sSbtLib not found!!!" fi fi fi # If it is NOCATALOG backup don't check the RMAN Db. if [[ $sNoCatalog != "Y" ]] then # Validate recovery catalog database name sStr=$(getDbConfig $sRmanDb)

file!!!"

if [[ $sStr == "" ]] then errorMsg "ERROR-> RMAN db name $sRmanDb is an invalid db name!" elif [[ $sStr == "ERROR" ]] then errorMsg "ERROR-> An invalid parameter was found in $CONFIG_FILE

else sRmanUser=$(print $sStr | $AWK -F: '{print $2}') sPwdRman=$(print $sStr | $AWK -F: '{print $3}') fi fi else errorMsg "ERROR-> Configuration file $CONFIG_FILE not found!!!" fi # If no RMAN command script was passed or the default stored # script should be use. if [[ $sStoredScript == "" || $sStoredScript == "d" ]] then if [[ $sDiskTape == "t" ]] then sDiskTape="'SBT_TAPE'" if [[ $sNbPolicy != "" || $sNbServer != "" ]] then if [[ $sNbPolicy == "" || $sNbServer == "" ]] then errorMsg "Tape Netbackup policy and master server most be supplied!!!" else if [[ $sSbtLib != "" ]] then sParms="parms=\"SBT_LIBRARY=$sSbtLib," sParms="$sParms ENV=(NB_ORA_POLICY="$sNbPolicy",

NB_ORA_SERV="$sNbServer else sParms="parms=\"ENV=(NB_ORA_POLICY="$sNbPolicy", NB_ORA_SERV="$sNbServer fi if [[ $sNbClient != "" ]] then sParms="$sParms, NB_ORA_CLIENT="$sNbClient fi sParms="$sParms)\";" fi else sParms=";" fi elif [[ $sDiskTape == "d" ]] then sDiskTape="DISK" sParms=";" else scriptUsage fi if [[ $sNoCatalog != "Y" ]] then sCommand="$sScriptName -r $sRmanDb -t $sTargetDb -b $sBkupType ..." else sCommand="$sScriptName -t $sTargetDb -b $sBkupType ..." fi fi else scriptUsage fi # # Check if the target db is available. # # if (( $(checkProcesses) > 0 )) # then # errorMsg "Database $sTargetDb is not available." # fi export NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS" export ORACLE_SID=$sTargetDb export ORACLE_HOME export TNS_ADMIN=$ORACLE_HOME/network/admin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/ucblib:/opt/bin:/bin:/usr/bin export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_BASE/local/bin:$HOME/bin:/usr/bin:/usr/sbin:/b in:. sTargetUser="/" sRmanUser=$sRmanUser/$sPwdRman #print "sTargetUser = $sTargetUser" #print "sRmanUser = $sRmanUser"

RMAN="$ORACLE_HOME/bin/rman" #sErrFile=$sBackupDir/$sFileNames.err if [[ $sBkupType $sBkupType $sBkupType $sBkupType $sBkupType $sBkupType $sBkupType then

== == == == == == ==

"0" "1" "2" "a" "t" "b" "d"

|| || || || || || ]]

\ \ \ \ \ \

if [[ $sBkupType == "a" ]] then if (( iEndSeq > 0 && iStartSeq > iEndSeq )) then errorMsg "ERROR-> Archivelog start sequence ($iStartSeq) should be less than or equal to the end sequence ($iEndSeq) !!!" fi fi if [[ $sBkupType = "t" && $sTablespace = "" ]] then errorMsg "ERROR-> Tablespace backup should have a tablespace name!!!" fi if [[ $sBkupType == "d" ]] then # Assuming the archivelog secondary directory path is correct. # (i.e. /gcw01/app/oracle/admin/dup_arch/GCW) s2ndArchDir=${ORACLE_HOME%%/product/*}"/admin/dup_arch/$sTargetDb" if [[ ! -d $s2ndArchDir ]] then errorMsg "ERROR-> Archivelog directory $s2ndArchDir not found!!!" fi fi if [[ $sDiskTape == "DISK" ]] then createScript 3 1 4 if [[ $sMoveRemove == "Y" ]] then sMoveFiles=$($LS -1 $sBackupDir/*.bak) echo $sMoveFiles echo $sBackupDir if [[ $sBkupType == "0" && $sMoveRemove == "Y" ]] then remove_move_file "$sMoveFiles" echo $sMoveRemove fi fi else createScript 3 16 4 fi elif [[ $sStoredScript != "" && $sStoredScript != "d" ]] then #csRmanFileName=$sBackupDir/$sStoredScript".cmd" sRmanFileName=$sBackupDir/$sStoredScript

#if [[ -f $sRmanFileName && $sOverWrite == "" ]] then # errorMsg "ERROR(6)-> File $sRmanFileName found aborting backup..." #fi # print "run {EXECUTE SCRIPT $sStoredScript;}" > $sRmanFileName if [[ ! -f $sRmanFileName ]] then errorMsg "ERROR(6)-> File $sRmanFileName not found, aborting backup..." fi if [[ $sNoCatalog != "Y" ]] then sCommand="$sScriptName -r $sRmanDb -t $sTargetDb -c $sStoredScript ..." else sCommand="$sScriptName -t $sTargetDb -c $sStoredScript ..." fi sBkupType="s" else errorMsg "ERROR-> Invalid command parameter: $sBkupType" fi # Number of RMAN log files to retain passed. if (( iLogFiles > 0 )) then iNoOfLogFiles=$iLogFiles fi sMsgLog=$sBackupDir/$sTargetDb"_"$sBkupType"_bkup."$($DATE +%Y%m%d_%H%M%S)".log" # # #

Execute the RMAN command file.

if [[ -f $sRmanFileName ]] then # Don't do any backup if sNoBackup = Y if [[ $sNoBackup == "" ]] then if [[ $sNoCatalog != "Y" ]] then $RMAN msglog=\'$sMsgLog\' append catalog=\'$sRmanUser@$sRmanDb\' \ target=\'$sTargetUser\' cmdfile=\'$sRmanFileName\' iSw=$? else $RMAN msglog=\'$sMsgLog\' append \ target=\'$sTargetUser\' cmdfile=\'$sRmanFileName\' iSw=$? fi fi else errorMsg fi

"ERROR(6)-> File $sRmanFileName not found aborting backup..."

if (( iSw > 0 )) then errorMsg "ERROR($iSw)-> failed to execute: $sCommand" fi # # Delete the rman command file # # Don't delete the command file if sNoBackup = Y if [[ -f $sRmanFileName && $sNoBackup == "" && \ ($sStoredScript == "" || $sStoredScript == "d") ]] then $RM $sRmanFileName fi # # Check if the an email should be sent when the backup is successful. # if [[ $sSendMail != "" ]] then # Check if the email address in the db_config.dat file should be used. if [[ $sSendMail == "p" ]] then sSendMail=$sMail fi print "$sDiskTape Bakup Successful: $sCommand" | $MAILX -s "Backup Successfull on $sTargetDb($sHostName)" $sSendMail fi # # Compress disk backup files # if [[ $sTag $sDiskTape $sNoBackup $sCompress then compressFile fi

!= == == ==

"" && \ "DISK" && \ "" && \ "Y" ]]

# # Remove old backup and move previous bakup to the week old backup directory. # Moved below create script #if [[ $sBkupType == "0" && $sMoveRemove == "Y" ]] then # remove_move_file "$sMoveFiles" #fi # # Remove old rman log files. # sStr=""

sStr=$($LS -1t "$sBackupDir" | $GREP ^"$sTargetDb" | $GREP ".log" ) remove_log_files "$sStr" exit 0 fi

Related Documents

Rman
November 2019 17
Rman
May 2020 9
Rman
June 2020 9
Rman - Doc
November 2019 17
Rman Bkup.sh
April 2020 8
Oracle Rman
December 2019 14

More Documents from ""