DM 8 达梦数据库闪回查询(Flashback)

1. 启用闪回查询

当系统 INI 参数 ENABLE_FLASHBACK 置为 1 时,闪回功能开启,可以进行闪回查询。MPP 环境不支持闪回查询。

SQL> select name,type,value from v$parameter where name='ENABLE_FLASHBACK';

行号     name             TYPE VALUE

---------- ---------------- ---- -----

1          ENABLE_FLASHBACK SYS  0

 

已用时间: 40.139(毫秒). 执行号:4.

 

 

改参数是SYS级别的,修改后立即生效:

SQL> alter system set 'ENABLE_FLASHBACK'=1 both;

DMSQL 过程已成功完成

已用时间: 15.364(毫秒). 执行号:5.

 

SQL> select name,type,value from v$parameter where name='ENABLE_FLASHBACK';

行号     name             TYPE VALUE

---------- ---------------- ---- -----

1          ENABLE_FLASHBACK SYS  1

已用时间: 4.721(毫秒). 执行号:6.

 

 

注意:

修改参数后,之前没有重启,测试的时候一直报:flashback version has been out of date.的错误,但根据参数的类型,报错查询,是系统级别修改后立即生效的。 后来重启数据库之后,该错误消失:

SQL> select from anqing when timestamp ‘2018-08-31 23:09:20’;

select from anqing when timestamp ‘2018-08-31 23:09:20’;

[-9801]:flashback version has been out of date.

 

2. 闪回查询子句

用户通过闪回查询子句,可以得到指定表过去某时刻的结果集。闪回查询只支持普通表(包括加密表与压缩表)、临时表和堆表,不支持水平分区表、垂直分区表、列存储表、外部表与视图。

 

 

语法格式:

<闪回查询子句>::=WHEN |

参数

1.time_exp 一个日期表达式,一般用字符串方式表示

2.trxid 指定事务 ID 号

 

 

#通过时间:

SQL> create table test(id int);

操作已执行

已用时间: 20.815(毫秒). 执行号:7.

 

SQL> insert into test values(1);

影响行数 1

已用时间: 0.706(毫秒). 执行号:8.

 

SQL> commit;

操作已执行

已用时间: 0.988(毫秒). 执行号:9.

 

SQL> select sysdate();

 

行号     sysdate()                                                                                           

---------- ----------------------------------------------

1          2020-08-25 21:15:06

 

已用时间: 0.756(毫秒). 执行号:10.

 

SQL> insert into test values(2);

影响行数 1

已用时间: 0.381(毫秒). 执行号:11.

 

SQL> commit;

操作已执行

已用时间: 0.665(毫秒). 执行号:12.

 

 

#指定时间后只能看到一条数据:

SQL> select * from test when timestamp '2020-08-25 21:15:06';

LINEID     ID         

---------- -----------

1          1

 

指定 TRXID 闪回查询:注意这里只针对update 有效,如果是insert,则没有效果:

 

#根据 TRXID 确定版本。

SQL> update test set id=3 where id=2;

影响行数 1

已用时间: 1.034(毫秒). 执行号:18.

 

SQL> commit;

操作已执行

已用时间: 0.680(毫秒). 执行号:19.

 

#查看VERSIONS_ENDTRXID,如果是insert,这里VERSIONS_ENDTRXID则为NULL:

SQL> select versions_endtrxid, id from test versions between timestamp '2020-08-25 21:15:06' and sysdate;

行号     VERSIONS_ENDTRXID    id         

---------- -------------------- -----------

1          NULL                 1

2          NULL                 3

3          8024                 2

 

已用时间: 0.381(毫秒). 执行号:20.

 

SQL> SELECT * FROM test WHEN TRXID 8024;

行号     id         

---------- -----------

1          1

2          2

 

已用时间: 0.664(毫秒). 执行号:21.

SQL>

 

3. 闪回版本查询

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

闪回版本查询支持普通表(包括加密表与压缩表)、临时表和堆表,不支持水平分区表、垂直分区表、列存储表、外部表与视图。

 

语法格式

<闪回版本查询子句>::=VERSIONS BETWEEN |

参数

1.time_exp 日期表达式,一般用字符串方式表示。time_exp1 表示起始时间,time_exp2 表示结束时间

trxid 指定事务 ID 号,整数表示。trxid1 表示起始 trxid,trxid2 表 示结束 trxid

 

SQL> update test set id=100 where id=1;

影响行数 1

已用时间: 1.010(毫秒). 执行号:22.

 

SQL> commit;

操作已执行

已用时间: 0.869(毫秒). 执行号:23.

 

SQL> select versions_endtrxid, id from test versions between timestamp '2020-08-25 21:15:06' and sysdate;

行号     VERSIONS_ENDTRXID    id         

---------- -------------------- -----------

1          NULL                 100

2          NULL                 3

3          8025                 1

 

已用时间: 0.449(毫秒). 执行号:24.

 

4. 闪回事务查询

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

 

SQL> select * from v$flashback_trx_info where commit_timestamp > '2020-08-25 21:15:06';

你可能感兴趣的:(DM 8 达梦数据库闪回查询(Flashback))