中小型数据库 RMAN CATALOG 备份恢复方案(二)
中小型数据库呈现的是数据库并发少,数据库容量小,版本功能受限以及N多单实例等特点。尽管如此,数据库的损失程度也会存在零丢失的情形。企业不愿意花太多的钱又要保证数据库的可靠稳定,可是苦煞了我这些搞DB的。接上一篇文章,中小型数据库 RMAN CATALOG 备份恢复方案(一),我们继续来给出基于中小型数据库的恢复的脚本与其部署。
1、RMAN还原shell脚本
- --下面的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脚本
- --我们用一个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
- --首先将多个需要自动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
中小型数据库 RMAN CATALOG 备份恢复方案(二)的更多相关文章
- 中小型数据库 RMAN CATALOG 备份恢复方案(一)
对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选.尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少 ...
- RMAN catalog备份恢复方案
对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选.尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少 ...
- MySQL 系列(四)主从复制、备份恢复方案生产环境实战
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- 阿里RDS数据库 全量备份恢复到本地MYSQL
阿里RDS数据库 全量备份恢复到本地MYSQL 1.首先下载RDS的全量备份 下载完成后上传到服务器备用 2.安装MySQL 5.6 首先删除机上其他的MySQL版本 检查系统是否安装其他版本 ...
- oracle 备份恢复篇(二)---rman 增备恢复--不完全恢复
一,环境准备 全备脚本: export TMP=/tmp export TMPDIR=$TMP export ORACLE_BASE=/u01 export ORACLE_SID=prod expor ...
- RMAN常用备份恢复命令汇总
RMAN命令 1.独立命令 RMAN>shutdown immediate RMAN>startup RMAN>backup format 'd:\backup\%d_%s.b ...
- MySQL 系列(四) 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战
本章内容: 主从复制 简介原理 备份主库及恢复从库,配置从库生效 读写分离 如果主宕机了,怎么办? 双主的情况 MySQL 备份及恢复方案 备份单个及多个数据库 mysqldump 的常用参数 如何增 ...
- Elasticsearch系列---生产数据备份恢复方案
前言 生产环境中运行的组件,只要有数据存储,定时备份.灾难恢复是必修课,mysql数据库的备份方案已经非常成熟,Elasticsearch也同样有成熟的数据备份.恢复方案,我们来了解一下. 概要 本篇 ...
- 怎样使用 RMAN 增量备份恢复 data guard log gap(日志断档)
主库查询最小scn 信息: SQL> col current_scn for 999999999999999 SQL> SELECT CURRENT_SCN FROM V$DATABAS ...
随机推荐
- hdu 4345 Permutation 记忆化搜索
思路:实际上求的是和小于等于n的质数的种类数!!! 代码如下: #include<iostream> #include<stdio.h> #include<algorit ...
- 544B. Sea and Islands
题目链接 题意: n*n的里面全是S的方格中,填充L,若填充的L上下左右都没有相邻的L则是一个快,问题是能否形成k个块 n可以去奇数也可以去偶数 只要我们输出满足条件的一个结果就好了 对于从0 - n ...
- eclipse调试web项目
Eclipse上的Web项目调试 在Eclipse中开发Web项目的首要难题就是如何进行代码调试.本文简要说明一下在Eclipse中使用Tomcat和Jetty调试Java Web项目的方法. Tom ...
- AA投资
AA投资创建于2015年,总部位于北京,创始人成妙绮和王浩泽,专注于天使轮的技术创新驱动的TMT项目投资. 投资方向 AA投资是一家2015年才成立的风险投资机构,专注于种子轮.天使轮.Pre-A轮的 ...
- VCL里为什么要用类函数代替API,为什么要用CM_消息代替虚函数
之所以要用类函数代替API,是因为VCL对它做了一些包装,好在API起作用之前和之后做一些额外的事情:通知和判断等等.之所以类函数要包装一个CM_消息,是因为这样方便程序员(在调用类函数的基础上)截断 ...
- linux驱动分离分层的概念
这个分离分层的概念和输入子系统有点像,但不是完全一样的.为什么会再弄一个这个模型出来我也没有搞懂,现在我的学习还停留在把知识学懂的层面上.至于为什么会产生这种知识,现在我还无从解释,还需时日成长. 这 ...
- TCP建立连接的三次握手过程
TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是TCP建立连接的全过程. 上图画出了TCP建立连接的过程.假定主机A运行的是TCP客户程序,B运行的是TCP服务器程序.最初两端的TCP进 ...
- Linux 下Git的安装和配置
Git是分布式的版本控制系统,实际上是不需要固定的服务器的,Git与svn的最大区别是,它的使用流程不需要联机,可以先将对代码的修改,评论,保存在本机.等上网之后,再实时推送过去.同时它创建分支与合并 ...
- USACO Section 3.3: Riding the Fences
典型的找欧拉路径的题.先贴下USACO上找欧拉路径的法子: Pick a starting node and recurse on that node. At each step: If the no ...
- HDU 4643 GSM 算术几何
当火车处在换基站的临界点时,它到某两基站的距离相等.因此换基站的位置一定在某两个基站的中垂线上, 我们预处理出任意两基站之间的中垂线,对于每次询问,求询问线段与所有中垂线的交点. 检验这些交点是否满足 ...