Oracle Flashback闪回机制
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;
|
评论暂时关闭