ITPub博客

首页 > 数据库 > 国内数据库 > 国产数据库达梦DM8闪回功能简介

国产数据库达梦DM8闪回功能简介

原创 国内数据库 作者:zhaohf 时间:2020-10-15 16:48:40 0 删除 编辑

背景

当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。

达梦数据库闪回功能使用介绍

闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。设置ENABLE_FLASHBACK 为 1 后,开启闪回功能。 DM 会保留回滚段一段时间,回滚段保留的时间代表着可以闪回的时间长度。由 UNDO_RETENTION 参数指定。

开启闪回功能后, DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。即指定时刻的记录状态,从而完成闪回查询。闪回查询功能完全依赖于回滚段管理,对于 DROP 等误操作不能恢复。

注:对于DROP表的恢复,由于达梦数据库不存在回收站机制,所以对于DROP表操作无法flashback。无法像Oracle进行flashback table XXX to before drop;

开启闪回功能:

默认是闪回功能为关闭状态

SQL> select name,type,value from v$parameter where name='ENABLE_FLASHBACK';

LINEID     NAME             TYPE VALUE

---------- ---------------- ---- -----

1                         ENABLE_FLASHBACK SYS  0

 

SQL> alter system set 'ENABLE_FLASHBACK'=1 both;

 

SQL> select name,type,value from v$parameter where name='ENABLE_FLASHBACK';

LINEID     NAME             TYPE VALUE

---------- ---------------- ---- -----

1          ENABLE_FLASHBACK SYS  1

##或者修改参数文件dm.ini中ENABLE_FLASHBACK值为1,重启生效。

 

修改UNDO_RETENTION

默认UNDO保留时间为900秒(15分钟)

SQL> select name,type,value from v$parameter where name = 'UNDO_RETENTION';

LINEID     NAME           TYPE VALUE    

---------- -------------- ---- ----------

1          UNDO_RETENTION SYS  900.000000

 

SQL> alter system set 'UNDO_RETENTION'=3600 both;

 

SQL>  select name,type,value from v$parameter where name = 'UNDO_RETENTION';

LINEID     NAME           TYPE VALUE     

---------- -------------- ---- -----------

1          UNDO_RETENTION SYS  3600.000000

闪回测试

创建表并插入数据,记录当前时间:

SQL> create table T1 (id int,name varchar(100));

操作已执行

已用时间: 25.210(毫秒). 执行号:5.

SQL> insert into  T1 values(1,'aaa');

insert into  T1 values(2,'bbb');

影响行数 1

已用时间: 1.093(毫秒). 执行号:6.

SQL> 影响行数 1

已用时间: 0.359(毫秒). 执行号:7.

SQL> insert into  T1 values(3,'ccc');

影响行数 1

已用时间: 0.546(毫秒). 执行号:8.

SQL> commit;

操作已执行

已用时间: 1.507(毫秒). 执行号:9.

SQL> select * from T1;

LINEID     ID          NAME

---------- ----------- ----

1          1           aaa

2          2           bbb

3          3           ccc

已用时间: 0.887(毫秒). 执行号:10.

SQL> select sysdate from dual;

行号     SYSDATE                                                                                            

---------- ---------------------------

1          2020-06-29 14:00:31

已用时间: 0.931(毫秒). 执行号:11.

模拟误删数据,并记录当前时间:

SQL> delete from T1 where id=1;

影响行数 1

已用时间: 0.877(毫秒). 执行号:12.

SQL> commit;

操作已执行

已用时间: 1.366(毫秒). 执行号:13.

SQL> select sysdate from dual;

行号     SYSDATE                                                                                            

---------- ---------------------------

1          2020-06-29 14:02:28

已用时间: 0.174(毫秒). 执行号:14.

SQL> select * from T1;

行号     ID          NAME

---------- ----------- ----

1          2           bbb

2          3           ccc

已用时间: 0.780(毫秒). 执行号:15.

闪回查询到误删数据前

----DMDSC架构闪回查询

SQL> select * from T1 when timestamp '2020-06-29 14:01:00';

select * from T1 when timestamp '2020-06-29 14:01:00';

第1 行附近出现错误[-2020]:DSC下不支持该操作.

已用时间: 0.455(毫秒). 执行号:0.

 

----单实例架构闪回查询

SQL> select * from T1 when timestamp '2020-06-29 14:01:00';

LINEID     ID          NAME

---------- ----------- ----

1          1           aaa

2          2           bbb

3          3           ccc

已用时间: 0.781(毫秒). 执行号:19.

结语

DM8 对于闪回查询的支持较好,与oracle的使用方法类似。但DMDSC架构对于闪回查询功能不支持,同时由于达梦没有回收站功能,无法对drop的表进行闪回。

下期将介绍达梦数据库的功能——审计的使用。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69985512/viewspace-2727220/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2020-10-15

  • 博文量
    1
  • 访问量
    1275