当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。
闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。如果提交了,还没有超过undo_retention的保留时长,可以通过闪回查询找回。闪回查询功能完全依赖于回滚段管理,对于 DROP 等误操作不能恢复。
设置ENABLE_FLASHBACK 为 1 后(ENABLE_FLASHBACK默认值为0),开启闪回功能。DM 会保留回滚段一段时间,回滚段保留的时间代表着可以闪回的时间长度。由UNDO_RETENTION 参数指定(UNDO_RETENTION 缺省值90秒,最大值1天)。(DM MPP、DMDSC 和 DMDPC 环境不支持闪回查询。)
闪回特性可应用在以下方面:
- 自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复;
- 用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查看变化的数据。
测试
1:开启闪回
SP_SET_PARA_VALUE (1, ‘ENABLE_FLASHBACK’, 1);
2:查看当前回滚段记录保留时间,根据实际调整。默认就是90s
select para_name,para_value,default_value,para_type from v$dm_ini where para_name like '%UNDO_RETENTION%';
3:调整UNDO_RETENTION,20min
4:创建表:
create table "SYSDBA"."TABLE_1"
(
"COLUMN_1" CHAR(10)
);
5:插入数据----注意不要只插入一条数据,只插入一条数据。
insert into TABLE_1 values('11');
insert into TABLE_1 values('11');
insert into TABLE_1 values('12');
commit;
select sysdate(); --2023-02-23 14:37:42
6:delete 表数据
delete from TABLE_1 where COLUMN_1='11';
commit;
select sysdate(); --2023-02-23 14:38:07
7:查询删除之前的数据
select * from TABLE_1 when timestamp '2023-02-23 14:37:42';