中小型
数据库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