注册
达梦闪回查询使用分享
培训园地/ 文章详情 /

达梦闪回查询使用分享

holdbash 2023/03/30 1682 0 0
  • 使用说明
    闪回查询只支持普通表(包括加密表与压缩表)、临时表和堆表,不支持水平分区表、列存储表、外部表与视图;
    闪回查询中 trxid 的值,一般需要由闪回版本查询的伪列来确定。实际使用中多采用指定时刻的方式。
  • 开启闪回查询功能
    查询闪回功能状态,数据库默认关闭
    (0-关闭,1-打开)。示例语句如下所示:
    SELECT name,
    TYPE,
    VALUE,
    sys_value,
    file_value
    FROM v$parameter
    WHERE name LIKE '%FLASHBACK%';

方法一
alter system set 'enable_flashback'=1 both;
该方法设置参数时,参数名必须加单引号

方法二
SP_SET_PARA_VALUE (1, 'ENABLE_FLASHBACK', 1);

//scope 为 1 表示 dm.ini 文件和内存参数都修改,不需要重启服务器。
//scope 为 2 表示只修改 dm.ini 文件,服务器重启后生效。
//value: 设置的值。
由于回滚段默认每秒种都会自动清理,所以需要延长回滚记录的保留时间,单位是秒。回滚段参数太大容易引发回滚段膨胀,这里设置为 1200s。示例语句如下所示:
ALTER SYSTEM SET 'undo_retention'=1200 BOTH;
查询参数:
SELECT name,
TYPE,
VALUE,
sys_value,
file_value
FROM v$parameter
WHERE name = 'UNDO_RETENTION';

  • 常用闪回功能
  1. 按时间闪回查询
    通过指定一个时间(timestamp 类型),通常可以用一个日期时间字符串表达。测试在 disql 工具中进行,使用 dmhr 模式下的 city 表。示例语句如下所示:
    查询当前 city_id = 'CD' 时 city 表中的信息
    SELECT * FROM dmhr.city WHERE city_id = 'CD';
    闪回查询 2020-11-03 09:56:06前的 city 表中的信息
    SELECT * FROM dmhr.city WHEN TIMESTAMP '2020-11-03 09:56:06' WHERE city_id='CD';

  2. 按事务id查询
    SELECT versions_endtrxid,* FROM dmhr.job VERSIONS BETWEEN TIMESTAMP '2020-11-03 10:30:00' AND SYSDATE WHERE JOB_ID = 22;
    其中versions_endtrxid字段为NULL 表示该行的版本仍然是当前版本。执行两次更新数据后,再次查询
    SELECT versions_endtrxid, * FROM dmhr.job VERSIONS BETWEEN TIMESTAMP '2020-11-03 10:30:00' AND SYSDATE WHERE JOB_ID = 22;
    可根据 versions_endtrxid查询
    闪回事务查询提供系统视图 V$FLASHBACK_TRX_INFO,查看在事务级对数据库所做的更改。根据该视图信息,可以确定如何还原指定事务或指定时间段内的修改。
    查询指定时间之后的事务信息,示例语句如下所示:

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

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服