达梦数据闪回查询-快速恢复表

发布于:2025-08-14 ⋅ 阅读:(25) ⋅ 点赞:(0)

Time:2025/08/12

Author:skatexg

一、环境说明

DM数据库:DM8.0及以上版本

二、适用场景

研发在误操作或变更数据后,想马上恢复表到某个时间点,可以通过闪回查询功能快速实现(通过全量备份恢复时间长,成本高)

三、说明

  • 闪回查询只支持普通表(包括加密表与压缩表)、水平分区表和堆表,不支持临时表、列存储表、外部表与视图;
  • 闪回查询利用的是 UNDO 表空间里所记录的数据被改变前的值。因此,如果因保留时间超过了初始化参数 UNDO_RETENTION 所指定的值,从而导致闪回查询时所需要的 UNDO 数据被其他事务覆盖的话,那么就不能将表中数据恢复到指定的时间了
  • 数据守护环境下,备库不支持闪回查询

四、闪回查询开启与关闭

查询闪回功能状态,数据库默认关闭 (0-关闭,1-打开),通过如下语句查询开启状态

SELECT name,

TYPE,

VALUE,

sys_value,

file_value

FROM v$parameter

WHERE name LIKE '%FLASHBACK%';

输出结果:

开启闪回查询

SP_SET_PARA_VALUE (1, 'ENABLE_FLASHBACK', 1);--无需重启服务器

--scope 为 1 表示 dm.ini 文件和内存参数都修改,不需要重启服务器;--scope 为 2 表示只修改 dm.ini 文件,服务器重启后生效。

--value: 设置的值。

关闭闪回查询

SP_SET_PARA_VALUE (1, 'ENABLE_FLASHBACK', 0);----无需重启服务器

配置可闪回数据保留时间

由于回滚段默认每秒种都会自动清理,所以需要延长回滚记录的保留时间,单位是秒。回滚段参数太大容易引发回滚段膨胀,这里设置为 3600s。示例语句如下所示:

ALTER SYSTEM SET 'undo_retention'=3600 BOTH;

SELECT name,

TYPE,

VALUE,

sys_value,

file_value

FROM v$parameter

WHERE name = 'UNDO_RETENTION';

输出结果:

五、数据闪回查询

通过指定一个时间(timestamp 类型),用一个日期时间字符串表达。使用 test_zxg 模式下的 tab_1 表。测试如下:

-1)切换schema

set schema "test_zxg"

2)查询 tab_1 表中的信息

SELECT * FROM tab_1 where id =1;

3)更新 id = 1,更新时间为 '2025-08-12 16:42:00'

UPDATE tab_1 set name='cccccc' where id =1;

4)再次查询 id = 1 时表中的信息

SELECT * FROM tab_1 where id =1;

4)闪回查询 update 操作前表中的信息

SELECT * FROM tab_1 WHEN TIMESTAMP '2025-08-12 16:40:00' where id =1

六、数据恢复

为安全起见,先把闪回查询的数据保存到临时表,后续在根据业务逻辑,研发按需恢复

CREATE table tab_bak20208121650 as SELECT * FROM tab_1 WHEN TIMESTAMP '2025-08-12 15:40:00'

另:数据变更前的备份方法

1、在dml某表数据前,如果表行数不多(10万以内)可以先备份表,然后再做表变更

CREATE table tab_bak20208121650 as SELECT * FROM tab_1 where id

注意:数据闪回功能达梦工程师建议繁忙的生产环境关闭闪回,可能影响性能

----end----


网站公告

今日签到

点亮在社区的每一天
去签到