flashback table恢复数据
flashback table主要是是用undo 表空间的内容,进行对数据修改的回退操作
语法如下:
根据scn号来进行回退
SQL> flashback table kel.t1 to scn 896744;
根据时间来进行回退
SQL> flashback table kel.t1 to timestamp to_timestamp('2014-07-28 00:18:00','yyyy-mm-dd hh24:mi:ss');
1 准备测试数据
1.1 得到第一个修改的scn点
SQL> insert into t1 values (1,'kel'); 1 row created. SQL> commit; Commit complete.
SQL> select current_scn from v$database; CURRENT_SCN
-----------
896684
1.2 得到第二个修改的scn点
SQL> insert into kel.t1 values (2,'kel2'); 1 row created. SQL> commit; Commit complete. SQL> select current_scn from v$database; CURRENT_SCN
-----------
896697
1.3 得到第三个修改的scn点
SQL> insert into kel.t1 values (3,'kel3'); 1 row created. SQL> commit; Commit complete. SQL> select current_scn from v$database; CURRENT_SCN
-----------
896744
1.4 得到最后的scn点
SQL> delete from kel.t1 where id =2; 1 row deleted. SQL> commit; Commit complete. SQL> select current_scn from v$database; CURRENT_SCN
-----------
896761
2 进行恢复
在进行恢复的时候,必须要允许表进行row move ment
SQL> alter table kel.t1 enable row movement; Table altered.
2.1 第一次恢复
SQL> flashback table kel.t1 to scn 896684; Flashback complete. SQL> select * from kel.t1; ID NAME
---------- --------------------
1 kel
2.2 第二次恢复
SQL> flashback table kel.t1 to scn 896697; Flashback complete. SQL> select * from kel.t1; ID NAME
---------- --------------------
1 kel
2 kel2
2.3 第三次恢复
SQL> flashback table kel.t1 to scn 896744; Flashback complete. SQL> select * from kel.t1; ID NAME
---------- --------------------
1 kel
2 kel2
3 kel3
3 总结
在进行数据恢复的时候,不可能知道准确的SCN点或者时间点,只能进行猜测数据时间或者是scn来进行恢复。
flashback table 的功能依赖于UNDO表空间中的内容,可以反复的进行flashback table,只要UNDO中的内容保存的足够多。