#!/bin/ksh # ==================================================================================================== # Title: RMAN_ARCH_Backup.ksh # Author: Richard Wilson # Date: 09.02.2015 # Description: Backup Archivelogs. # Usage: RMAN_ARCH_Backup.ksh <$ORACLE_SID> # # History: # 09.02.2015 RW First version. # # ---------------------------------------------------------------------------------------------------- function is_sid_valid { if [ `ps -ef | grep -v grep | grep "ora_pmon_${ORACLE_SID}$" | wc -l 2> /dev/null` -eq 0 ] then return 1 else return 0 fi } function is_fs_mounted { mount | grep "${BACKUP_FS}" > /dev/null && return 0 || return 1 } build_cmdfile() { # Build RMAN command file. echo "connect target / " > ${RMAN_CMD_FILE} echo "" >> ${RMAN_CMD_FILE} echo "run {" >> ${RMAN_CMD_FILE} echo "sql 'ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME=60 SCOPE=BOTH';" >> ${RMAN_CMD_FILE} echo "CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF ${SAVE_DAYS} DAYS;" >> ${RMAN_CMD_FILE} # echo "CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO disk APPLIED ON ALL STANDBY;" >> ${RMAN_CMD_FILE} echo "CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO disk;" >> ${RMAN_CMD_FILE} echo "CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_${ORACLE_SID}.f';" >> ${RMAN_CMD_FILE} echo "CONFIGURE CONTROLFILE AUTOBACKUP ON;" >> ${RMAN_CMD_FILE} echo "CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 4;" >> ${RMAN_CMD_FILE} echo "CROSSCHECK backup of database;" >> ${RMAN_CMD_FILE} echo "CROSSCHECK backup of controlfile;" >> ${RMAN_CMD_FILE} echo "CROSSCHECK archivelog all;" >> ${RMAN_CMD_FILE} echo "sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';" >> ${RMAN_CMD_FILE} echo "backup as compressed backupset TAG='Arch_${ORACLE_SID}_`date +%d%m%YT%H%M%S`' archivelog all delete input;" >> ${RMAN_CMD_FILE} # echo "backup as compressed backupset TAG='Arch_${ORACLE_SID}_`date +%d%m%YT%H%M%S`' archivelog UNTIL TIME 'sysdate-1/24' delete all input;" >> ${RMAN_CMD_FILE} # echo "backup as compressed backupset archivelog all delete input;" >> ${RMAN_CMD_FILE} echo "DELETE FORCE NOPROMPT OBSOLETE;" >> ${RMAN_CMD_FILE} echo "}" >> ${RMAN_CMD_FILE} echo "exit" >> ${RMAN_CMD_FILE} } build_backup_cmdfile() { # Build RMAN command file. echo "connect target / " > ${RMAN_BACKUPSET_SCRIPT} echo "run {" >> ${RMAN_BACKUPSET_SCRIPT} echo "backup backupset completed after \"TO_DATE('${BACKUP_DATE}','DD-MM-YYYY HH24:MI')\" format '${BACKUP_FS}/${ORACLE_SID}/%U';" >> ${RMAN_BACKUPSET_SCRIPT} echo "}" >> ${RMAN_BACKUPSET_SCRIPT} echo "exit" >> ${RMAN_BACKUPSET_SCRIPT} } export ORACLE_SID=${1} export SAVE_DAYS=${2} export ORACLE_HOME="/u01/app/oracle/product/11.2.0/dbhome_1" export SCRIPT_DIR="/home/oracle/Scripts/RMAN" export RMAN_CMD_FILE=${SCRIPT_DIR}/${ORACLE_SID}_rman_ARCH_cmds.rman export RMAN_BACKUPSET_SCRIPT=${SCRIPT_DIR}/${ORACLE_SID}_rman_arch_backup_cmds.rman export BACKUP_DATE=`date "+%d-%m-%Y %R"` export BACKUP_FS="/backups" export BACKUP_LOG=${SCRIPT_DIR}/logs/${ORACLE_SID}_backup_ARCH.log if [ ${#} -eq 2 ] then ORACLE_SID=`echo ${ORACLE_SID} | tr "[a-z]" "[A-Z]"` if is_sid_valid then if [[ "$2" = +([0-9]) ]] then build_cmdfile build_backup_cmdfile ${ORACLE_HOME}/bin/rman cmdfile=${RMAN_CMD_FILE} log=${BACKUP_LOG} if [ $? = 0 ] then if is_fs_mounted then # build_backup_cmdfile ${ORACLE_HOME}/bin/rman cmdfile=${RMAN_BACKUPSET_SCRIPT} else BACKUP_OUTCOME="WARNING" echo -e "${BACKUP_OUTCOME}: Backup filesystem not mounted....." > ${BACKUP_LOG} fi else BACKUP_OUTCOME="ERROR" echo -e "${BACKUP_OUTCOME}: ${ORACLE_SID} Database Archivelog Backup Failed." > ${BACKUP_LOG} fi else echo "ERROR: The Retention Period must be numeric, in days!" fi else echo "ERROR: The '${ORACLE_SID}' database does not exist." fi else echo -e "\nUsage: RMAN_DB_arch_backup.ksh \n" fi # End of File