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

网友投稿 525 2023-11-23

背景

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

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

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

闪回技术主要是通过回滚段存储的 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博客 ” ,链接:http://blog.itpub-/69985512/viewspace-2727220/,如需转载,请注明出处,否则将追究法律责任。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:写在数据库国产化替代加速之际
下一篇:DockQuery x 达梦 国产数据库生态“加速跑”
相关文章

 发表评论

暂时没有评论,来抢沙发吧~