闪回表( 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:08
2删除数据,提交
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;