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

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

作者:赵全文  网名:guestart

我们生产环境的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脚本的具体内容,

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

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

(1)个人简介,包括姓名,Emai邮箱,技术博客网址;

(2) SHELL脚本文件名;

(3) 最近修改日期;

(4)该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备份集有效性的语句,validate backupset 后面紧跟的就是带逗号的BS_KEY值列表,形如这种格式,“validate backupset6046,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,如果需要下载即可。




如您觉得此篇文章对您有帮助,欢迎关注微信公众号:guestartDBA学习笔记,您的支持是对我最大的鼓励!


时间: 2024-12-04 11:09:44

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

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器 作者:赵全文 网名:guestart 我们有一套生产环境的Oracle数据库,虽然每天都有RMAN备份,但是也招架不住开发人员隔三差五就说要恢复几张表的前几天的数据到生产环境当中,针对这样的需求,用RMAN来恢复某几张表的数据就显的特别费劲了.于是我决定用Oracle数据库的逻辑备份工具EXPDP(数据泵导出)专门导出特定用户下的所有表的数据,并在每天凌晨4点通过LINUX操作系统的CRONTAB的计划任务定时执

利用shell脚本实现对mysql数据库的备份

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #!/bin/bash     #保存备份个数  number=3  #备份保存路径  backup_dir=/root/mysqlbackup  #日期  dd=`date +%Y%m%d`  #备份工具  tool=mysqldump  #用户名  username=mracale  #密码  pass

oracle数据库rman备份计划及恢复

1.rman完全恢复的前提条件:历史的datafile,controlfile和spfile备份,加上完整的archivelog和完好的redolog. 2.rman备份脚本: a.RMAN 0级备份命令: run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup incremental level 0 tag 'level0' format "

利用shell脚本实现计划任务功能 V1.2

2013.05.10  mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1.0 版后(利用shell脚本实现计划任务功能),一直在想着如何解决那个最后的遗留问题"每个任务脚本中声明的函数名必须唯一不能重复,否则会导致任务函数覆盖.",无意间自问了一句为什么不能像crontab那样直接调用脚本和命令呢?这一问才让自己回忆起来,之所以用function封装任务是因为早

利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下

背景是这样的:网站一开始访问量比较小,大家就把所有的图片文件上传到一个目录下(比如是/data/images/).后来访问量大了,图片也多了,这样就影响读取效率.所以有个这样的需求,把这些个图片文件移动到多个目录下,这个目录是图片的上传日期(就是文件属性中的修改日期filemtime)组成的.比如2012-12-20的修改日期,那么现在就该放在/data/images/2012/12/20的目录下. php有很容易的操作文件的函数,可以方便完成.当然也可以利用shell脚本完成. 用shell的

Linux基础之-利用shell脚本实现自动监控系统服务

目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户 条件:1. 主机及子机IP地址,hostname已确定: 2. 主机与子机能够免密通讯,即基于密匙通讯(相关命令:ssh-keygen;ssh-copy-id -i web1); 需要的文件:    1. python邮件发送工具: 2. nfc.sh监控脚本,监控nginx及nfs服务状态,并调用mail发送工具通知用户: 3. nfc-install.sh监控部署脚本,运行在主机,为子机配置文件,执行命令

linux下SSH服务利用shell脚本实现密钥的批量分发与执行

SSH项目利用shell脚本实现密钥的批量分发与执行 1 ssh密钥的批量分发 开始安装sshpass免交互工具并进行SSH-key的批量分发 1.1 下载epel源并更新yum仓库 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y clean all yum makecache 1.2 安装sshpass工具 yum -y install sshpass 2 创建密钥文件 2

Oracle数据库的备份方法

1.引言 Oracle数据库的备份方法很多,无论使用那种备份方法,备份的目的都是为了在出现故障后能够以尽可能小的时间和代价恢复系统.比如使用export实用程序导出数据库对象.使用Oracle备份数据库.使用Oracle对称复制.使用Oracle并行服务器.使用Oracle冷备份.使用Oracle热备份等各种备份方法都有其优缺点.适用的场合和相应的软硬件要求.本文主要就用export实用程序导出数据库对象.Oracle冷备份.Oracle热备份这三种最基本的备份方法进行详细的探讨,分析各自的优缺

oracle数据库的备份及升级

以oracle用户登陆数据库所在的服务器,例如家目录为/home./oracle.执行以下命令进行备份操作. sqlplus /nolog connect /as sysdba sql>createdirectory dump_bx as '指定一个存放dmp文件的目录'; sql>grantread,write on directory dump_bx to  boss数据库的用户名称 ; sql>exit oracle>expdp boss数据库的用户名称/密码 directo