本章节主要介绍闪回技术在日常开发和数据库运维中所发挥的作用。
适用场景
| 软件 | 版本 |
|---|---|
| 操作系统 | Redhat 7 及以上版本 |
| DM 数据库 | DM 8.0 及以上版本 |
| CPU 架构 | x86、ARM、龙芯、飞腾等国内外主流 CPU |
相关参数设置
查询闪回功能状态,数据库默认关闭(0-关闭,1-打开)。示例语句如下所示:
SELECT name, |
输出结果:

- 开启闪回功能方法一,示例语句如下所示:
alter system set 'enable_flashback'=1 both; |
输出结果:

注意该方法设置参数时,参数名必须加单引号。
- 开启闪回功能方法二,示例语句如下所示:
SP_SET_PARA_VALUE (1, 'ENABLE_FLASHBACK', 1); |
获取参数,示例语句如下所示:
SELECT SF_GET_PARA_VALUE (1, 'ENABLE_FLASHBACK') in_file, |
由于回滚段默认每秒种都会自动清理,所以需要延长回滚记录的保留时间,单位是秒。回滚段参数太大容易引发回滚段膨胀,这里设置为 1200s。示例语句如下所示:
ALTER SYSTEM SET 'undo_retention'=1200 BOTH; |
输出结果:

闪回查询
按时间查询历史记录
通过指定一个时间(timestamp类型),通常可以用一个日期时间字符串表达。
测试在 disql 工具中进行,使用 dmhr 模式下的 city 表。示例语句如下所示:
SELECT * |
输出结果:

按事务 id 号查询历史记录
首先使用 versions_endtrxid 伪列查询事务 id 号。用户通过闪回版本查询子句,可以得到指定表过去某个时间段内,事务导致记录变化的全部记录,指定条件可以为时刻或事务号。
执行闪回版本查询,示例语句如下所示:
SELECT versions_endtrxid, * |
输出结果:

NULL 表示该行的版本仍然是当前版本。
- 第一次调整文员的最低工资为 3500 并提交,示例语句如下所示:
UPDATE dmhr.job SET MIN_SALARY = 3500 WHERE JOB_ID = 22;COMMIT; |
- 第二次调整文员的最低工资为 2800 并提交,示例语句如下所示:
UPDATE dmhr.job SET MIN_SALARY = 2800 WHERE JOB_ID = 22;COMMIT; |
再次执行闪回版本查询,示例语句如下所示:
SELECT versions_endtrxid, * |
输出结果:

两个事务分别对应了 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




