dm8闪回技术

闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。设置ENABLE_FLASHBACK 为 1 后,开启闪回功能。DM 会保留回滚段一段时间,回滚段保留的时间代表着可以闪回的时间长度。由 UNDO_RETENTION 参数指定。增大这个参数可能会导致更多的UNDO表空间使用,不易回收,影响性能。这种用空间换时间的策略也存在限制,不可能无限地恢复任何时间点的误操作。针对那些“及时”发现的误操作,使用该方法进行恢复是非常有效的
开启闪回功能后,DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。即指定时刻的记录状态。从而完成闪回查询。闪回查询功能完全依赖于回滚段管理,对于 DROP 等误操作不能恢复。闪回特性可应用在以下方面:
1.自我维护过程中的修复:当一些记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复;
2.用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查看变化的数据。
测试示例
查看系统ENABLE_FLASHBACK和UNDO_RETENTION
select para_name , para_value from v$dm_ini where para_name like '%FLASHBACK' or para_name like '%RETENTION';

 


修改回滚段保留时间(单位秒)和打开闪回功能
sp_set_para_double_value(1,'UNDO_RETENTION',9000.000);
sp_set_para_value(1,'ENABLE_FLASHBACK',1);

 


创建测试表和数据
create table test_tab_01 (id int , name varchar(20));
insert into test_tab_01 values (1,'zz');
insert into test_tab_01 values (2,'ww');
insert into test_tab_01 values (3,'xx');

 


修改表数据
delete test_tab_01 where id = 1 ;
insert into test_tab_01 values (4,'Jany');
commit ;

 


修改之后查询表结果和闪回查询表指定时刻没修改之前做对比
select * from test_tab_01
union all
select * from test_tab_01 when timestamp '2021-12-30 20:13:00';

 


闪回版本查询,可以查看历史记录
select versions_starttime,versions_endtime,id,name from test_tab_01 versions between timestamp '2021-12-30 11:10:00' and sysdate;

 




通过闪回版本查询定位到具体时间点,可恢复指定时间之前的数据
备份test_tab_01表
create table test_tab_01_bak as select * from test_tab_01 ;
创建临时表存放指定时间的闪回数据
create temporary table tmp_tab_01 as select * from test_tab_01
when timestamp '2021-12-30 20:13:00';
删除test_tab_01表
drop table test_tab_01 ;
恢复test_tab_01表的数据为临时表的数据
create table test_tab_01 as select * from tmp_tab_01 ;
比较表数据
select * from test_tab_01_bak
union all
select * from test_tab_01 ;

 

https://eco.dameng.com

posted @ 2021-12-31 11:29  秋风无落叶  阅读(88)  评论(0)    收藏  举报