中小型数据库RMAN CATALOG备份恢复方案(二)(一)

2014-11-24 15:10:21 · 作者: · 浏览: 0
中小型 数据库RMAN CATALOG备份恢复方案(二)
1、RMAN还原shell脚本
[python] 
--下面的shell脚本用于实现数据库的自动还原,还原成功后,数据库被关闭。因为我们在Prod数据库无异常的情形下,不需要bak 的备用库open  
--shell脚本做还原时调用了catalog中的全局脚本global_restore  
--在脚本最尾部,我们将DB还原是否成功的状态输出到日志文件db_restore_rman.log,这样做的好处是我们可以将多个DB的还原状态集中,便于查看  
$ more db_restore_rman_catalog.sh  
##====================================================================  
##   File name: db_restore_rman_catalog.sh  
##   Usage: db_restore_rman_catalog.sh <$ORACLE_SID>  
##   Desc:  
##        The script uses to restore database with level 0 backupset.  
##====================================================================  
  
#!/bin/bash   
# --------------------  
# Define variable  
# --------------------  
  
if [ -f ~/.bash_profile ]; then  
. ~/.bash_profile  
fi  
  
# --------------------------  
#   Check SID  
# --------------------------  
if [ -z "${1}" ];then  
    echo "Usage: "  
    echo "      `basename $0` ORACLE_SID"  
    exit 1  
fi  
  
ORACLE_SID=${1};                              export ORACLE_SID  
LOG_DIR=/u02/database/${ORACLE_SID}/backup;   export RMAN_DIR  
TIMESTAMP=`date +%Y%m%d%H%M`                  export TIMESTAMP  
RMAN_LOG=${LOG_DIR}/${ORACLE_SID}_restore_${TIMESTAMP}.log;          export RMAN_LOG  
SSH_LOG=${LOG_DIR}/${ORACLE_SID}_restore_full_${TIMESTAMP}.log;      export SSH_LOG  
RETENTION=5  
  
echo "----------------------------------------------------------------" >>${SSH_LOG}  
echo "Start rman to backup at `date`."                                  >>${SSH_LOG}  
echo "----------------------------------------------------------------" >>${SSH_LOG}  
  
$ORACLE_HOME/bin/rman target / catalog rman_user/xxx@catadb log=${RMAN_LOG} <
>${SSH_LOG} echo "" >>${SSH_LOG} echo "----------------------------------------------------------------" >>${SSH_LOG} echo "MSG1: RMAN restore end at `date`." >>${SSH_LOG} echo "----------------------------------------------------------------" >>${SSH_LOG} if [ $RV -ne "0" ]; then echo "----------------------------------------------------------------" >>${SSH_LOG} echo "MSG2: RMAN restore error at `date`." >>${SSH_LOG} echo "----------------------------------------------------------------" >>${SSH_LOG} RMAN_STAT='FAILED' mail -s "Failed RMAN restore for $ORACLE_SID on `hostname`." dba@12306.com <${SSH_LOG} else echo "----------------------------------------------------------------" >>${SSH_LOG} echo "MSG2: No error found for RMAN restore at `date`." >>${SSH_LOG} echo "----------------------------------------------------------------" >>${SSH_LOG} RMAN_STAT='SUCCEED' rm -rf ${RMAN_LOG} 2>/dev/null fi echo "`date '+%F %X'` -- $0 $1 $RMAN_STAT ">> /u01/comm_scripts/db_restore_rman.log exit

2、检测还原状态shell脚本
[python] 
--我们用一个shell脚本来检测多个DB当天最终的还原状态成功与否,并将当前的所有记录输出到ck_restore.log日志  
--脚本尾部发送邮件列出当天所有进行restore之后的所有状态,是一个多个DB restore 的summary report.  
$ more ck_restore.sh  
##====================================================================  
##   File name: ck_restore.sh  
##   Usage: ck_restore.sh  
##   Desc:  
##        The script uses to check RMAN restore log for current day  
##          and send mail to DBA  
##====================================================================  
#!/bin/bash  
if [ -f ~/.bash_profile ];  
then  
. ~/.bash_profile  
fi  
  
REV_DIR=/u01/comm_scripts  
dt=`date '+%F'`  
cat /dev/null >${REV_DIR}/ck_restore.log  
cat ${REV_DIR}/db_restore_rman.log | grep "${dt}" >>${REV_DIR}/ck_restore.log  
to