Oracle闪回(flashback)功能详解

0    384    1

Tags:

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

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

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

闪回技术分类:

(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)闪回数据归档是基于闪回归档区中的数据来实现的。

闪回查询(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;”。

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

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

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

您可能还喜欢...

发表回复