所谓闪回表,就是将表里的数据回退到历史上的某个时间点,比如回退到误删除数据之前的时间点,从而将误删除的数据恢复回来。在这个操作过程中,数据库仍然可用,而且不需要额外的空间。
闪回表利用的是undo表空间里记录的数据被改变前的值。因此,如果闪回表时所需要的undo数据块里,而在把表闪回到以前某个时间点时,在那个时间上,该行数据位于B数据块里。于是在闪回表的操作中,数据行从当前的A数据块转移到了B数据块,因此在闪回表之前,必须启用数据行的转移特性,如下所示:
SQL>alter table t enable row movement;
关闭行迁移:
SQL>alter table t disable row movement;
闪回的一个实例:
SQL> select count(*) from tmp_aaa;
COUNT(*)
----------
14
SQL> delete from tmp_aaa;
14 rows deleted
SQL> commit;
Commit complete
SQL> select count(*) from tmp_aaa;
COUNT(*)
----------
0
SQL> alter table tmp_aaa enable row movement;
Table altered
SQL>
SQL> flashback table tmp_aaa to timestamp to_date('2011-9-24 05:30:00','yyyy-mm-dd hh24:mi:ss');
Done
SQL> select count(*) from tmp_aaa;
COUNT(*)
----------
14
注:闪回表是基于时间点的,闪回表成功