oracle Flashback Query简介

Flashback 是ORACLE 自9i 就开始提供的一项特性,在9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为Flashback Query。

一、Flashback Query

正如前言中所提,Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据!

什么是多版本读一致性

Oracle 采用了一种非常优秀的设计,通过undo 数据来确保写不堵塞读,简单的讲,不同的事务在写数据时,会将数据的前映像写入undo 表空间,这样如果同时有其它事务查询该表数据,则可以通过undo 表空间中数据的前映像来构造所需的完整记录集,而不需要等待写入的事务提交或回滚。

flashback query 有多种方式构建查询记录集,记录集的选择范围可以基于时间或基于scn,甚至可以同时查询出记录在undo 表空间中不同事务时的前映象。用法与标准查询非常类似,要通过flashback query 查询undo 中的撤销数据,最简单的方式只需要在标准查询语句的表名后面跟上as of timestamp(基于时间)或as of scn(基于scn)即可。as of timestamp|scn 的语法是自9iR2 后才开始提供支持。

1、As of timestamp 的示例:

SQL>  alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss';

会话已更改。

SQL> select sysdate from dual;

SYSDATE

-------------------

2009-10-15 19:04:16

SQL> select * from A;

ID

----------

2

1

3

4

模拟用户误操作,删除数据

SQL> delete from A;

已删除4行。

SQL> commit;

提交完成。

SQL> select * from A;

未选定行

查看删除之前的状态:

假设当前距离删除数据已经有5 分钟左右的话:

SQL> select * from A as of timestamp sysdate-5/1440;

ID

----------

2

1

3

4

或者:

SQL>select * from A as of timestamp to_timestamp('2009-10-15 19:04:16','YYYY-MM-DD hh24:mi:ss');

ID

----------

2

1

3

4

用Flashback Query恢复之前的数据:

SQL>Insert into A select * from A as of timestamp to_timestamp('2009-10-15 19:04:16','YYYY-MM-DD hh24:mi:ss');

已创建4行。

SQL> COMMIT;

提交完成。

SQL> select * from A;

ID

----------

2

1

3

4

如上述示例中所表示的,as of timestamp 的确非常易用,但是在某些情况下,我们建议使用as of scn 的方式执行flashback query,比如需要对多个相互有主外键约束的表进行恢复时,如果使用as of timestamp 的方式,可能会由于时间点不统一的缘故造成数据选择或插入失败,通过scn 方式则能够确保记录的约束一致性。

2. As of scn 示例

查看SCN:

SELECT dbms_flashback.get_system_change_number FROM dual;

SELECT CURRENT_SCN FROM V$DATABASE;

SQL> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN

-----------

1095782

删除数据:

SQL> delete from A;

已删除4行。

SQL> commit;

提交完成。

查看删除之前的状态:

SQL> select * from A as of scn 1095782;

ID

----------

2

1

3

4

用Flashback Query恢复之前的数据:

SQL> insert into A select * from A as of scn 1095782;

已创建4行。

SQL> commit;

提交完成。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2024-10-03 22:03:48

oracle Flashback Query简介的相关文章

Oracle Flashback Database简介

Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数.要使用flashback的特性,必须启用自动撤销管理表空间. 在Oracle 10g中, Flash back家族分为以下成员: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种) 和Fla

oracle Flashback DROP简介

Flashback Drop 是从Oracle 10g 开始出现的, 用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle Bin(表空间回收站),这个功能和windows的回收站非常类似. Flashback 不支持sys用户. system表空间下的对象,也不能从回收站里拿到.故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空. 1. Tablespace Recycle Bin 从Oracle 10g 开始, 每个表

oracle Flashback version Query简介

相对于Flashback Query 只能看到某一点的对象状态, Oracle 10g引入的Flashback Version Query可以看到过去某个时间段内,记录是如何发生变化的. 根据这个历史,DBA就可以快速的判断数据是在什么时点发生了错误,进而恢复到之前的状态. 先看一个伪列 ORA_ROWSCN.  所谓的伪列,就是假的,不存在的数据列,用户创建表时虽然没有指定,但是Oracle为了维护而添加的一些内部字段,这些字段可以像普通文件那样的使用. 最熟悉的伪列就是 ROWID, 它相当

Oracle Flashback闪回机制简介

Flashback的目的 在有Flashback之前,如果你对数据误操作,并已提交,这时想 回退该误操作,将会是很件麻烦的事情.有人可能会说可以用备份恢复到误操作之前,但正 确的操作数据也一起没了.唯一可能的办法就是日志挖掘,但日志挖掘非常繁琐,很难定位 . 因此,Oracle推出了Flashback技术,主要目的就是为了恢复误操作. Flashback家族介绍 数据库级别:Flashback Database 表级别: Flashback Drop和Flashback Table,Flashb

Oracle 闪回特性(Flashback Query、Flashback Table)

--================================================== -- Oracle 闪回特性(Flashback Query.Flashback Table) --==================================================       Oracle 闪回查询是指针对特定的表来查询特定的时间段内的数据变化情况来确定是否将表闪回到某一个特定的时刻以保证数据无讹误存在. 这个特性大大的减少了采用时点恢复所需的工作量以及

9i新特性之Flashback Query的应用-------------针对DML误操作的恢复(2)

恢复 用DBMS_FLASHBACK包   DBMS_FLASHBACK 包提供了以下几个函数:   ENABLE_AT_TIME:设置当前SESSION 的闪回查询时间 ENABLE_AT_SYSTEM_CHANGE_NUMBER:设置当前SESSION的闪回查询SCN GET_SYSTEM_CHANGE_NUMBER:取得当前数据库的SCN       DISABLE:关闭当前SESSION 的闪回查询       如: SQL> select dbms_flashback.get_syst

9i新特性之Flashback Query的应用-------------针对DML误操作的恢复(1)

恢复  9i新特性之Flashback Query的应用-------------针对DML误操作的恢复   作者:刘颖博 时间:2003-12-29 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   在9i之前,如果出现DML的误操作,只能通过备份来完成基于时间点的恢复,9i给提供了一个新的特性Flashback Query,我们可以应用此特性,可以很方便的实现恢复.但是要注意的是,Flashback Query 仅仅是一个查询的机制,不会真正的UNDO任何数

oracle flashback详解2

这部分的内容,其实早在10年年初就学习过,也记录了相关的笔记.但很多知识不用就慢慢被遗忘了.今天无意中听到同事在讨论问题:为什么删除了一个占用空间大的表后,表空间并没有释放呢? 职业的原因,自己在想Oracle Drop table的过程是怎么实现的,是不是要做个跟踪看下.后来想起在10g后,Oracle有了Flashback的功能,删除表的时候会先放在RecycleBin中,并不真正的物理删除,所以表空间dba_free_space是不是不会有变化? 今天重新翻了下之前的笔记,并做了试验,发现

Oracle Flashback 技术大解密

Oracle Flashback 技术大解密                                                                                                          作者:吴伟龙   Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数.要使用flashback的特性,必须启用自动撤销管理表空间.   在Oracle 10g中, Flash back