Oracle数据库恢复技术概述

2015-05-04 09:02李永亮郑晨溪
数字技术与应用 2014年12期

李永亮++郑晨溪

摘要:本文通过对Oracle数据库物理结构和重做日志的分析,指出了重做日志是数据恢复的关键,进而介绍了数据恢复的原理,更能凸显重做日志在数据恢复中的核心地位。了解重做日志原理和数据恢复的过程对日常维护工作中出现的各种Oracle数据恢复情景都有重要的指导意义。随着数据库技术的高速发展,Oracle数据库现已广泛运用于各企事业单位的信息化建设,并逐步发展成为各单位信息化管理的重要基础,尤其一些核心业务数据保存在Oracle数据库里,数据库的数据安全显得尤为重要。

关键词:数据库 数据恢复 重做日志 重做记录

中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2014)12-0202-01

一旦造成数据丢失,将会付出巨大的工作量去弥补数据,也可能因此造成不可挽回的损失。因此对从事数据库管理的DBA来说,做好数据的备份与恢复是一项很重要的工作,本文主要针对Oracle数据库的恢复相关的技术进行探讨。

1 Oracle数据库的物理结构

Oracle数据库主要由参数文件、数据文件、重做日志文件和控制文件等组成。数据文件、重做日志文件和控制文件是最核心的文件,其中数据文件保证了数据库数据的持久存在,保存了所有生成的数据;重做日志文件保证了数据库的可恢复性,保存数据文件、控制文件等各类文件一段时间以来的修改记录;控制文件的作用主要是确定数据文件和重做日志文件的路径、数据库字符集、数据库当前状态、检查点信息、保存其它文件头部的部分信息以便交叉校验及提供备份信息资料库等。这三类文件是打开数据库所必需的,缺一不可,其中重做日志在备份恢复是最重要的。

2 重做日志的作用与原理

重做日志可分为在线重做日志和归档重做日志,在线重做日志是重做记录在磁盘上的临时保存地点,它是数据库完全恢复的关键;归档重做日志文件是对过去时间在线重做日志的永久保存。理论上只要数据库的重做日志完整,数据库就能被完全恢复。

重做日志文件保存的数据称为重做记录,是它使数据库具备了恢复的能力。对数据库做出的任何形式的更改,都会在真正执行更改操作之前产生一条重做记录,该记录包含一个或多个操作,记载了数据库如何从一个状态改变到另一个状态的具体步骤,其中包含对多个数据块的修改,也可能包含对控制文件和其他文件的修改。

一个数据库的状态变更对应一条重做记录,重做记录则包含一个或多个变更矢量,变更矢量记载了对一个数据块的原子操作。

以一个update语句为例看一下重做记录的各个变更矢量,正常情况update命令会产生一条包含4个变更矢量的重做记录。首先是对撤销数据修改的两个变更矢量,然后是具体的update操作的数据块的变更矢量,最后一个矢量是一个标记,不修改任何对象。因此这条重做记录包含了重做记录头部和4条变更矢量。

通过重做记录可以看出数据文件的更新落后于在线日志文件的内容,这个也是在数据完全恢复时为什么总是需要在线重做日志的原因,只有应用在线重做日志才能保证数据不丢失。如果在线日志文件全部损坏的话,那就只能不完全恢复了。

3 数据恢复的原理

Oracle数据库恢复一般分为两类,实例恢复和介质恢复。实例恢复主要是在数据库启动过程中发现数据库文件不同步,自动利用在线日志中的重做记录自动对文件进行恢复的过程。介质恢复主要是在文件物理损坏的情况下,将数据库还原和恢复,最后使数据库正常运行的过程。因此实例恢复的前提是数据文件、控制文件和在线日志文件必须没有损坏,其局限性也明显,介质恢复才是日常数据恢复的一种常见情况。不论哪类的恢复都需要重做日志的支持。

实例恢复一般指实例崩溃(断电)或使用命令强制关闭数据库时的一类恢复,那时有一定的脏数据块还在缓存里,事务可能有的已经提交有的尚未提交,更严重的是,有的事务未提交,但它们的数据块已经被写回到数据文件中,这样数据库事务的持久性和原子性都遭到破坏,因此实例恢复的第一步就是自动前滚,只要将数据文件头部的检查点SCN(系统变更号)和当前在线日志文件中最新的重做记录SCN比较,判断数据文件是否同步,如果数据文件头部SCN小于重做记录SCN,则开始前滚,前滚操作主要是从某一个检查点开始,逐条读取在线重做日志里记录的重做记录,更新相应的数据块,直至用完在线日志的最后一条重做记录。前滚只是解决了数据的持久性,对未提交的变更和提交的变更都依据在线重做日志恢复出来了,但是破坏了原子性,因此实例恢复的第二步需要对未提交的事务进行回滚,这个是自动进行的。

介质恢复主要因为数据文件遭到了某种程度的破坏,因此第一步需要先将之前的备份复制到原来的位置,虽然备份的文件完整性没问题,但是头部的检查点SCN与在线日志的SCN不连续,无法进行实例恢复,因此需要进行手工恢复,利用recover命令读取归档日志和在线日志中的重做记录,将变更重做,把数据文件中丢失的变更找回,使复制过来的数据文件和日志中的记录变更一致,最后进行自动回滚。

4 结语

通过本文的介绍,可以看出重做日志文件在数据恢复中占有非常重要的地位。在实践中,数据库出现故障后的数据恢复是一项复杂的技术问题。当然不管是实例恢复还是介质恢复,都离不开备份,面对各式各样的数据库恢复故障,只有理解了数据恢复的原理,才能分析出故障的原因并结合备份数据,制定合适的恢复策略,保证数据库应用的正常恢复。

参考文献

[1]徐吉,龚正良,万锋,杨泽平.Oracle数据库数据恢复方法的研究[J].计算机工程,2005,(13):75-76.

[2]包光磊.Oracle 11g数据库恢复技术[M].北京:电子工业出版社,2012:10-16.

[3]余以胜.ORACLE数据库备份解决方案的研究[J].计算机与数字工程,2006,(1):119.

[4]冯遵委,刘伟成,赵鼎鼎,史百战.Oracle数据库备份和恢复的研究与应用[J].计算机时代,2006,(7):58.

[5]李海波.Oracle数据库的安全及备份恢复[J].电脑知识与技术,2004,(11):14.endprint