利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

编辑手记:一切都有可能而且将会发生故障。只有未雨绸缪才能防患未然。

作者简介:赵全文

就职于太极计算机股份有限公司,在 中央电化教育馆 做Oracle DBA的驻场运维工作。

作为一个DBA,要时刻记得,故障是绝对会发生的,只是迟早的问题。

我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略;除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患。可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里钻和哭晕在厕所都于事无补了。

为了防止这一幕的出现,就需要对Oracle数据库RMAN备份集的有效性进行验证。为此,我专门写了一个SHELL脚本用来验证RMAN备份集的有效性,将该脚本文件放在了crontab的计划任务里,让其在每天晚上21点自动运行,目的是验证前一天生成的RMAN备份集的有效性。

现在,用线上的一套Oracle数据库生产环境,来演示操作。

首先,查看最近的一次RMAN全备,如下图所示,

接下来,查看一下生成的校验RMAN备份集有效性的LOG文件,见下图,

我们就以查看2017年3月3日生成的LOG文件为例,下面是执行SHELL脚本验证的结果,见下图所示,

截图一,

我们发现,上面首先校验的是3月2日生成的增量备份里的归档日志备份集。

截图二

紧接着,是校验增量1级备份生成的备份集和最后手动归档以及备份的归档日志备份集。

截图三

由于在RMAN的参数设置中开启了控制文件的自动备份功能,所以最后备份的是控制文件,那么最后校验的也是控制文件!

俗话说的好,“工欲善其事,必先利其器”!最后着重介绍一下,rman_validate_v2.sh 这个验证RMAN备份集有效性的SHELL脚本的具体内容,

由于脚本内容过多,下面分三个部分来说明,见下图。

截图一:

依次解释一下,几个红色方框标注的地方

  • 个人简介,包括姓名,Emai邮箱,技术博客网址;
  • SHELL脚本文件名;
  • 最近修改日期;
  • 该SH脚本使用的注意事项,当然是先确保在测试环境上测试通过以后,在放到生产环境中使用啦。

截图2

图2,有3个红色方框,

  • 方框1是定义在脚本中要使用的SHELL外部命令所在的绝对路径,每种Linux操作系统上所在的路径有可能不同,尽量要使用“which 想要使用的命令名”来查找一下,然后写到上面,通常把要使用的都要写上去;
  • 方框2是定义了一些有关路径的字符串变量和普通字符串变量以及SHELL命令用一对反引号(键盘上ESC键下面和数字1键左边的那个键)括起来的字符串变量(注意:只有用反引号括起来才能生成SHELL命令的执行结果);
  • 方框3是使用SQLPLUS命令连接到Oracle数据库以后,通过查询视图V$BACKUP_SET_DETAILS来找出前一天生成的RMAN备份集当中所有的BS_KEY值,然后保存到一个字符串变量BSKEY_LIST。

截图3,

图3有2个红色方框需要特别说明:

  • 方框1是通过强大AWK命令将字符串变量BSKEY_LIST的值“6046 6047 6048 6049 6050 6051 6052”的中间加一个逗号(所以我把方框1的字符串变量命名为BSKEY_LIST_WITH_COMMA,意即带逗号的BSKEY_LIST),形如这种格式,“6046,6047,6048,6049,6050,6051,6052”;
  • 方框2是在最后进入RMAN命令行,校验RMAN备份集有效性的语句,validatebackupset 后面紧跟的就是带逗号的BS_KEY值列表,形如这种格式,“validatebackupset 6046,6047,6048,6049,6050,6051,6052 check logical;”其实,也可以使用一个FOR循环来将字符串变量BSKEY_LIST的值一个一个读出,然后执行一次validate backupset 6046 check logical;再取一个值,再执行一次validatebackupset 6047 check logical;直到都把字符变量BSKEY_LIST的值取完为止,那样的话,就不用定义前面那个字符串变量BSKEY_LIST_WITH_COMMA了。看个人喜好,我觉得带逗号这种方式,个人比较喜欢和推荐使用。

我把rman_validate_v2.sh这个脚本放在了github上,网址为https://github.com/guestart/rman_validate/blob/master/rman_validate_v2.sh,如果需要下载即可。(原文链接直达)

备份的重要性,再强调都不为过。

最后,推荐我们以前发过的一篇文章作为勉励。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ShaoYL

iOS逆向实战与工具使用(微信添加好友自动确认)

1547
来自专栏喵了个咪的博客空间

phalcon-入门篇5(请求与返回)

#phalcon-入门篇5(请求与返回)# ? 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好者,我们提供这样一个...

35813
来自专栏信安之路

通过POC来学习漏洞的原理

本文介绍的是 easyFTPServer 1.7.0.2 ‘Http’ remote Buffer Overflow 的漏洞执行流程,通过已知的 POC 来推断...

1140
来自专栏前端知识铺

前端路由简介以及vue-router实现原理

简单来说路由就是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不同的资源,请求不同的页面是路由的其中一种功能。

2196
来自专栏开源优测

AutoLine源码分析之Flask初始化模块

下面我们看下在manage.py中如何调用create_app来初始化全局flask运行环境的。

1033
来自专栏java沉淀

Maven、Webx、Velocity学习总结

1163
来自专栏V站

WordPress丨常见函数及拓展模板函数大全

wordpress模板是由PHP语句组成,很多不懂代码的站长都被PHP复杂的代码难倒,难以自己开发个性化的模板。其实想开发一个wordpress模板并不是太难,...

1533
来自专栏GreenLeaves

JavaScript值延迟脚本和异步脚本

Html 4.0为<script>标签定义了defer属性,这个属性的用途是表名脚本在执行时,不会影响页面的构造。也就是说,脚本会延迟到整个页面解析完毕之后在运...

1917
来自专栏有趣的django

Django REST framework+Vue 打造生鲜超市(十一) 十二、支付宝沙箱环境配置

十二、支付宝沙箱环境配置 12.1.创建应用 进入蚂蚁金服开放平台(https://open.alipay.com/platform/home.htm),登录后...

4115
来自专栏运维小白

8.1 shell介绍

shell介绍 shell是一个命令解释器,提供用户和机器之间的交互 支持特定语法,比如逻辑判断、循环 每个用户都可以有自己特定的shell CentOS7默认...

16210

扫描关注云+社区