RMAN还原shell脚本
[python]
下面的shell脚本用于实现数据库的自动还原还原成功后数据库被关闭因为我们在Prod数据库无异常的情形下不需要bak 的备用库open
shell脚本做还原时调用了catalog中的全局脚本global_restore
在脚本最尾部我们将DB还原是否成功的状态输出到日志文件db_restore_rmanlog这样做的好处是我们可以将多个DB的还原状态集中便于查看
$ more db_restore_rman_catalogsh
##====================================================================
## File name: db_restore_rman_catalogsh
## Usage: db_restore_rman_catalogsh <$ORACLE_SID>
## Desc:
## The script uses to restore database with level backupset
##====================================================================
#!/bin/bash
#
# Define variable
#
if [ f ~/bash_profile ]; then
~/bash_profile
fi
#
# Check SID
#
if [ z ${} ];then
echo Usage:
echo `basename $` ORACLE_SID
exit
fi
ORACLE_SID=${}; export ORACLE_SID
LOG_DIR=/u/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=
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} 《EOF
startup nomount;
run{execute global script global_restore;}
exit;
EOF
RV=$?
cat ${RMAN_LOG}》${SSH_LOG}
echo 》${SSH_LOG}
echo 》${SSH_LOG}
echo MSG: RMAN restore end at `date` 》${SSH_LOG}
echo 》${SSH_LOG}
if [ $RV ne ]; then
echo 》${SSH_LOG}
echo MSG: RMAN restore error at `date` 》${SSH_LOG}
echo 》${SSH_LOG}
RMAN_STAT=FAILED
mail s Failed RMAN restore for $ORACLE_SID on `hostname` <${SSH_LOG}
else
echo 》${SSH_LOG}
echo MSG: No error found for RMAN restore at `date` 》${SSH_LOG}
echo 》${SSH_LOG}
RMAN_STAT=SUCCEED
rm rf ${RMAN_LOG} >/dev/null
fi
echo `date +%F %X` $ $ $RMAN_STAT 》 /u/comm_scripts/db_restore_rmanlog
exit
检测还原状态shell脚本
[python]
我们用一个shell脚本来检测多个DB当天最终的还原状态成功与否并将当前的所有记录输出到ck_restorelog日志
脚本尾部发送邮件列出当天所有进行restore之后的所有状态是一个多个DB restore 的summary report
$ more ck_restoresh
##====================================================================
## File name: ck_restoresh
## Usage: ck_restoresh
## 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=/u/comm_scripts
dt=`date +%F`
cat /dev/null >${REV_DIR}/ck_restorelog
cat ${REV_DIR}/db_restore_rmanlog | grep ${dt} 》${REV_DIR}/ck_restorelog
total=`cat ${REV_DIR}/ck_restorelog |wc l`
suc=`grep SUCCEED ${REV_DIR}/ck_restorelog |wc l`
fail=`grep FAILED ${REV_DIR}/ck_restorelog |wc l`
echo 》ck_restorelog
echo e The total DB of current recovery is $total in `hostname` \n》${REV_DIR}/ck_restorelog
echo e The number of succee is : ${suc} \n》${REV_DIR}/ck_restorelog
echo e The number of fail is : ${fail} \n》${REV_DIR}/ck_restorelog
mail s RMAN restore summary for `hostname` at `date +%a %b %d %Y` <${REV_DIR}/ck_restorelog
部署还原shell脚本到crontab
[python]
首先将多个需要自动restore的DB封装到一个单独的文件如下
最后调用ck_restoresh 脚步检测所有DB restore状态并发送RMAN summary report邮件
$ more full_resotre_by_rmansh
#!/bin/bash
/u/comm_scripts/db_restore_rman_catalogsh BC
/u/comm_scripts/db_restore_rman_catalogsh AF
/u/comm_scripts/ck_restoresh
部署到crontab
注无论是备份还是恢复脚本我们都是通过Bak server的crontab来部署以减轻Prod的压力
#Rman restore database
* * /u/comm_scripts/full_resotre_by_rmansh