Oracle闪回(flashback)功能详解

0    88    1

👉 本文共约4971个字,系统预计阅读时间或需19分钟。

什么是闪回?闪回有哪些分类?

Oracle闪回技术从根本上改变了数据恢复策略,利用闪回技术,可以使更正错误的时间大大缩短,而且它简单易用,使用一条短命令便可恢复整个数据库,而不必执行复杂的程序。闪回技术是Oracle数据库独有的特性,支持各级恢复,包括行、事务、表、表空间和数据库范围。采用闪回技术,可以针对行级和事务级发生过变化的数据进行恢复,减少了数据恢复的时间,而且操作简单,通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率。
Oracle中闪回技术分类图如下所示:

Oracle闪回(flashback)功能详解

闪回技术分类:

(1)闪回查询(Flashback Query):查询过去某个时间点或某个SCN值对应的表中的数据信息,即从回滚段中读取一定时间内对表进行操作的数据,恢复错误的DML操作。

(2)闪回版本查询(Flashback Version Query):查询过去某个时间段或某个SCN段内表中数据的变化情况。

(3)闪回事务查询(Flashback Transaction Query):查看某个事务或所有事务在过去一段时间对数据进行的修改。

(4)闪回表(Flashback TABLE):将表恢复到过去的某个时间点或某个SCN值时的状态。

(5)闪回删除(Flashback DROP):将已经删除的表及表上的索引恢复到删除前的状态,但索引名不会恢复到删除前的状态。

(6)闪回数据库(Flashback Database):将数据库恢复到过去某个时间点或某个SCN值时的状态。

有关闪回需要注意以下几点:

(1)闪回查询、闪回版本查询、闪回事务查询以及闪回表主要是基于回滚(Undo)表空间中的回滚信息实现的。

(2)闪回删除是基于Oracle中的回收站(Recycle Bin)特性实现的。

(3)闪回数据库是基于闪回恢复区(Flash Recovery Area)中的闪回日志来实现的。

(4)闪回数据归档是基于闪回归档区中的数据来实现的。

Oracle闪回(flashback)功能详解

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

Oracle闪回(flashback)功能详解

闪回查询(Flashback Query)

闪回查询分为基于AS OF TIMESTAMP和基于AS OF SCN的闪回查询,如下所示:

闪回查询示例:

闪回版本查询(Flashback Version Query)

查询语句一般为:

其中,VERSIONS BETWEEN用于指定闪回版本查询时查询的时间段或SCN段;AS OF用于指定闪回查询时查询的时间点或SCN。在闪回版本查询的目标列中,可以使用下列几个伪列返回版本信息:

  • VERSIONS_STARTTIME:基于时间的版本有效范围的下界;

  • VERSIONS_STARTSCN:基于SCN的版本有效范围的下界;

  • VERSIONS_ENDTIME:基于时间的版本有效范围的上界;

  • VERSIONS_ENDSCN:基于SCN的版本有效范围的上界;

  • VERSIONS_XID:操作的事务ID,唯一的标识行;

  • VERSIONS_OPERATION:执行操作的类型,I 表示INSERT,D 表示DELETE,U 表示UPDATE。

闪回版本查询注意事项:

① VERSIONS子句不能用于查询的表包括外部表、临时表和固定表。

② 不能使用VERSIONS子句查询视图。但是,在视图定义中可使用VERSIONS子句。

③ SELECT语句中的VERSIONS子句不能跨多个DDL语句(这些语句会更改相应表的结构)。

闪回版本查询示例:

闪回事务查询(Flashback Transaction Query)

闪回事务查询提供了一种查看事务级数据库变化的方法。它是SQL的扩展,能够看到事务带来的所有变化。此外,返回补充SQL语句,并用于撤消由事务引起的各行变化。使用闪回事务查询的权限:

开启补全日志:

闪回事务查询实际上是查询的数据字典FLASHBACK_TRANSACTION_QUERY。可以根据该视图的UNDO_SQL列值返回数据以前版本。

闪回事务查询示例说明:

闪回表(Flashback TABLE)

下面是验证索引在FLASHBACK TABLE TO SCN中的情况:

闪回删除(Flashback DROP)

从Oracle 10g开始,为了支持闪回删除(Flashback Drop)功能,Oracle引入了回收站(Recycle Bin)的概念。它的全称叫Tablespace Recycle Bin。回收站实际是一个逻辑容器(逻辑区域),原理有点类似于Windows系统的回收站。它以表空间中现有已经分配的空间为基础,而不是从表空间上物理划出一个固定区域用作回收站。这意味着回收站和表空间中的对象共用存储区域、系统没有给回收站预留空间。

从原理上来说,回收站就是一个数据字典表,放置用户已删除的的数据库对象信息。用户进行DROP操作的对象并没有被数据库删除,仍然会占用空间,除非是由用户手工进行PURGE或者因为存储空间不够而被数据库清除掉。在回收站功能被打开的情况下,当某个表被删除时,它就被移动到了回收站中。该对象一直保存在回收站中,直到清除回收站为止。因此,如果使用类似“DROP TABLE T_LHR;”的语句,那么T_T_LHR表就被移动到了回收站中。如果希望彻底删除T_LHR表,而不是保存在回收站中,那么可以在DROP TABLE命令中使用PURGE参数,命令为“DROP TABLE T_LHR PURGE;”。

闪回删除需要使用到回收站,打开回收站的命令如下所示:

关于闪回删除需要注意以下几点:

① 只能用于非系统表空间和本地管理的表空间。在SYSTEM表空间中的表被DROP后不会进入回收站。

② 对象的参考约束不会被恢复,指向该对象的外键约束需要重建。

③ 对象能否恢复成功,取决于对象空间是否被覆盖重用。

④ 当删除表时,依赖于该表的物化视图也会同时被删除,但是由于物化视图并不会被放入回收站,因此,当执行FLASHBACK TABLE TO BEFORE DROP时,也不能恢复依赖于该表的物化视图,这个时候就需要DBA手工介入重新创建物化视图。

⑤ 对于回收站中的对象,只支持查询。

⑥ 表被恢复以后,表上的索引,需要重建,虽然索引可以随着表的闪回而闪回,但是闪回后的索引仍然使用回收站中的名称,因此,需要重建索引。

⑦ 在使用“FLASHBACK TABLE ... TO BEFORE DROP”命令从回收站恢复表及其所有可能的相关对象时,可以指定表的原始名称或删除对象时分配给对象的系统生成名称。如果指定原始名称,且回收站包含多个具有该名称的对象,那么Oracle会最先恢复最晚移动到回收站的对象(LIFO:后进先出)。如果删除原始表后又在同一用户中创建了同名的新表,那么这个时候再执行FLASHBACK TABLE时会返回错误,此时需要指定RENAME TO子句。

闪回回收站中指定的表:

在使用“FLASHBACK TABLE ... TO BEFORE DROP”命令从回收站恢复表及其所有可能的相关对象时,可以指定表的原始名称或删除对象时分配给对象的系统生成名称。如果指定原始名称,且回收站包含多个具有该名称的对象,那么Oracle会最先恢复最晚移动到回收站的对象(LIFO:后进先出)。如果删除原始表后又在同一用户中创建了同名的新表,那么这个时候再执行FLASHBACK TABLE时会返回错误,此时需要指定RENAME TO子句。

下面给出一个使用回收站的例子:

需要特别注意的是,SYSTEM表空间的表被DROP后不会进入回收站空间。

闪回数据库(Flashback Database)

闪回数据库就是当数据库出现逻辑错误时,能够将整个数据库回退到出错前的那个状态。应用场景包括:
① 系统管理员误删除了用户。
② 用户截断了表(TRUNCATE)。
③ 用户错误地执行了某个批处理任务,或者该批处理任务的脚本编写有问题,使得多个表的逻辑出现问题,无法采用闪回表的方式进行恢复。
闪回数据库是进行时间点恢复的新战略。它能够快速将Oracle数据库恢复到以前的时间,以正确更正由于逻辑数据损坏或用户错误而引起的任何问题。闪回日志可用于捕获旧版本的变化块。当需要执行恢复时,可快速重放闪回日志,以将数据库恢复到错误前的时间点,并且只恢复改变的块。这一过程非常快,可将恢复时间从数小时缩短至几分钟。此外,它还非常易用。通过发出以下简单的命令,可将数据库恢复到2:05PM。
FLASHBACK DATABASE to '2:05 PM';
要想启动Flashback Database的功能,那么需要满足以下几个条件:
① 数据库在Archivelog模式
② 数据库在MOUNT或OPEN状态
③ 使用闪回恢复区,参数db_recovery_file_dest_size和db_recovery_file_dest都必须配置,因为flashback log必须要求放在flash recovery area里,如下所示:

在Flashback DB功能启用之后,Oracle启动了一个后台进程RVWR(Recovery Writer)负责把位于SGA中的Flashback Buffer中的Flashback Log写出到闪回恢复区中:

在启用闪回数据库功能的过程中,生成的告警日志如下所示:

与闪回数据库有关的几个重要视图如下所示:

闪回数据归档(Flashback Data Archive)

在Oracle 11g中,对闪回技术再次进行了扩展,提供了一个全新的FLASHBACK方式,称之为闪回数据归档(Flashback Data Archive)。闪回数据归档通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,用来和Undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响Undo策略。闪回数据归档可以根据需要指定哪些数据库对象需要保存历史变化数据,而不是将数据库中所有对象的变化数据都保存下来,这样可以极大地减少空间需求。需要注意的是,闪回数据归档并不是记录数据库的所有变化,而只是记录了指定表的数据变化。所以,闪回数据归档是针对对象的保护,是闪回数据库的有力补充。闪回数据归档区是一个逻辑概念,是从一个或者多个表空间中拿出一定的空间,来保存表的修改历史,这样就摆脱了对Undo数据的依赖,不利用Undo就可以闪回到归档策略内的任何一个时间点上。

闪回数据归档并不是记录数据库的所有变化,而只是记录了指定表的数据变化。所以,闪回数据归档是针对对象的保护,是闪回数据库的有力补充。闪回数据归档区是一个逻辑概念,是从一个或者多个表空间中拿出一定的空间,来保存表的修改历史,这样就摆脱了对Undo数据的依赖,不利用Undo就可以闪回到归档策略内的任何一个时间点上。操作闪回恢复区需要有“FLASHBACK ARCHIVE ADMINISTER”的权限。操作闪回恢复区需要有“FLASHBACK ARCHIVE ADMINISTER”的权限。开启闪回数据归档常用操作如下所示:

清除闪回归档区中的数据常用操作如下所示:

关于闪回数据归档的一些比较有用的视图如下所示:

  • DBA_FLASHBACK_ARCHIVE:闪回归档区信息。

  • DBA_FLASHBACK_ARCHIVE_TS:闪回归档有关表空间的信息。

  • DBA_FLASHBACK_ARCHIVE_TABLES:对应表所对应的闪回归档信息。

闪回数据归档的后台进程是fbda,如下所示:

如果对表指定了闪回数据归档区,那么不能对表进行如下操作:

  • 删除,重命名,或者修改列。

  • 进行分区或者子分区操作。

  • 转换LONG到LOB类型。

  • ALTER TABLE操作。

  • DROP、RENAME、TRUNACTE表。

真题1、You enabled Flashback Data Archive on the INVENTORY table. Which DDL operation is supported on the table after enabling Flashback Data Archive?

A、Drop the table.

B、Partition the table

C、Truncate the table.

D、Add a column to the table.

E、Rename a column in the table.

答案:D。

题目的意思是启用INVENTORY表的闪回数据归档,启用闪回数据归档之后在表上支持哪一项DDL操作?A、B、C和E都不能操作,A的示例如下所示:

scott@11gR1> DROP TABLE TEST1;

DROP TABLE TEST1

​ *

ERROR at line 1:

ORA-55610: Invalid DDL statement on history-tracked table

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

15 + 4 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部