Skip to content

Instantly share code, notes, and snippets.

@sravanrox
Created September 13, 2016 23:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sravanrox/7bbef3f96883334892c1dafb73c858ee to your computer and use it in GitHub Desktop.
Save sravanrox/7bbef3f96883334892c1dafb73c858ee to your computer and use it in GitHub Desktop.
Archive log backup for ASM DB's
#!/bin/sh
CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`
DATE=`/bin/date +%m%d%Y%H%M%S`
DOW=`date +%A | tr -s '[:upper:]' '[:lower:]'`
HOME=/home/oracle/
LOG=${HOME}/logs
sqlfile="${HOME}/check_rman.sql"
spoolfile="${HOME}/rman_list.txt"
ORACLE_SID=+ASM2
ORACLE_HOME=/u01/app/11.2.0.4/grid
LD_LIBRARY_PATH_64=$ORACLE_HOME/lib
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_SID
export ORACLE_HOME
export LD_LIBRARY_PATH_64
export LD_LIBRARY_PATH
page_dba=xxx@gmail.com
echo "ORACLE_SID=$ORACLE_SID"
echo "ORACLE_HOME=$ORACLE_HOME"
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
SQLPLUS=$ORACLE_HOME/bin/sqlplus
ORAENV_ASK=NO
echo "started `date`"
SIZE=`/home/oracle/shell/asm_arch_size_check.sh`
MB=`echo $SIZE | awk '{printf ("%s\n",$4) }'`
echo "$MB"
if [ $MB -ge 200000 ]
then
echo "Over the target of 200000 MB"
echo "start the Archive log backup"
else
echo "Did not hit the max usage specified. bye"
exit
fi
ORACLE_SID=dbname
ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1
export ORACLE_SID
export ORACLE_HOME
#-----------------------------------------------------------------
## Check DB online status
#----------------------------------------------------------------
#
pchk=`ps -ef |grep pmon |grep $ORACLE_SID |grep -v grep |wc -l`
if [ $pchk -eq 0 ]
then
echo "DB is offline bye."
exit
fi
#-----------------------------------------------------------------
# Check for other active rman backup process
#-----------------------------------------------------------------
pcnt=`ps -ef |grep rman |grep -v grep |wc -l`
if [ $pcnt -gt 0 ]
then
echo "Other Rman process is running. bye"
exit
fi
echo "set echo off" > $sqlfile
echo "set pages 0" >> $sqlfile
echo "set feedback off" >> $sqlfile
echo "set lines 80" >> $sqlfile
echo "spool ${spoolfile}" >> $sqlfile
echo "select A.USERNAME,A.PROGRAM" >> $sqlfile
echo "from gv\$session A , gv\$sql B" >> $sqlfile
echo "where A.PREV_SQL_ID = B.sql_id and A.inst_id = B.inst_id" >> $sqlfile
echo "and A.program like 'rman%';" >> $sqlfile
echo "spool off" >> $sqlfile
echo "exit" >> $sqlfile
$SQLPLUS "/ as sysdba" @$sqlfile
chk=`cat $spoolfile | wc -l`
if [ $chk -gt 0 ]
then
echo "Other Rman process is running in other node. bye"
rm $spoolfile
rm $sqlfile
exit
fi
rm $spoolfile
rm $sqlfile
RMAN_LOG_FILE=${LOG}/dbname_archive_backup.sh.${DATE}.out
if [ -f "$RMAN_LOG_FILE" ]
then
rm -f "$RMAN_LOG_FILE"
fi
echo >> $RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
ORACLE_USER=oracle
TARGET_CONNECT_STR=/
RMAN=$ORACLE_HOME/bin/rman
echo >> $RMAN_LOG_FILE
echo "RMAN: $RMAN" >> $RMAN_LOG_FILE
echo "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE
echo "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE
echo "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
CMD_STR="
$RMAN target / msglog $RMAN_LOG_FILE append << EOF
run
{
#allocate channel ch01 type disk format '+RECO_DG';
crosscheck archivelog all;
backup as compressed backupset archivelog all delete input;
#RELEASE CHANNEL ch01;
}
EOF
"
# Initiate the command string
echo "$CMD_STR" >> $RMAN_LOG_FILE
if [ "$CUSER" = "root" ]
then
echo " dbname archive backup job start at `/bin/date`" | mail -s " dbname archive Backup Notification" $page_dba
su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE
RSTAT=$?
else
echo " dbname archive backup job start at `/bin/date`" | mail -s " dbname archive Backup Notification" $page_dba
sh -c "$CMD_STR" >> $RMAN_LOG_FILE
RSTAT=$?
fi
# ---------------------------------------------------------------------------
# Log the completion of this script.
# ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ]
then
LOGMSG="ended successfully"
echo " dbname archive backup completed Successfully end`/bin/date`" | mail -s " dbname archive END Backup Notification: SUCCESS" $page_dba
else
echo " dbname archive backup Failed please contact DBA immediately `/bin/date`" | mail -s " dbname archive END Backup Notification: FAILED" $page_dba
LOGMSG="ended in error"
fi
echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
echo "Sync with recovery catalog"
$RMAN target / catalog user/password@catalog msglog $RMAN_LOG_FILE append << EOF
resync catalog;
EOF
exit $RSTAT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment