暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM8达梦数据库闪回查询

原创 达梦 2021-01-31
1030

本章节主要介绍闪回技术在日常开发和数据库运维中所发挥的作用。

适用场景

软件 版本
操作系统 Redhat 7 及以上版本
DM 数据库 DM 8.0 及以上版本
CPU 架构 x86、ARM、龙芯、飞腾等国内外主流 CPU

相关参数设置

查询闪回功能状态,数据库默认关闭(0-关闭,1-打开)。示例语句如下所示:

SELECT name,
TYPE,
VALUE,
sys_value,
file_value
FROM v$parameter
WHERE name LIKE '%FLASHBACK%';

输出结果:

参数设置

  • 开启闪回功能方法一,示例语句如下所示:
alter system set 'enable_flashback'=1 both;

输出结果:

disql 参数设置

注意

该方法设置参数时,参数名必须加单引号

  • 开启闪回功能方法二,示例语句如下所示:
SP_SET_PARA_VALUE (1, 'ENABLE_FLASHBACK', 1);

//scope 为 1 表示 dm.ini 文件和内存参数都修改,不需要重启服务器。
//scope 为 2 表示只修改 dm.ini 文件,服务器重启后生效。
//value: 设置的值。

获取参数,示例语句如下所示:

SELECT SF_GET_PARA_VALUE (1, 'ENABLE_FLASHBACK') in_file,
SF_GET_PARA_VALUE (2, 'ENABLE_FLASHBACK') in_mem;

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

ALTER SYSTEM SET 'undo_retention'=1200 BOTH;

SELECT name,
TYPE,
VALUE,
sys_value,
file_value
FROM v$parameter
WHERE name = 'UNDO_RETENTION';

输出结果:

参数设置

闪回查询

按时间查询历史记录

通过指定一个时间(timestamp类型),通常可以用一个日期时间字符串表达。

测试在 disql 工具中进行,使用 dmhr 模式下的 city 表。示例语句如下所示:

SELECT *
FROM dmhr.city
WHERE city_id = 'CD';

UPDATE dmhr.city
SET region_id = 10
WHERE city_id = 'CD';

SELECT *
FROM dmhr.city
WHERE city_id = 'CD';

SELECT *
FROM dmhr.city WHEN
TIMESTAMP WHERE '2020-11-03 09:56:06' city_id='CD';

输出结果:

按时间查询历史记录

按事务 id 号查询历史记录

首先使用 versions_endtrxid 伪列查询事务 id 号。用户通过闪回版本查询子句,可以得到指定表过去某个时间段内,事务导致记录变化的全部记录,指定条件可以为时刻或事务号。

执行闪回版本查询,示例语句如下所示:

SELECT versions_endtrxid, *
FROM dmhr.job VERSIONS BETWEEN TIMESTAMP '2020-11-03 10:30:00' AND SYSDATE
WHERE JOB_ID = 22;

输出结果:

按事务 id 号查询历史记录

NULL 表示该行的版本仍然是当前版本。

  • 第一次调整文员的最低工资为 3500 并提交,示例语句如下所示:
UPDATE dmhr.job SET MIN_SALARY = 3500 WHERE JOB_ID = 22COMMIT;
  • 第二次调整文员的最低工资为 2800 并提交,示例语句如下所示:
UPDATE dmhr.job SET MIN_SALARY = 2800 WHERE JOB_ID = 22COMMIT;

再次执行闪回版本查询,示例语句如下所示:

SELECT versions_endtrxid, *
FROM dmhr.job VERSIONS BETWEEN TIMESTAMP '2020-11-03 10:30:00' AND SYSDATE
WHERE JOB_ID = 22;

输出结果:

执行闪回版本查询

两个事务分别对应了 2 个版本,可以随意查询任何版本。示例语句如下所示:

SELECT * FROM dmhr.job WHEN TRXID 58519 WHERE JOB_ID=22;

输出结果:

执行闪回版本查询

显示了第一次提交后的数据。

闪回事务查询

闪回事务查询提供系统视图 V$FLASHBACK_TRX_INFO,查看在事务级对数据库所做的更改。根据该视图信息,可以确定如何还原指定事务或指定时间段内的修改。

查询指定时间之后的事务信息,示例语句如下所示:

SELECT commit_trxid, operation,table_name,undo_sql FROM V$FLASHBACK_TRX_INFO;

输出结果:

闪回事务查询

参考文档

更多 SQL 语言使用说明,请参考《DM_SQL 语言使用手册》,手册位于数据库安装路径 /dmdbms/doc 文件夹下。如有其他问题,请在社区内咨询。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论