/ 这是我的第213篇文章
达梦干货攻略
【Date:2021.06.23】

MY ARTICLE
当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。
闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。数据库会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。
GAN HUO
开启闪回
数据库默认是没有开启闪回
查询是否开启闪回,0为关闭,1为打开
SQL> select para_name,para_value from v$dm_ini where para_name='ENABLE_FLASHBACK';

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

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

再次查询闪回状态
SQL> select para_name,para_value from v$dm_ini where para_name='ENABLE_FLASHBACK';

GAN HUO
例:闪回查询特定时刻的 PERSON_TYPE2 表
SQL> CREATE TABLE PERSON.PERSON_TYPE2 AS SELECT * FROM PERSON.PERSON_TYPE;SQL> SELECT * FROM PERSON.PERSON_TYPE2;

查询当前时间
SQL> SELECT SYSDATE FROM DUAL;

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 '2021-06-23 09:53:20';

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

更新数据
SQL> SELECT SYSDATE FROM DUAL;

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 '2021-06-23 10:16:40' AND SYSDATE;

往期干货回顾
【内容】:林夕
【编辑】:王


文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。








