达梦(DM)闪回使用介绍
达梦(DM)闪回使用介绍
- 1 简介
- 2 开启闪回
- 2.1 参数优化
- 2.2 开启闪回
- 3 闪回表
- 4 闪回查询
1 简介
闪回技术是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。设置 ENABLE_FLASHBACK为1后,开启闪回功能。DM 会保留回滚段一段时间,回滚段保留的时间代表着可以闪回的时间长度。由UNDO_RETENTION参数指定。
开启闪回功能后,DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的 LSN,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定 LSN 的记录。即指定时刻的记录状态。从而完成闪回查询。闪回查询功能完全依赖于回滚段管理,对于DROP等误操作不能恢复。
2 开启闪回
2.1 参数优化
因闪回依赖于回滚段保留时间,由UNDO_RETENTION参数指定。当回滚段保留时间较小时,操作时间较为紧张,当保留时间过大时,又需要消耗较多的回滚段资源,所需需要综合指定一个合理的参数值。
修改UNDO_RETENTION参数值。
--查看参数默认值。默认值为90秒。
SQL> show parameter UNDO_RETENTION
行号 PARA_NAME PARA_VALUE
---------- -------------- ----------
1 UNDO_RETENTION 90.000000--修改参数值为900秒。
SQL> SP_SET_PARA_DOUBLE_VALUE(1,'UNDO_RETENTION',900);
DMSQL 过程已成功完成
已用时间: 10.193(毫秒). 执行号:2504.--查询修改后参数进行确认。
SQL> show parameter UNDO_RETENTION
行号 PARA_NAME PARA_VALUE
---------- -------------- ----------
1 UNDO_RETENTION 900.000000
2.2 开启闪回
开启闪回,ENABLE_FLASHBACK参数为动态系统级,修改后无需重启。
--查询当前参数值
SQL> show parameter ENABLE_FLASHBACK
行号 PARA_NAME PARA_VALUE
---------- ---------------- ----------
1 ENABLE_FLASHBACK 0--修改参数值
SQL> SP_SET_PARA_VALUE(1,'ENABLE_FLASHBACK',1);
DMSQL 过程已成功完成
已用时间: 8.059(毫秒). 执行号:2507.--查询修改后参数值
SQL> show parameter ENABLE_FLASHBACK
行号 PARA_NAME PARA_VALUE
---------- ---------------- ----------
1 ENABLE_FLASHBACK 1
3 闪回表
闪回表是在数据库联机时,通过只回退对指定表及其相关对象所做的更改,将表里的数据回退到历史的某个时间点,而不需要执行传统的时间点恢复操作。闪回使用限制明细可查看《DM8 SQL语言使用手册》17.1.2。
限制重复闪回。闪回作为DDL,对于同一个表,不允许再次闪回到上一次闪回之前的LSN/TIMESTAMP。所以,请明确需要闪回的LSN/TIMESTAMP后再进行操作。同时,对于 DROP 等误操作不能恢复。
表闪回举例:
SQL> insert into U_TEST.T_TEST VALUES('A');
影响行数 1
已用时间: 1.473(毫秒). 执行号:3605.
SQL> insert into U_TEST.T_TEST VALUES('B');
影响行数 1
已用时间: 1.428(毫秒). 执行号:3606.
SQL> commit;
操作已执行
已用时间: 2.925(毫秒). 执行号:3607.
SQL> SELECT CUR_LSN FROM V$RLOG;
行号 CUR_LSN
---------- --------------------
1 86545
已用时间: 0.284(毫秒). 执行号:3608.
SQL> insert into U_TEST.T_TEST VALUES('C');
影响行数 1
已用时间: 0.399(毫秒). 执行号:3609.
SQL> commit;
操作已执行
已用时间: 2.454(毫秒). 执行号:3610.
SQL> select * from U_TEST.T_TEST;
行号 C
---------- -
1 A
2 B
3 C
已用时间: 0.405(毫秒). 执行号:3611.
SQL> FLASHBACK TABLE U_TEST.T_TEST TO LSN 86545;
操作已执行
已用时间: 32.405(毫秒). 执行号:3612.
SQL> select * from U_TEST.T_TEST;
行号 C
---------- -
1 A
2 B
已用时间: 0.301(毫秒). 执行号:3613.
4 闪回查询
DM MPP环境不支持闪回查询。数据守护环境下,备库不支持闪回查询。DMDPC环境下仅支持基于时间进行闪回查询,不支持基于LSN进行闪回查询。
闪回查询举例:
SQL> insert into U_TEST.T_TEST VALUES('A');
影响行数 1
已用时间: 1.283(毫秒). 执行号:3616.
SQL> insert into U_TEST.T_TEST VALUES('B');
影响行数 1
已用时间: 1.472(毫秒). 执行号:3617.
SQL> COMMIT;
操作已执行
已用时间: 2.680(毫秒). 执行号:3618.
SQL> SELECT CUR_LSN FROM V$RLOG;行号 CUR_LSN
---------- --------------------
1 86807
已用时间: 0.563(毫秒). 执行号:3619.
SQL> select SYSTIMESTAMP();
行号 SYSTIMESTAMP()
---------- ---------------------------------
1 2025-06-21 17:25:16.731972 +08:00已用时间: 0.610(毫秒). 执行号:3620.
SQL> select * from U_TEST.T_TEST;
行号 C
---------- -
1 A
2 B
已用时间: 0.481(毫秒). 执行号:3621.
SQL> insert into U_TEST.T_TEST VALUES('C');
影响行数 1
已用时间: 0.405(毫秒). 执行号:3622.
SQL> COMMIT;
操作已执行
已用时间: 2.673(毫秒). 执行号:3623.
SQL> select * from U_TEST.T_TEST;
行号 C
---------- -
1 A
2 B
3 C
已用时间: 0.536(毫秒). 执行号:3624.
SQL> select * from U_TEST.T_TEST AS OF TIMESTAMP '2025-06-21 17:25:16.731972 +08:00';
行号 C
---------- -
1 A
2 B
已用时间: 2.212(毫秒). 执行号:3625.
SQL> select * from U_TEST.T_TEST AS OF LSN 86807;
行号 C
---------- -
1 A
2 B
已用时间: 1.813(毫秒). 执行号:3626.
达梦在线服务平台 https://eco.dameng.com