RMAN备份与恢复之控制文件丢失

一 写在前面

        

         常言道,“知其然,更要知其所以然”。但是没有知其然,何谈知其所以然。本系列文章呈现给你的更多是怎么做,为什么这样做也会有所涉及。但是由于水平有限,所以原理性的东西讲解不够深刻,还望读者海涵。

 

        最近看了很多资料,也在思考我们我在追逐的技术究竟能给这个社会带来什么价值。走在技术的道路上多少有些枯燥,但这又何妨?

 

二 RMAN备份和恢复控制文件讲解

        

         我们经常在说“备份重于一切”,如果出现问题可以从备份文件中恢复。此系列文章讲解RMAN的备份与恢复。RMAN(Recovery Manager),可以用来备份和还原数据库文件、归档日志和控制文件,它也可以用来执行完全或不完全的数据库恢复。RMAN备份方式有:完全备份(Full Backup)与增量备份(Incremental Backup)、打开备份(Open Backup)或关闭备份(Closed Backup)、一致备份(Consistent Backup)与不一致备份(Inconsistent Backup)。RMAN恢复有完全恢复和不完全恢复。其中不完全恢复,可以基于时间,基于SCN,基于日志序列号、基于备份控制文件。

        

         控制文件记录了数据库的结构和行为,对于数据库而言,控制文件是相当重要的,如果控制文件有问题,并且参数文件没有问题,数据库只能启动到NOMOUNT状态。ORACLE 11g控制文件默认两个,一个存放在数据目录,另一个存放在闪回目录。真实环境中控制文件也是多个,一般3个为宜。

 

         RMAN备份与恢复控制文件,首先我们要对数据库进行备份,如果没有备份何来的恢复。备份数据库的过程是这样的:RMAN发出备份全库命令后,RMAN生成到目标数据库的bequeath连接,也就是说会检查ORACLA_SID变量中的实例名,并在该在实 例上产生一个服务器进程,然后作为sysdba登陆,然后会产生一个作为备份的通道(其实也是进程,在PGA或者是在SGA分配存储)。随后RMAN调用 SYS.DBMS_RCVMAN请求数据库结构信息,包括控制文件的信息(当前序列号,创建时间……),由于指定了备份全库,所以RMAN会请求数据库中数据文件信息,并判断是否存在offline数据文件(包括所在的位置和工作方式)。RMAN开始备份,为了保持数据一致性RMAN必须构建控制文件快照,接下来RMAN调用DBMS _BACKUP_RESTORE数据包,该调用可以创建备份片。RMAN拥有文件列表,所以它为数据文件读取操作分配内存缓冲区,分配缓冲区后RMAN初始化备份片。一旦初始化了备份片, RMAN会判断是否使用了服务器参数文件,如果使用了则会做为备份的一部分,还要备份控制文件,之后才开始备份数据文件,并将其推至内存。 为了实现这一功能,通道进程在磁盘上执行预读取操作,并且将多个数据文件读入内存中,RMAN会判断数据块头信息是否仍然为零,如果数据块没有被使用过,就不会发生到输出缓冲区的写操作,同时会丢弃这个数据块(这就RMAN为什么会只备份使用过的数据的原因,也是它的优点)。 RMAN还会执行检查数据块有没有corruption操作。当检查通过了就被写入到输出缓冲区。一旦输出缓冲区填满了,就被推至备份文件位置。在备份数据块的时候,RMAN影子进程会得到备份状态信息,并将它传给V$session_longops视图,查询它能得到信息。 当数据文件的所有数据块都被读入输入缓冲区并确定了状态之后RMAN就会通过将这个数据文件写入备份片来结束该文件的备份操作。所有数据文件写入备份片之后,RMAN生成最后一个对SYS DBMS BACKUP RESTORE数据包的调用,该调用在控制文件中写入备份信息(包括备份片名,启动备份操作时的检查点的SCN和完成备份的时间),至此完成备份!

        

         备份数据库完成后,我们需要一致性关闭数据库,因为数据库处于运行状态会向控制文件写内容,如果不关闭,会出现控制文件版本不一致。一致性关闭数据库后,我们需要模拟控制文件丢失,为了避免恢复出错,我们不使用rm命令,真实环境中使用此命令也是很危险的,我们使用mv命令。接着我们启动数据库到NOMOUNT状态,为什么是NOMOUNT,因为数据库启动会经过三个阶段,实例启动,数据库装载,数据库打开,NOMOUNT阶段使用的是参数文件,因为我们的控制文件丢失,所以无法读取,只能启动到NOMOUNT状态。然后RMAN中通过备份的控制文件还原,因为控制文件恢复完成,可以启动数据库到MOUNT状态,所以我们接着使数据库到MOUNT状态,因为数据库的控制文件是通过RMAN恢复的,我们需要恢复数据库,使控制文件生效,并进行控制文件版本的校对和同步。然后我们使用RESETLOGS(重置日志)方式打开数据库,因为日志文件被清空了,以前的备份无效,所以我们应该再次对数据库进行备份。这一点至关重要。

 

         我们还可以使用RUN命令把所有的操作写入一个人脚本,这样可以减少很多操作,前提是这样的脚本经过严格的测试。

        

      控制文件丢失使用run命令

        语法:

         RUN{

                 STARTUP MOUNT;

                 RESTORE C

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值