Guest User

Untitled

a guest
Sep 19th, 2012
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.11 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Script to synchronize Pandium's Oracle archives from Orion's
  4. # flash_recovery_area. It is meant to be called continously from
  5. # a cron job, under the "oracle" user. The script makes sure that
  6. # only one sync job runs at a time - in case of previous job still
  7. # running. It also logs everything to /$LOG_DIR/$BASENAME/$DATE.log.
  8.  
  9. # Constants/configs
  10. LOG_DIR="/logs"
  11. LOCK_DIR="/tmp"
  12.  
  13. # Internal timekeeping/bookkeeping
  14. DATE=$(date +"%Y-%m-%d")
  15. TIME=$(date +"%H:%M:%S")
  16. TIMER_BEFORE=$(date +"%s")
  17.  
  18. FILENAME=`basename $0`
  19. BASENAME=${FILENAME%\.*}
  20. LOCKFILE="${LOCK_DIR}/${BASENAME}.lock"
  21. LOGFILE_PATH="${LOG_DIR}/${BASENAME}"
  22. LOGFILE="$LOGFILE_PATH/${DATE}.log"
  23.  
  24. # Make sure LOGFILE_PATH exists, so we can write a log file in this directory
  25. if [[ ! -e $LOGFILE_PATH ]]; then
  26.     mkdir $LOGFILE_PATH
  27. fi
  28.  
  29. echo "--------------------------------------------------------" >> $LOGFILE
  30.  
  31. # Check if there's a lockfile created by previous script invocation
  32. if [ -e $LOCKFILE ]; then
  33.     # If so, old job is still running, so we do nothing and let it finish
  34.         echo "${TIME} Synchronization of /flash_recovery_area already running, aborting!" >> $LOGFILE
  35. else
  36.     # No old instance running, so we're free to apply new archives
  37.         echo "${TIME} Synchronization of /flash_recovery_area starting..." >> $LOGFILE
  38.        
  39.     # Create lock file, so we ensure only one instance runs
  40.     echo 1 > $LOCKFILE
  41.  
  42.     # Check if we have mounted Orions flash recovery area
  43.     if mount | grep -q '//orion.domain.com/flash_recovery_area/PROD/archivelog'; then
  44.         echo "Files already accessable at mount-point!" >> $LOGFILE        
  45.     else
  46.         # Mount Orions flash recovery area
  47.         echo "No mount detected, mounting now!" >> $LOGFILE
  48.             mount /backup/oracle/flash_recovery_area/FROM_PROD/archivelog &>> $LOGFILE
  49.  
  50.         sleep 1
  51.  
  52.         # Enter a wait loop until we have access to the new mount
  53.         while ls /backup/oracle/flash_recovery_area/FROM_PROD/archivelog/* | grep -q 'cannot access' ;
  54.         do
  55.             sleep 1
  56.             echo "Waiting for data to show up at mount-point..." >> $LOGFILE
  57.             done
  58.             echo "Files now accessable at mount-point!" >> $LOGFILE
  59.     fi
  60.     export ORACLE_SID=prod
  61.     export ORACLE_HOME=/oracle/app/oracle/product/10.2.0/db_1
  62.     $ORACLE_HOME/bin/rman cmdfile=/scripts/rman_recover_database.rcv >> $LOGFILE
  63.    
  64.     # Ensure our latest symlink is up to date
  65.     if [[ -e ${LOGFILE_PATH}/latest.log ]]; then
  66.         rm ${LOGFILE_PATH}/latest.log -f
  67.     fi
  68.     ln -s ${LOGFILE} ${LOGFILE_PATH}/latest.log
  69.  
  70.     # We're done synchronizing, so it's Ok to remove lock file
  71.     rm -f $LOCKFILE
  72.  
  73.     TIMER_AFTER=$(date +"%s")
  74.     DIFF=$(($TIMER_AFTER-$TIMER_BEFORE))
  75.     DIFF_STRING="$(($DIFF / 60))m $(($DIFF % 60))s"
  76.     TIME=$(date +"%H:%M:%S")
  77.         echo "${TIME} Done synchronizing. Took ${DIFF_STRING}." >> $LOGFILE
  78.  
  79.     # Make sure that any log file older than a week is added to long-term log archive
  80.     find ${LOGFILE_PATH}/*.log -type f -mtime +6 | xargs tar rvf ${LOGFILE_PATH}/archive.tar > /dev/null 2>&1
  81.  
  82.     # Delete the discrete log file we just added to long-term log archive
  83.     find ${LOGFILE_PATH}/*.log -type f -mtime +6 -delete >/dev/null 2>&1
  84. fi
Advertisement
Add Comment
Please, Sign In to add comment