注册
达梦闪回-练习过程
技术分享/ 文章详情 /

达梦闪回-练习过程

太阳当空赵 2022/12/21 2012 3 0

ENABLE_FLASHBACK 0 动态,系统级,是否启用闪回查询,0:不启用;1:启用

闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。设置

ENABLE_FLASHBACK 为 1 后,开启闪回功能。DM 会保留回滚段一段时间,回滚段保留的

时间代表着可以闪回的时间长度。由 UNDO_RETENTION 参数指定。

开启闪回功能后,DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指

定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出

特定事务号的记录。即指定时刻的记录状态。从而完成闪回查询。闪回查询功能完全依赖于

回滚段管理,对于 DROP 等误操作不能恢复。闪回特性可应用在以下方面:

自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复;

用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查看变化的数据。
V$FLASHBACK_TRX_INFO可查看闪回信息。
select name,type,value from v$parameter where name in (‘ENABLE_FLASHBACK’,‘UNDO_RETENTION’);

NAME TYPE VALUE
ENABLE_FLASHBACK SYS 0
UNDO_RETENTION SYS 90.000000
–修改参数,UNDO_RETENTION最大86400也就是1天
alter system set ‘ENABLE_FLASHBACK’ =1 both;
alter system set ‘UNDO_RETENTION’ = 9000;

select name,type,value from v$parameter where name=‘ENABLE_FLASHBACK’;

NAME TYPE VALUE
ENABLE_FLASHBACK SYS 1
UNDO_RETENTION SYS 9000.000000

–创建表
create table t1(id int,c_name varchar(100));
insert into t1 values(1,‘张三’);
insert into t1 values(2,‘李四’);
insert into t1 values(3,‘王五’);

–删除数据,插入数据,获取当前时间
delete t1 where id = 3;
insert into t1 values(4,‘赵六’);
commit;
select sysdate from dual;–2022-01-20 16:49:37
–查询数据
select * from t1 when timestamp ‘2022-01-20 16:49:37’

ID C_NAME
3 王五

select versions_starttime,versions_endtime,id,c_name from t1 versions between timestamp ‘2022-01-20 16:49:37’ and sysdate;

VERSIONS_STARTTIME VERSIONS_ENDTIME ID C_NAME
2022-01-20 16:49:37 NULL 1 张三
2022-01-20 16:49:37 NULL 2 李四
2022-01-20 16:49:37 NULL 3 王五
2022-01-20 16:49:37 NULL 4 赵六
– 将t1表备份
create table t1_bak as select * from t1;
– 创建临时表存放指定时间的闪回数据
create table t1_tmp as select * from t1 when timestamp ‘2022-01-20 16:49:37’
–删除t1表
drop table t1 ;
– 新建t1表,并将临时表t1_tmp 的数据导不进去
create table t1 as select * from t1_tmp
–t1表恢复了删除的数据
select * from t1;

insert into t1 select * from t1_bak;

–也可以通过闪回事务查询以视图V$FLASHBACK_TRX_INFO查询在事务级对数据库所做的更改
select * from V$FLASHBACK_TRX_INFO

希望达梦越来越强!

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服