前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中小型数据库 RMAN CATALOG 备份恢复方案(二)

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

作者头像
Leshami
发布2018-08-13 15:47:42
4590
发布2018-08-13 15:47:42
举报
文章被收录于专栏:乐沙弥的世界乐沙弥的世界

      中小型数据库呈现的是数据库并发少,数据库容量小,版本功能受限以及N多单实例等特点。尽管如此,数据库的损失程度也会存在零丢失的情形。企业不愿意花太多的钱又要保证数据库的可靠稳定,可是苦煞了我这些搞DB的。接上一篇文章,中小型数据库 RMAN CATALOG 备份恢复方案(一),我们继续来给出基于中小型数据库的恢复的脚本与其部署。

1、RMAN还原shell脚本

代码语言:javascript
复制
--下面的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.
##   Author: Robinson
##   Blog  : http://blog.csdn.net/robinson_0612
##====================================================================

#!/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} <<EOF
startup nomount;
run{execute global script global_restore;}
exit;
EOF
RV=$?

cat ${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脚本

代码语言:javascript
复制
--我们用一个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
##   Author: Robinson
##   Blog  : http://blog.csdn.net/robinson_0612
##====================================================================
#!/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
total=`cat ${REV_DIR}/ck_restore.log |wc -l`
suc=`grep SUCCEED ${REV_DIR}/ck_restore.log |wc -l`
fail=`grep FAILED ${REV_DIR}/ck_restore.log |wc -l`
echo "">>ck_restore.log
echo -e "The total DB of current recovery is $total in `hostname` \n">>${REV_DIR}/ck_restore.log
echo -e "The number of succee is : ${suc} \n">>${REV_DIR}/ck_restore.log
echo -e "The number of fail is : ${fail} \n">>${REV_DIR}/ck_restore.log
mail -s "RMAN restore summary for `hostname` at `date +'%a %b %d %Y'`" dba@12306.com <${REV_DIR}/ck_restore.log

3、部署还原shell脚本到crontab

代码语言:javascript
复制
--首先将多个需要自动restore的DB封装到一个单独的文件,如下:
--最后调用ck_restore.sh 脚步检测所有DB restore状态并发送RMAN summary report邮件
$ more full_resotre_by_rman.sh
#!/bin/bash
/u01/comm_scripts/db_restore_rman_catalog.sh BC1200
/u01/comm_scripts/db_restore_rman_catalog.sh AF2630

/u01/comm_scripts/ck_restore.sh

--部署到crontab
--注,无论是备份还是恢复脚本,我们都是通过Bak server的crontab来部署以减轻Prod的压力
#Rman restore database
0 3 * * 1-6 /u01/comm_scripts/full_resotre_by_rman.sh  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年08月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档