#!/bin/ksh ############################################################################## # File Name: double_archieve.sh # # Usage: Run it from crontab 6 times an hour: # # su - SIDadm -c "/sapglobal/SHELL/ARCHIVE/doublearchive.sh" >/dev/null 2>&1 # # Description: Usually the weekly backup tapes are transferred to a remote # site, but the current offline redo logs are not. In case of a # local disaster, rolling forward becomes impossibble, because # both the database and the locally stored tapes get destroyed. # This script provides a protection against this situation # by automatically sending to and circulating the archive logs # on a remote machine. # This script runs on the local machine. It archives the offline # redos locally and sends them to the remote machine as well. # After sucessfuly archiving and copying them, it deletes # the redo logs. Once a day it removes the old local brarchive # logs too. # # Dependencies: Requires brarchive V4.5 # SIDadm has to exist on the remote host # The local SIDadm has to be a trusted user on the remote machine # A second brarchive par. file is needed for the remote copy on # the local machine containing: # # archive_copy_dir = /oracle/SID/saparch # remote_host = remote_host_name ############################################################################## sid=SID ORACLE_SID=$sid;export ORACLE_SID ORACLE_HOME=/oracle/$sid;export ORACLE_HOME # brarchive=/sapmnt/$sid/exe/brarchive prof=/oracle/$sid/dbs/remotecopy.sap pwd=system/dbajan tlog=/sapglobal/LOG/ARCHIVE/temp_log plog=/sapglobal/LOG/ARCHIVE/permanent_log lockfile=/sapglobal/LOG/ARCHIVE/doublearchive_lockfile pat=successfully # hour_minute=`date "+%H%M"` cleanup_time=1200 brarchive_log_dir=$ORACLE_HOME/saparch remove_dayold=2 # # Handle the signals # trap "clean_and_exit" 1 2 3 15 25 clean_and_exit () { rm -f $lockfile echo "Interrupt signal received - exiting" >> $plog exit 0 } # # Check if another instance of double_archive is running # if [ -f $lockfile ]; then echo "Already running - exiting" >> $plog exit 0 fi touch $lockfile # date >> $plog # # Archive the archive logs # a=`$brarchive -d disk -s -c -u $pwd|tee $tlog|grep $pat` if [ "$a" = "" ] ; then echo Failed to stop archive the remaining files, exiting >> $plog rm -f $lockfile exit 0 else cat $tlog|grep "#SAVED"|awk '{printf(" Local archiving:%s\n",$2)}' >> $plog fi # # Copy the archive logs to the remote machine # a=`$brarchive -d stage -s -c -u $pwd -p $prof|tee $tlog|grep $pat` if [ "$a" = "" ] ; then echo Failed to copy the arhive files to the remote machine, exiting >> $plog rm -f $lockfile exit 0 else cat $tlog|grep "#SAVED"|awk '{printf(" Remote copy: %s\n",$2)}' >> $plog fi # # Remove the archive logs that has been sucessfully archived and copied # a=`$brarchive -d disk -ds -c -u $pwd|tee $tlog|grep $pat` if [ "$a" = "" ] ; then echo Failed to delete the double saved archive logs, exiting >> $plog rm -f $lockfile exit 0 else cat $tlog|grep BR015I|awk '{printf(" Deleting: %s\n",$6)}' >> $plog fi # # Once a day remove the old brbackup log files # if [ $hour_minute = $cleanup_time ]; then echo Removing the old brarchive log files >> $plog find $brarchive_log_dir -name "*.dsv" -ctime +$remove_dayold -exec rm -f {} \; find $brarchive_log_dir -name "*.sve" -ctime +$remove_dayold -exec rm -f {} \; find $brarchive_log_dir -name "*.fst" -ctime +$remove_dayold -exec rm -f {} \; fi # rm -f $lockfile