中小型数据库呈现的是数据库并发少,数据库容量小,版本功能受限以及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. #!/bin/bash
  14. # --------------------
  15. # Define variable
  16. # --------------------
  17. if [ -f ~/.bash_profile ]; then
  18. . ~/.bash_profile
  19. fi
  20. # --------------------------
  21. #   Check SID
  22. # --------------------------
  23. if [ -z "${1}" ];then
  24. echo "Usage: "
  25. echo "      `basename $0` ORACLE_SID"
  26. exit 1
  27. fi
  28. ORACLE_SID=${1};                              export ORACLE_SID
  29. LOG_DIR=/u02/database/${ORACLE_SID}/backup;   export RMAN_DIR
  30. TIMESTAMP=`date +%Y%m%d%H%M`                  export TIMESTAMP
  31. RMAN_LOG=${LOG_DIR}/${ORACLE_SID}_restore_${TIMESTAMP}.log;          export RMAN_LOG
  32. SSH_LOG=${LOG_DIR}/${ORACLE_SID}_restore_full_${TIMESTAMP}.log;      export SSH_LOG
  33. RETENTION=5
  34. echo "----------------------------------------------------------------" >>${SSH_LOG}
  35. echo "Start rman to backup at `date`."                                  >>${SSH_LOG}
  36. echo "----------------------------------------------------------------" >>${SSH_LOG}
  37. $ORACLE_HOME/bin/rman target / catalog rman_user/xxx@catadb log=${RMAN_LOG} <<EOF
  38. startup nomount;
  39. run{execute global script global_restore;}
  40. exit;
  41. EOF
  42. RV=$?
  43. cat ${RMAN_LOG}>>${SSH_LOG}
  44. echo ""        >>${SSH_LOG}
  45. echo "----------------------------------------------------------------" >>${SSH_LOG}
  46. echo "MSG1: RMAN restore end at `date`."                                >>${SSH_LOG}
  47. echo "----------------------------------------------------------------" >>${SSH_LOG}
  48. if [ $RV -ne "0" ]; then
  49. echo "----------------------------------------------------------------" >>${SSH_LOG}
  50. echo "MSG2: RMAN restore error at `date`."                              >>${SSH_LOG}
  51. echo "----------------------------------------------------------------" >>${SSH_LOG}
  52. RMAN_STAT='FAILED'
  53. mail -s "Failed RMAN restore for $ORACLE_SID on `hostname`." dba@12306.com <${SSH_LOG}
  54. else
  55. echo "----------------------------------------------------------------" >>${SSH_LOG}
  56. echo "MSG2: No error found for RMAN restore at `date`."                 >>${SSH_LOG}
  57. echo "----------------------------------------------------------------" >>${SSH_LOG}
  58. RMAN_STAT='SUCCEED'
  59. rm -rf ${RMAN_LOG} 2>/dev/null
  60. fi
  61. echo "`date '+%F %X'` --  $0 $1 $RMAN_STAT ">> /u01/comm_scripts/db_restore_rman.log
  62. 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. REV_DIR=/u01/comm_scripts
  19. dt=`date '+%F'`
  20. cat /dev/null >${REV_DIR}/ck_restore.log
  21. cat ${REV_DIR}/db_restore_rman.log | grep "${dt}" >>${REV_DIR}/ck_restore.log
  22. total=`cat ${REV_DIR}/ck_restore.log |wc -l`
  23. suc=`grep SUCCEED ${REV_DIR}/ck_restore.log |wc -l`
  24. fail=`grep FAILED ${REV_DIR}/ck_restore.log |wc -l`
  25. echo "">>ck_restore.log
  26. echo -e "The total DB of current recovery is $total in `hostname` \n">>${REV_DIR}/ck_restore.log
  27. echo -e "The number of succee is : ${suc} \n">>${REV_DIR}/ck_restore.log
  28. echo -e "The number of fail is : ${fail} \n">>${REV_DIR}/ck_restore.log
  29. 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. /u01/comm_scripts/ck_restore.sh
  8. --部署到crontab
  9. --注,无论是备份还是恢复脚本,我们都是通过Bak server的crontab来部署以减轻Prod的压力
  10. #Rman restore database
  11. 0 3 * * 1-6 /u01/comm_scripts/full_resotre_by_rman.sh
 
转:http://blog.csdn.net/leshami/article/details/9850665

中小型数据库 RMAN CATALOG 备份恢复方案(二)的更多相关文章

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

    对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选.尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少 ...

  2. RMAN catalog备份恢复方案

    对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选.尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少 ...

  3. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  4. 阿里RDS数据库 全量备份恢复到本地MYSQL

    阿里RDS数据库 全量备份恢复到本地MYSQL   1.首先下载RDS的全量备份 下载完成后上传到服务器备用   2.安装MySQL 5.6 首先删除机上其他的MySQL版本 检查系统是否安装其他版本 ...

  5. oracle 备份恢复篇(二)---rman 增备恢复--不完全恢复

    一,环境准备 全备脚本: export TMP=/tmp export TMPDIR=$TMP export ORACLE_BASE=/u01 export ORACLE_SID=prod expor ...

  6. RMAN常用备份恢复命令汇总

    RMAN命令 1.独立命令  RMAN>shutdown immediate  RMAN>startup  RMAN>backup format 'd:\backup\%d_%s.b ...

  7. MySQL 系列(四) 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战

    本章内容: 主从复制 简介原理 备份主库及恢复从库,配置从库生效 读写分离 如果主宕机了,怎么办? 双主的情况 MySQL 备份及恢复方案 备份单个及多个数据库 mysqldump 的常用参数 如何增 ...

  8. Elasticsearch系列---生产数据备份恢复方案

    前言 生产环境中运行的组件,只要有数据存储,定时备份.灾难恢复是必修课,mysql数据库的备份方案已经非常成熟,Elasticsearch也同样有成熟的数据备份.恢复方案,我们来了解一下. 概要 本篇 ...

  9. 怎样使用 RMAN 增量备份恢复 data guard log gap(日志断档)

    主库查询最小scn 信息: SQL> col current_scn for 999999999999999 SQL>  SELECT CURRENT_SCN FROM V$DATABAS ...

随机推荐

  1. hdu 3590 PP and QQ 博弈论

    思路: 在贾志豪神牛的论文 里,这两种游戏都有 其中树的删边游戏:叶子节点的SG值为0:中间节点的SG值为它的所有子节点的SG值加1 后的异或和. ANTI-SG:先手必胜当且仅当:(1)游戏的SG函 ...

  2. socket传输过程

    连接过程: 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处 ...

  3. 李洪强iOS开发之多线程编程2-NSOperation

    前言 1.上一讲简单介绍了NSThread的使用,虽然也可以实现多线程编程,但是需要我们去管理线程的生命周期,还要考虑线程同步.加锁问题,造成一些性能上的开销.我们也可以配合使用NSOperation ...

  4. lintcode: 最小调整代价

    题目 最小调整代价 给一个整数数组,调整每个数的大小,使得相邻的两个数的差小于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少. 样例 对于数组,最小的调整 ...

  5. C. Tourist's Notes

    题目链接 题意:n天内登山,相邻两次登山的高度差的绝对值小于等于1,也就是说每次高度变化只能是:0,1,-1.我们已经知道n天中部分天数人所在的山的高度,求最大的登山高度. 输入: n m  n 是天 ...

  6. Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

    原文:Codelab for Android Design Support Library used in I/O Rewind Bangkok session--Make your app fanc ...

  7. 新Android工程src和layout文件夹为空

    问题:SDK和ADT版本冲突 解决方案: 1.菜单->Help->Install  New Software.. 2.在work with放入地址:http://dl-ssl.google ...

  8. PowerDesiger 15逆向生成工程E-R图及导出word表格

    应用环境:win8(64位)+oracle10g(32位)服务端+PowerDesigner15 需求:oracle数据库中的表结构是web工程框架hibernate 自动生成,现需要将数据库中已有的 ...

  9. rc.local自启动学习(转)

    linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘. 本文中假设inittab中设置的init tree为: /etc/rc.d/rc0.d/etc/rc. ...

  10. java实现附件预览(openoffice+swftools+flexpaper)

    先附上本人参考的文章,基于的 flexpaper版本 为 1.5,本人由于使用的是 2.1.9 ,故之后说明: 已经支持加载中文文件名 代码下载 1.概述 主要原理 1.通过第三方工具openoffi ...