点击上方蓝色字体关注我们

当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。数据库会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。


环境说明

本文介绍的是达梦数据库管理系统DM8的闪回查询功能。


正文

开启闪回
数据库默认是没有开启闪回。
SQL> select para_name,para_value from v$dm_ini where para_name='ENABLE_FLASHBACK';

开启闪回
SQL> SP_SET_PARA_VALUE(1,'ENABLE_FLASHBACK',1);

闪回查询
例:闪回查询特定时刻的 PERSON_TYPE2 表。
创建测试表PERSON_TYPE2 表。
SQL> CREATE TABLE PERSON.PERSON_TYPE2 AS SELECT * FROM PERSON.PERSON_TYPE;SQL> SELECT * FROM PERSON.PERSON_TYPE2;

查询当前时间
SQL> SELECT SYSDATE;

插入数据
SQL> INSERT INTO PERSON.PERSON_TYPE2 VALUES(5,'防损员');SQL> INSERT INTO PERSON.PERSON_TYPE2 VALUES(6,'保洁员');SQL> COMMIT;

SQL> SELECT * FROM PERSON.PERSON_TYPE2;

查询数据插入之前的数据
SQL> SELECT * FROM PERSON.PERSON_TYPE WHEN TIMESTAMP '2024-08-27 09:23:10'

闪回版本查询
用户通过闪回版本查询子句,可以得到指定表过去某个时间段内,事务导致记录变化的全部记录。指定条件可以为时刻,或事务号。
查询数据
SQL> select * from person.person_type2;

查询系统当前时间
SQL> SELECT SYSDATE;

更新数据
UPDATE PERSON.PERSON_TYPE2 SET NAME='保安员' WHERE PERSON_TYPEID=5;COMMIT;UPDATE PERSON.PERSON_TYPE2 SET NAME='收银员' WHERE PERSON_TYPEID=5;COMMIT;

进行闪回版本查询,获得指定时间段内变化的记录。
SQL> SELECT VERSIONS_ENDTRXID, NAME FROM PERSON.PERSON_TYPE2 VERSIONS BETWEEN TIMESTAMP '2024-08-27 09:26:27' AND SYSDATE;



总结

本次介绍达梦数据库闪回查询。以上为本期分享,希望能带给大家帮助。想要了解更多往期干货,可访问页面最下方#达梦技术干货攻略#合集或下方相关分享。在此邀请更多学员参与“达梦技术干货投稿活动”,稿件获选后将在达梦“干货分享”专栏进行发布,欢迎来稿!
作者:林夕
排版:达梦培训中心


一周热文




DM8并行查询


达梦E学
微信号:DM-Elearning
扫码关注查看更多内容
点击下方在看,分享本文
文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。










