分享

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

 浸心阁 2015-04-12

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

 

1、RMAN还原shell脚本

  1. --下面的shell脚本用于实现数据库的自动还原,还原成功后,数据库被关闭。因为我们在Prod数据库无异常的情形下,不需要bak 的备用库open  
  2. --shell脚本做还原时调用了catalog中的全局脚本global_restore  
  3. --在脚本最尾部,我们将DB还原是否成功的状态输出到日志文件db_restore_rman.log,这样做的好处是我们可以将多个DB的还原状态集中,便于查看  
  4. $ more db_restore_rman_catalog.sh  
  5. ##====================================================================  
  6. ##   File name: db_restore_rman_catalog.sh  
  7. ##   Usage: db_restore_rman_catalog.sh <$ORACLE_SID>  
  8. ##   Desc:  
  9. ##        The script uses to restore database with level 0 backupset.  
  10. ##   Author: Robinson  
  11. ##   Blog  : http://blog.csdn.net/robinson_0612  
  12. ##====================================================================  
  13.   
  14. #!/bin/bash   
  15. # --------------------  
  16. # Define variable  
  17. # --------------------  
  18.   
  19. if [ -f ~/.bash_profile ]; then  
  20. . ~/.bash_profile  
  21. fi  
  22.   
  23. # --------------------------  
  24. #   Check SID  
  25. # --------------------------  
  26. if [ -z "${1}" ];then  
  27.     echo "Usage: "  
  28.     echo "      `basename $0` ORACLE_SID"  
  29.     exit 1  
  30. fi  
  31.   
  32. ORACLE_SID=${1};                              export ORACLE_SID  
  33. LOG_DIR=/u02/database/${ORACLE_SID}/backup;   export RMAN_DIR  
  34. TIMESTAMP=`date +%Y%m%d%H%M`                  export TIMESTAMP  
  35. RMAN_LOG=${LOG_DIR}/${ORACLE_SID}_restore_${TIMESTAMP}.log;          export RMAN_LOG  
  36. SSH_LOG=${LOG_DIR}/${ORACLE_SID}_restore_full_${TIMESTAMP}.log;      export SSH_LOG  
  37. RETENTION=5  
  38.   
  39. echo "----------------------------------------------------------------" >>${SSH_LOG}  
  40. echo "Start rman to backup at `date`."                                  >>${SSH_LOG}  
  41. echo "----------------------------------------------------------------" >>${SSH_LOG}  
  42.   
  43. $ORACLE_HOME/bin/rman target / catalog rman_user/xxx@catadb log=${RMAN_LOG} <<EOF  
  44. startup nomount;  
  45. run{execute global script global_restore;}  
  46. exit;  
  47. EOF  
  48. RV=$?  
  49.   
  50. cat ${RMAN_LOG}>>${SSH_LOG}  
  51. echo ""        >>${SSH_LOG}  
  52. echo "----------------------------------------------------------------" >>${SSH_LOG}  
  53. echo "MSG1: RMAN restore end at `date`."                                >>${SSH_LOG}  
  54. echo "----------------------------------------------------------------" >>${SSH_LOG}  
  55.   
  56. if [ $RV -ne "0" ]; then  
  57.     echo "----------------------------------------------------------------" >>${SSH_LOG}      
  58.     echo "MSG2: RMAN restore error at `date`."                              >>${SSH_LOG}  
  59.     echo "----------------------------------------------------------------" >>${SSH_LOG}  
  60.     RMAN_STAT='FAILED'  
  61.     mail -s "Failed RMAN restore for $ORACLE_SID on `hostname`." dba@12306.com <${SSH_LOG}  
  62. else  
  63.     echo "----------------------------------------------------------------" >>${SSH_LOG}  
  64.     echo "MSG2: No error found for RMAN restore at `date`."                 >>${SSH_LOG}  
  65.     echo "----------------------------------------------------------------" >>${SSH_LOG}  
  66.     RMAN_STAT='SUCCEED'  
  67.     rm -rf ${RMAN_LOG} 2>/dev/null  
  68. fi  
  69.   
  70. echo "`date '+%F %X'` --  $0 $1 $RMAN_STAT ">> /u01/comm_scripts/db_restore_rman.log  
  71.   
  72. exit  

2、检测还原状态shell脚本

  1. --我们用一个shell脚本来检测多个DB当天最终的还原状态成功与否,并将当前的所有记录输出到ck_restore.log日志  
  2. --脚本尾部发送邮件列出当天所有进行restore之后的所有状态,是一个多个DB restore 的summary report.  
  3. $ more ck_restore.sh  
  4. ##====================================================================  
  5. ##   File name: ck_restore.sh  
  6. ##   Usage: ck_restore.sh  
  7. ##   Desc:  
  8. ##        The script uses to check RMAN restore log for current day  
  9. ##          and send mail to DBA  
  10. ##   Author: Robinson  
  11. ##   Blog  : http://blog.csdn.net/robinson_0612  
  12. ##====================================================================  
  13. #!/bin/bash  
  14. if [ -f ~/.bash_profile ];  
  15. then  
  16. . ~/.bash_profile  
  17. fi  
  18.   
  19. REV_DIR=/u01/comm_scripts  
  20. dt=`date '+%F'`  
  21. cat /dev/null >${REV_DIR}/ck_restore.log  
  22. cat ${REV_DIR}/db_restore_rman.log | grep "${dt}" >>${REV_DIR}/ck_restore.log  
  23. total=`cat ${REV_DIR}/ck_restore.log |wc -l`  
  24. suc=`grep SUCCEED ${REV_DIR}/ck_restore.log |wc -l`  
  25. fail=`grep FAILED ${REV_DIR}/ck_restore.log |wc -l`  
  26. echo "">>ck_restore.log  
  27. echo -e "The total DB of current recovery is $total in `hostname` \n">>${REV_DIR}/ck_restore.log  
  28. echo -e "The number of succee is : ${suc} \n">>${REV_DIR}/ck_restore.log  
  29. echo -e "The number of fail is : ${fail} \n">>${REV_DIR}/ck_restore.log  
  30. mail -s "RMAN restore summary for `hostname` at `date +'%a %b %d %Y'`" dba@12306.com <${REV_DIR}/ck_restore.log  

3、部署还原shell脚本到crontab

  1. --首先将多个需要自动restore的DB封装到一个单独的文件,如下:  
  2. --最后调用ck_restore.sh 脚步检测所有DB restore状态并发送RMAN summary report邮件  
  3. $ more full_resotre_by_rman.sh  
  4. #!/bin/bash  
  5. /u01/comm_scripts/db_restore_rman_catalog.sh BC1200  
  6. /u01/comm_scripts/db_restore_rman_catalog.sh AF2630  
  7.   
  8. /u01/comm_scripts/ck_restore.sh  
  9.   
  10. --部署到crontab  
  11. --注,无论是备份还是恢复脚本,我们都是通过Bak server的crontab来部署以减轻Prod的压力  
  12. #Rman restore database  
  13. 0 3 * * 1-6 /u01/comm_scripts/full_resotre_by_rman.sh    


Oracle 牛鹏社

 

相关参考
    中小型数据库 RMAN CATALOG 备份恢复方案(一)

    RMAN 数据库克隆文件位置转换方法

    基于RMAN的异机数据库克隆(rman duplicate)

    基于 RMAN 的同机数据库克隆

    基于用户管理的同机数据库克隆

    基于RMAN从活动数据库异机克隆(rman duplicate from active DB)

    RMAN duplicate from active 时遭遇 ORA-17627 ORA-12154

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理

    SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

    Oracle 基于备份控制文件的恢复(unsing backup controlfile)

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    RMAN 备份路径困惑

    自定义 RMAN 显示的日期时间格式

    只读表空间的备份与恢复

    Oracle 基于用户管理的不完全恢复

    理解 using backup controlfile

    使用RMAN实现异机备份恢复(WIN平台)

    使用RMAN迁移文件系统数据库到ASM

    基于Linux下 Oracle 备份策略(RMAN)

    Linux 下RMAN备份shell脚本

    使用RMAN迁移数据库到异机

    RMAN 提示符下执行SQL语句

    Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)

    rman 还原归档日志(restore archivelog)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多