闪回表( flashback table) 1将表回滚到一个过去的时间点或系统改变号scn上,用来快速恢复表的数据。 2用户对表数据的修改操作,都记录在撤销表空间中 3需要使用到与撤销表空间相关的undo信息。通过show parameeter undo命令可以了解这些信息。
查看和修改撤销表空间的信息
show parameter undo; alter system set undo_retention=1500 scope=both; show parameter undo;闪回表操作语法 flashback table 【 schema.】 table_name to {【before drop 【rename to new_table_name】 】|【scn | timestamp 】】 expr 【enable | disable 】 triggers}:
参数说明: schema:用户模式 before drop:表示恢复到删除之前。 new_table_name :重新定义表名称。 timestamp:时间戳,包括年月日时分秒。 expr:指定一个值或表达式。 enable triggers:触发器恢复后,呈启用状态。 disable triggers:触发器恢复后,呈禁用状态。默认情况下为此选项
闪回表的案例 测试数据
create table sct( id number(4), name varchar2(20) ); insert into sct values(1,'lili'); insert into sct values(2,'lilic'); commit;步骤 1获取数据没有删除前的时间
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY ------------------- 2017-06-06 17:55:082删除数据,提交
SQL> SQL> delete from sct where id=1; 已删除 1 行。 SQL> delete from sct where id=2; 已删除 1 行。 SQL> commit;3开启表的移动功能
SQL> --开启表的移动功能 SQL> alter table sct enable row movement; 表已更改。4 恢复数据 4.1通过时间点恢复数据
flashback table sct to timestamp to_timestamp('2017-06-06 17:55:08','yyyy-mm-dd hh24:mi:ss'); select * from sct;4.2通过系统改变号恢复数据
select timestamp_to_scn(to_date(‘2017-06-06 17:55:08’,’yyyy-mm-dd hh24:mi:ss’)) from dual; delete from sct where id=1; delete from sct where id=2; commit; flashback table sct to scn 6892471;