Hi Seema, I use this script. I have added comments so
it should not be difficult to understand. Let me know
if you need any clarification:
the usage is --> exec_restore.ksh -d [SID] -f
[rman_cmdfile]
Deepak
PS: i have not included command file as i think
probably need only the wrapper.
#!/usr/bin/ksh
#set -xv
#################################################################################
#
#
# TITLE : exec_restore.ksh #
#
#
# REQUIREMENT : Define $LOG_BASE directory to
specify Log Location #
#
#
# PARAMETERS : -d specifies the SID of the target
database to restore #
# -f specifies the command file for
RMAN Restore #
#
#
# USAGE : exec_rman.ksh [-d SID] [-f
command_file] #
#
#
# OUTPUTS : Returns a -1 value if it encounters
an error else returns 0 #
#
#
# DESCRIPTION : This script serves as a wrapper for
invoking RMAN interface #
# and as such performs following tasks
: #
# - Validate arguments passed in
from command line #
# - Define Notification List and
add email id's of DBA's #
# - Abort if restore is already
in progress for SID passed#
# - Performs restore using RMAN
interface #
# - Checks log files and sends
appropriate notifications #
#
#
#################################################################################
#
*******************************************************************************
# *
*
# * DEFINE LOG FILES AND SPECIFY DEFAULT LOCATION FOR
$LOGBASE *
# *
*
#
*******************************************************************************
sync;sync;sync
export LOG_BASE=
export LOG_BASE=/opt/oracle/product/admin/sql/rman/log
export EXECRMAN_LOG=$LOG_BASE/exec_restore.ksh.`date
+%m.%d.%Y:%H:%M:%S`.log
export
WORKFILE_MULTI_CALLS=$LOG_BASE/rman_multi_call_detector.$$.log
export WORKFILE_LOGFILE=$LOG_BASE/rman_logfile.`date
+%m.%d.%Y:%H:%M:%S`.log
touch $EXECRMAN_LOG # Main Wrapper LogFile
touch $WORKFILE_LOGFILE # RMAN Generated Batch
LogFile
touch $WORKFILE_MULTI_CALLS # Multi Invoke Detect
Mechanism
#
*******************************************************************************
# *
*
# * DEFINE NOTIFICATION LIST (comma separated)
*
# *
*
#
*******************************************************************************
RMAN_NOTIFY='[EMAIL PROTECTED],[EMAIL PROTECTED]'
#
*******************************************************************************
# *
*
# * DEFINE USAGE FOR SCRIPT AND GENERIC VARIABLES
*
# *
*
#
*******************************************************************************
HOSTID=`hostname`
#Host Identity
SENDALERT=/usr/bin/mailx
#Mailing Interface
export ORATAB=/var/opt/oracle/oratab
#Oratab Location
USAGE="\nUsage: $0 [-d SID] [-f rman_cmdfile]\n"
#Usage of Wrapper
#
*******************************************************************************
# *
*
# * ACCEPT AND VALIDATE COMMAND-LINE ARGUMENTS
*
# *
*
#
*******************************************************************************
while getopts :d:f: arguments
do
case $arguments in
d)
RMAN_TARGSID=$OPTARG
;;
f)
RMAN_CMDFILE=$OPTARG
;;
\?)
print "\n$OPTARG is not a valid argument"
print $USAGE
exit -1
esac
done
#
*******************************************************************************
# *
*
# * VERIFY THAT A DATABASE INSTANCE WAS GIVEN AS AN
ARGUMENT AND IS VALID *
# *
*
#
*******************************************************************************
if [ "$RMAN_TARGSID" = "" ]; then
print $USAGE
exit -1
fi
grep -i "^$RMAN_TARGSID:" $ORATAB > /dev/null 2>&1
if [ $? != 0 ]; then
print "\nTarget Database $RMAN_TARGSID is not
valid"
print $USAGE
exit -1
fi
#
*******************************************************************************
# *
*
# * VERIFY THAT A READABLE COMMAND FILE WAS GIVEN AS
AN ARGUMENT *
# *
*
#
*******************************************************************************
if [ "$RMAN_CMDFILE" = "" ]; then
print $USAGE
exit -1
fi
if [ ! -r $RMAN_CMDFILE ]; then
print "\nSuppplied Command File $RMAN_CMDFILE is
not valid"
print $USAGE
exit -1
fi
#
*******************************************************************************
# *
*
# * SOURCE IN ORACLE/RMAN ENVIRONMENT VARIABLES
*
# *
*
#
*******************************************************************************
export ORACLE_USER=oracle
export ORACLE_SID=$RMAN_TARGSID
export ORACLE_HOME=/opt/oracle/product/816
export PATH=$ORACLE_HOME/bin:$PATH
export
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=american
export NLS_DATE_FORMAT='Mon DD YYYY HH24:MI:SS'
#
********************************************************************************
# *
*
# * EXIT ON DETECTION OF OTHER RUNNING COPIES OF
CURRENT SCRIPT FOR SAME SID *
# *
*
#
********************************************************************************
#ps -ef | grep exec_restore.ksh | grep $RMAN_TARGSID |
grep -v grep | grep -v "sh -c" | grep -v $$ >
$WORKFILE_MULTI_CALLS 2>&1
ps -ef | grep $0 | grep $RMAN_TARGSID | grep -v grep |
grep -v "sh -c" | grep -v $$ > $WORKFILE_MULTI_CALLS
2>&1
if [ $? = 0 ]; then # Found Another Instance Running
echo >> $WORKFILE_MULTI_CALLS
echo "Restore Currently Going on $HOSTID for
$ORACLE_SID. Aborting ..." >> $WORKFILE_MULTI_CALLS
RMAN_SUBJECT="$HOSTID RMAN Aborted - Restore in
Progress FOR $ORACLE_SID"
cat $WORKFILE_MULTI_CALLS | $SENDALERT -s
"$RMAN_SUBJECT" -n $RMAN_NOTIFY
exit -1
fi
rm $WORKFILE_MULTI_CALLS > /dev/null 2>&1
#
*******************************************************************************
# *
*
# * SEND OUTPUT HEADER / START TIME / RESTORE CMDFILE
TO MAIN WRAPPER LOG *
# *
*
#
*******************************************************************************
START_DATE=$(date)
echo
"**********************************************************"
>> $EXECRMAN_LOG
echo "$0 Run on $(date)"
>> $EXECRMAN_LOG
echo "attempting to restore on $HOSTID for
$ORACLE_SID" >> $EXECRMAN_LOG
echo
"**********************************************************"
>> $EXECRMAN_LOG
echo
>> $EXECRMAN_LOG
echo
>> $EXECRMAN_LOG
echo "Contents of CMDFILE: $RMAN_CMDFILE"
>> $EXECRMAN_LOG
echo
>> $EXECRMAN_LOG
cat $RMAN_CMDFILE
>> $EXECRMAN_LOG
#
*******************************************************************************
# *
*
# * Launch RMAN Restore COMMANDS
*
# *
*
#
*******************************************************************************
echo
>> $EXECRMAN_LOG
echo "LAUNCHING RMAN RESTORE JOB .."
>> $EXECRMAN_LOG
echo
>> $EXECRMAN_LOG
$ORACLE_HOME/bin/rman cmdfile $RMAN_CMDFILE log
$WORKFILE_LOGFILE
STATUS=$?
#
*******************************************************************************
# *
*
# * SEND RMAN LOG and RESTORE COMPLETION TIME TO MAIN
WRAPPER LOG *
# *
*
#
*******************************************************************************
echo >> $EXECRMAN_LOG
cat $WORKFILE_LOGFILE >> $EXECRMAN_LOG
echo >> $EXECRMAN_LOG
echo "RMAN STATUS: $STATUS" >> $EXECRMAN_LOG
echo >> $EXECRMAN_LOG
echo >> $EXECRMAN_LOG
echo "RMAN Restore Start Time:$START_DATE" >>
$EXECRMAN_LOG
echo >> $EXECRMAN_LOG
echo "RMAN Restore End Time:\t`date`" >>
$EXECRMAN_LOG
echo >> $EXECRMAN_LOG
#
*******************************************************************************
# *
*
# * IF ORACLE ERRORS (ORA-XXXXX) OR CRITICAL RMAN
ERRORS WERE ENCOUNTERED *
# * DURING THE EXECUTION OF THE RESTORE. IN EITHER
CASE, THE OUTPUT SHOULD *
# * BE SENT TO THE RMAN LOG AND SENT TO THE
NOTIFICATION GROUP. *
# *
*
#
*******************************************************************************
sync;sync;sync;
egrep -i "ORA-|error message stack|RMAN-00569|error
occurred" $EXECRMAN_LOG > /dev/null 2>&1
if [ $? = 0 ]; then
RMAN_SUBJECT="Error occurred on $HOSTID for
$ORACLE_SID!! (see $EXECRMAN_LOG)"
cat $EXECRMAN_LOG | $SENDALERT -s
"$RMAN_SUBJECT" -n "$RMAN_NOTIFY"
exit -1
else
RMAN_SUBJECT="$HOSTID RMAN RESTORE Summary FOR
$ORACLE_SID"
cat $EXECRMAN_LOG | $SENDALERT -s
"$RMAN_SUBJECT" -n "$RMAN_NOTIFY"
exit 0
fi
#
********************************************************************************
# *
*
# * Log Files Used By Wrapper $LOG_BASE
(/opt/oracle/product/admin/sql/rman/log) *
# *
*
# * EXECRMAN_LOG : Main Log File for Wrapper
{Not Deleted} *
# * WORKFILE_LOGFILE : RMAN Batch Mode Log File
{Not Deleted} *
# * WORKFILE_MULTI_CALLS : Multiple Instance Detector
{Deleted if success} *
# *
*
#
********************************************************************************
--- Seema Singh <[EMAIL PROTECTED]> wrote:
> Hi
> Can some one send me automated RMAN backup scripts
> please?
> Thanks
> -Seema
>
>
>
_________________________________________________________________
> Get your FREE download of MSN Explorer at
> http://explorer.msn.com/intl.asp
>
> --
> Please see the official ORACLE-L FAQ:
> http://www.orafaq.com
> --
> Author: Seema Singh
> INET: [EMAIL PROTECTED]
>
> Fat City Network Services -- (858) 538-5051 FAX:
> (858) 538-5051
> San Diego, California -- Public Internet
> access / Mailing Lists
>
--------------------------------------------------------------------
> To REMOVE yourself from this mailing list, send an
> E-Mail message
> to: [EMAIL PROTECTED] (note EXACT spelling of
> 'ListGuru') and in
> the message BODY, include a line containing: UNSUB
> ORACLE-L
> (or the name of mailing list you want to be removed
> from). You may
> also send the HELP command for other information
> (like subscribing).
__________________________________________________
Do You Yahoo!?
Make a great connection at Yahoo! Personals.
http://personals.yahoo.com
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Deepak Thapliyal
INET: [EMAIL PROTECTED]
Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051
San Diego, California -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from). You may
also send the HELP command for other information (like subscribing).