Oracle Flashback闪回机制


Flashback的目的

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

Flashback家族介绍

数据库级别:Flashback Database
表级别:Flashback Drop和Flashback Table,Flashback Data Archive
记录级别:Flashback Version Query和Flashback Transaction Query

Flashback家族 Flashback Log
Tablespace Recycle Bin
UNDO 作用
Flashback Database
Yes     回滚数据库
Flashback Drop
  Yes   恢复误删除的表
Flashback Version Query
    Yes 恢复误操作的数据
Flashback Transaction Query
    Yes 同上
Flashback Table
    Yes 同上

Flashback 技术发展历程

Flashback Version/Transaction Query 和 Flashback Table

Flashback Query和Flashback Table都是利用undo实现回退功能,当需要闪回到过去某一时刻时,先利用Flashback Query查询,确认闪回的SCN或Timestamp,然后再利用Flashback Table真正实现闪回。
1. 9i 的 Flashback Query
9i的Flashback Query可以查询过去某个时间点对象的状态,测试如下:
系统当前时间为:
A105024@O02DMS1>alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';
A105024@O02DMS1>select sysdate from dual;

SYSDATE
-------------------
2011-12-16:02:51:16
test表里有一条数据:
A105024@O02DMS1>select * from test;

ID
----------
1
现把该数据删除:
A105024@O02DMS1>delete from test;
A105024@O02DMS1>commit;
此时test表中无数据:
A105024@O02DMS1>select * from test;

no rows selected

但是可以通过Flashback Query查询删除之前的数据:
A105024@O02DMS1>select * from test as of timestamp to_timestamp('2011-12-16:02:51:16','yyyy-mm-dd:hh24:mi:ss');

ID
----------
1

必要时还可以恢复数据:
A105024@O02DMS1>insert into test select * from test as of timestamp to_timestamp('2011-12-16:02:51:16','yyyy-mm-dd:hh24:mi:ss');
A105024@O02DMS1>commit;
  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容