当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。
设置ENABLE_FLASHBACK 为 1 后,开启闪回功能。
设置UNDO_RETENTION 大小,可以决定保留回滚段时间,回滚段保留的时间代表着可以闪回的时间长度。
开启闪回功能后,DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。即指定时刻的记录状态。从而完成闪回查询。闪回查询功能完全依赖于回滚段管理,对于 DROP 等误操作不能恢复。闪回特性可应用在以下方面:
1. 自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复;
2. 用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查看变化的数据
1.达梦开启闪回

目前ENABLE_FLASHBACK 置为 0 ,闪回功能是关闭的,下面开启这个参数
这2个参数可以动态修改,不要重启数据库的

2. 准备测试数据

在 '2021-11-19 01:39:34' 之前 表里面只有6条数据
3.闪回测试
为表insert一条新数据,并提交

insert into "SUYS"."LOCATIONA"("A", "B", "C") VALUES(7,'湖北', '007'); commit; |

然后查询
可以看到 在那个时间内 只有6条数据的
4.闪回版本查询
用户通过闪回版本查询子句,可以得到指定表过去某个时间段内,某列的全部变化版本,比如下面的例子
连续修改2次 A=8 这条记录的 B字段,然后使用回版本查询的伪列 VERSIONS_ENDTRXID进行查询
可以看到2次数据变化的内容,和
TRXID
信息,那么按照得到的trxid查询一下

可以看到这个时候,A=8 这行数据,这个时候B=河北,直接查询,这个时候已经是B=甘肃了