前言:各种不同的闪回技术
Oracle有4种可提供使用的不同闪回技术,每种技术的实现采用不同的底层体系结构,并且能力和限制各异,但他们之间有重叠功能。使用任何一种闪回技术的原因通常是为了纠错-了解哪种闪回技术适用于纠正那些不同类型的错误是非常重要的。
闪回查询、事务和表
闪回删除
Flashback Data Archive
闪回数据库-概述
闪回数据库就像按下数据库上的倒带按钮,将当前数据库视为起始点,然后在时间上回退,逐步回退完成所有工作。最终的结果就行执行了不完整恢复:将丢失在闪回点之后的所有工作,并使用RESETLOGS打开数据库。值得注意的是,闪回数据库不能撤销物理损坏,而只能恢复用户错误造成的逻辑错误。如果遇到物理损坏或介质丢失,闪回数据库就无能为力-对此,必须使用传统的完整的恢复方法。闪回数据库是在用户操作错误后代替不完整恢复的一种手段-很可能是一种更灵活、更快捷的替换方法。
闪回数据库-体系
闪回数据库实际上是多个进程和数据结构的组合。首先,必须在SGA中分配一些内存(这是自动进行的-无法控制缓冲区大小)并在磁盘上分配一些空间来存储闪回数据,同时启动(Recovery Writer,RVWR)进程来支持闪回日志记录。此进程会将闪回缓冲区内容刷新到磁盘和闪回日志,注意,这没有改变向日志缓冲区写入更改的常规程序,LGWR会将日志缓冲区刷新到磁盘。闪回日志记录是此操作的附属物。与重做日志不同的是,闪回日志记录不是记录变化的日志,而是记录完整块映像的日志。闪回日志不同于重做日志,它不能多路复用和归档闪回日志,它们是自动创建和管理的。当执行闪回时,Oracle会使用闪回日志将数据库及时回退到期望的时间之前的某个时间点,然后按照不完整恢复中的常规方式应用重做日志(最大限度的使用归档重做日志文件和联机重做日志文件),以便将数据文件前滚到希望的确切时间。然后按照不完整恢复采用的相同方式,使用新前身/化身(incarnation)打开数据库。
闪回数据库要求是归档日志模式,并要使用 ALTER DATABASE OPEN RESETLOGS 来创建数据库的一个新前身/化身。如果数据库为非归档模式,那么归档日志数据流就不可用,则无法将应用闪回日志得到的不一致数据库版本转换到能够打开的一致数据库版本。既然闪回数据库要求使用归档日志模式,那么它相对于常规的不完整恢复的优势体现在哪里?那就是回滚数据库将更加方便和快捷。
不完整恢复总是耗时的,因为部分过程是完全还原。不完整恢复的时间在很大程度上与数据库的大小成正比。与此相反,数据库闪回所需的时间主要取决于需要撤销更改的数量。在任何的常规情况下,与数据库的总数据量相比,更改的数据量微不足道,因此闪回操作会快很多倍。
闪回数据库-配置(命令)
配置一个数据库以启用闪回数据库确实需要停机时间:只有在数据库处于加载模式下才能发出这样一条命令。为了配置闪回数据库请遵循以下步骤:
(1)确保数据库处于归档日志模式。归档日志模式是启用闪回数据库的先决条件,可通过查询V$DATABASE视图或ARCHIVE LOG LIST命令来确认。
(2)创建闪回恢复区。闪回恢复区是存放闪回日志的场所。除了设置闪回恢复区目录并限定其大小外,不能施加其它控制。可以使用两个实例参数来控制:DB_RECOVERY_FILE_DEST 和 DB_RECOVERY_FILE_DEST_SIZE,前者指定目录(下图目录为手工创建),后者指定最大空间量(单位是字节)。切记,闪回恢复区的用途不同于闪回日志,并且它需要正确地设定大小。例如: