1. 引用背景
当用户误操作删除数据时,可通过闪回技术恢复一定时间内的误删数据。
2. 闪回前提
dm.ini中ENABLE_FALSHBACK需置为1(启用闪回)
3. 闪回原理
闪回主要通过回滚段存储的UNDO记录来完成历史记录的还原。开启闪回功能后,DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指 定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出 特定事务号的记录。即指定时刻的记录状态。从而完成闪回查询。闪回查询功能完全依赖于 回滚段管理,对于 DROP 等误操作不能恢复。
4. 闪回时间限制
dm.ini中UNDO_RETENTION参数为闪回支持的时间范围。参数本意为事务提交后回滚页保持的时间。范围为0-86400(0-24小时)
5. 达梦数据库中闪回查询
测试环境表数据插入:
BEGIN
FOR I IN 1..5000 LOOP
INSERT INTO LYT.TB1 VALUES(I,'HELLO');
END LOOP;
END;
COMMIT;
select sysdate;
5.1 模拟更新数据
查询当前数据
通过时间戳查询历史数据
5.2 模拟删除数据
当前数据查询
通过时间戳查询历史数据
5.3 模拟插入闪回
测试数据插入
查询当前数据量
查询历史数据量
6. 闪回恢复数据
当前数据查询
执行update改变name:
当前数据查询
历史数据查询
抓取历史数据还原至新表:
注:通过CTAS创建的新表不包含任何原有约束,仅包含数据本身。
注:不能通过COUNT(*)判定闪回前后数据。V8.1.2.93之前的达梦版本(DM7/DM8)均有此bug,COUNT(*)出来的数据量同当前时间节点相同,SELECT *出来为正确信息。
更多达梦相关技术文档可访问