再上一篇:8.6自治事务
上一篇:8.7小结
主页
下一篇:9.2什么是 undo?
再下一篇:9.2.1 redo 和undo如何协作?
文章列表

9.1什么是 redo?

Oracle 9i 10g编程艺术:深入数据库体系结构

重做日志文件(redo log file)对Oracle数据库来说至关重要。它们是数据库的事务日志。Oracle 维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文件。这两类重做 日志文件都用于恢复;其主要目的是,万一实例失败或介质失败,它们就能派上用场。
如果数据库所在主机掉电,导致实例失败,Oracle会使用在线重做日志将系统恰好恢复到掉电之前 的那个时间点。如果磁盘驱动器出现故障(这是一个介质失败),Oracle会 使用归档重做日志以及在线重 做日志将该驱动器上的数据备份恢复到适当的时间点。另外,如果你“无意地”截除了一个表,或者删除 了某些重要的信息,然后提交 了这个操作,那么可以恢复受影响数据的一个备份,并使用在线和归档重做 日志文件把它恢复到这个“意外”发生前的时间点。
归档重做日志文件实际上就是已填满的“旧”在线重做日志文件的副本。系统将日志文件填满时,ARCH 进程会在另一个位置建立在线重做日志文件的一个副本,也可以在本地和远程位置上建立多个另外的副本。 如果由于磁盘驱动器损坏或者其他物理故障而导致失败,就会用这些归档重做日志文件来执行介质恢复。 Oracle拿到这些归档重做日志文件,并把它们应用于数据文件的备份,使这些数据文件能“赶上”数据库 的其余部分。归档重做日志文件是数据库的事务历史。
注意 随着Oracle 10g的到来,我们现在还有了一种闪回技术(flashback)。利用闪回技术,可以执 行闪回查询(也就是说,查询过去某个时间点的数据),取消数据库表的删除,将表置回到以前某 个时间的状态,等等。因此,现在使用备份和归档重做日志文件来完成传统恢复的情况越来越少。 不过,执行恢复是DBA最重要的任务,而且DBA在数据库恢复方面绝对不能犯错误。
每个Oracle数据库都至少有两个在线重做日志组,每个组中至少有一个成员(重做日志文件)。这些 在线重做日志组以循环方式使用。Oracle会写组1中的日志文件,等写到组1中文件的最后时,将切换到
日志文件组2,开始写这个组中的文件。等到把日志文件组2写满时,会再次切换回日志文件组1(假设只 有两个重做日志文件组;如果有3 个重做日志文件组,Oracle当然会继续写第3个组)。
数据库之所以成为数据库(而不是文件系统等其他事物),是因为它有自己独有的一些特征,重做日 志或事务日志就是其中重要的特性之一。重做日志可能是数据库中最重要的恢复结构,不过,如果没有其 他部分(如undo段、分布式事务恢复等),但靠重做日志什么也做不了。重做日志是数据库区别于传统文 件系统的一个主要因素。Oracle正写到一半的时候有可能发生掉电,利用在线重做日志,我们就能有效地 从这个掉电失败中恢复。归档重做日志则允许我们从介质失败中恢复,如硬盘损坏,或者由于人为错误而 导致数据丢失。如果没有重做日志,数据库提供id保护就比文件系统多不了多少。