#!/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