flashback table恢复数据

时间:2022-04-12 20:21:56

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中的内容保存的足够多。