注册
dm8闪回功能测试
技术分享/ 文章详情 /

dm8闪回功能测试

奥特曼打小怪兽 2024/08/09 696 0 0

1DBMS_FLASHBACK 包

使用 DBMS_FLASHBACK 包,可以查询在指定时间或 LSN 时刻的数据库版本。

1.1相关方法

提供兼容 ORACLE 的 DBMS_FLASHBACK 包中四种方法。

1.1.1DISABLE

关闭会话闪回模式。
语法如下:
PROCEDURE DISABLE;

1.1.2ENABLE_AT_SYSTEM_CHANGE_NUMBER

以指定 LSN 打开会话闪回模式。
语法如下:
PROCEDURE ENABLE_AT_SYSTEM_CHANGE_NUMBER(QUERY_SCN IN BIGINT);
参数详解
QUERY_SCN 输入参数,指定闪回时刻 LSN。

1.1.3ENABLE_AT_TIME (包中有这个存储过程但是在调用的时候提示没有这个)

以指定时间打开会话闪回模式。
语法如下:
PROCEDURE ENABLE_AT_TIME(QUERY_TIME IN TIMESTAMP);
参数详解
QUERY_TIME 输入参数, 指定闪回时间。

1.1.4.GET_SYSTEM_CHANGE_NUMBER

获取系统当前 LSN 值。
语法如下:
FUNCTION GET_SYSTEM_CHANGE_NUMBER RETURN BIGINT;
返回值
返回系统当前 LSN

1.2使用说明

1.使用 DBMS_FLASHBACK 包,需要打开闪回 INI 参数 ENABLE_FLASHBACK。
2.打开会话闪回模式下不能执行 DML 和 DDL 操作,需要先调用包中方法 DISABLE 关闭闪回模式才能正常执行。
3.会话闪回模式下可以执行带闪回查询子句的语句,也可以执行不带闪回查询子句的语句;如果指定闪回查询子句中的 LSN/TIME 和会话闪回模式中的 LSN/TIME 相同,则查询结果一致,若不同则以指定的闪回查询子句为主。
4.在数据守护环境下,备库不支持使用 DBMS_FLASHBACK 包。
5.DM MPP 环境下不支持 DBMS_FLASHBACK 包。

2 闪回表

2.1 闪回表定义

语法格式:
FLASHBACK TABLE [<模式名>.]<表名> {,[<模式名>.]<表名>} TO <SCN | LSN | TIMESTAMP> <expr> [ <ENABLE|DISABLE> TRIGGERS ] ;
参数
1.< 模式名 > 指明该表属于哪个模式,缺省为当前模式;
2.< 表名 > 指明被创建的基表名,基表名最大长度 128 字节;
3.<expr> 指明闪回到的 LSN 值或 TIMESTAMP 值;
4.<ENABLE|DISABLE> TRIGGERS 指定是否开启触发器,ENABLE 为开启触发器,DISABLE 为关闭触发器,不指定则默认为关闭。

2.2 使用说明

1.使用闪回功能需要打开 dm.ini 中的 ENABLE_FLASHBACK 参数;
2.当前闪回表功能支持:批量闪回多个表、触发器的禁用与启用、DMDPC 环境(除使用 LOCAL 登录外)、DMDSC 环境;
3.当前闪回表功能不支持在 DM MPP 环境下使用;
4.闪回表利用的是 UNDO 表空间里记录的数据被改变前的值,只能闪回到 UNDO_RETENTION 指定值范围内的时间点;
5.用户必须具有 FLASHBACK ANY TABLE 系统权限或 FLASHBACK 对象权限
6.闪回表语句是作为单个事务处理来执行。同时闪回多个表时,必须成功闪回所有表,否则会回退整个事务。闪回作为 DDL 语句,开启自动提交时,闪回成功后会自动提交;
7.必须对要执行闪回操作的表启动行移动(分区表具有 MOVEMENT 功能的不能关闭,否则闪回可能会报错);
8.不会闪回受影响对象的统计信息;
9.闪回会保留所有现有的索引;
10.闪回中会正常检查约束条件,如果在闪回执行期间违反了任何约束条件,则会回滚闪回操作;
11.闪回不能跨越修改了表结构的 DDL。比如,在闪回数据之前,做过删除一个字段的操作,那么是无法闪回的;
12.不能对系统表、临时表、HUGE 表、内部辅助表、动态表等执行闪回表操作;
13.DMDPC 环境下由于各节点的 SCN/LSN 不同,只支持闪回到时间点 TIMESTAMP;
14.限制重复闪回。闪回作为 DDL,对于同一个表,不允许再次闪回到上一次闪回之前的 LSN/TIMESTAMP。

2.3开启闪回功能

1.打开ENABLE_FLASHBACK参数
#查看参数
select * from v$dm_ini t where t.PARA_NAME='ENABLE_FLASHBACK';

#如果没有打开的话 需要打开
SP_SET_PARA_VALUE (1, 'ENABLE_FLASHBACK', 1)

2.创建dbms_flashback包
select DISTINCT T.OBJECT_NAME from SYS.DBA_PROCEDURES t where t.OBJECT_NAME = 'DBMS_FLASHBACK';
使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包,默认已经创建。
如果不存在就需要创建
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_FLASHBACK');

以指定 LSN 为例使用闪回包进行查询。
image.png

image.png

image.png

最后关闭
DBMS_FLASHBACK.DISABLE;

说明:
1.这个包是在session级别的 
2.如果执行完DBMS_FLASHBACK.DISABLE;之后 就不能再查之前的版本了

4闪回表测试:

4.1闪回到指定 LSN

image.png
image.png
image.png

image.png
image.png

4.2闪回到指定 TIMESTAMP

image.png
image.png
image.png
image.png

4.3同时闪回多个表,指定 LSN,例子中的 LSN 需根据实际替换。

image.png
image.png
image.png
image.png
image.png
image.png
image.png

4.4带触发器的表闪回时禁用触发器的表现

image.png
image.png
image.png

5闪回查询测试

5.1闪回查询子句

使用说明
1.闪回查询只支持普通表(包括加密表与压缩表)、水平分区表和堆表,不支持临时表、列存储表、外部表与视图;
2.闪回查询中 lsn 的值,可以通过查询动态视图 VRLOG 或 VLSN_TIME 来确定,也可以通过闪回版本查询(见下节)的伪列来确定;
3.由于视图 V$LSN_TIME 每三秒收集一次 LSN/TIME 映射关系,因此基于时间进行闪回查询时可能存在三秒的误差,如果需要进行精确度更高的闪回查询,建议基于 LSN 进行闪回查询。
4.当闪回表作为 DDL 时,对于同一个表,不允许基于对上一次闪回表的 LSN 或 TIMESTAMP 进行闪回查询。

image.png
image.png
image.png

总结语句:
SELECT * FROM PERSON.PERSON_TYPE WHEN TIMESTAMP 'XXX';
SELECT * FROM PERSON.PERSON_TYPE AS OF SCN XXX;
用scn更好一些

5.2闪回版本查询

语法格式
<闪回版本查询子句>::=VERSIONS BETWEEN <闪回版本查询条件>
<闪回版本查询条件>::=TIMESTAMP <time_exp1> AND <time_exp2> |
SCN|LSN <lsn1> AND <lsn2>
参数
1.time_exp 日期表达式,一般用字符串方式表示。<time_exp1> 表示起始时间,<time_exp2> 表示结束时间
2.lsn 指定 LSN 值。<lsn1> 表示起始 LSN,<lsn2> 表示结束 LSN
使用说明
1.闪回版本查询支持普通表(包括加密表与压缩表)、水平分区表和堆表,不支持临时表、列存储表、外部表与视图;
2.支持将表 中的伪列作为闪回版本查询的查询项,辅助获取精准的闪回查询信息。
image.png
闪回版本查询

image.png

NULL 表示该行的版本仍然是当前版本。 就可以根据结果判断改变的是哪些值 然后找回我们想要的值。

5.3 闪回事务查询

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

举例说明
例 查询指定时间之后的事务信息,可为闪回查询操作提供参考。
SELECT * FROM V$FLASHBACK_TRX_INFO WHERE COMMIT_TIMESTAMP > ‘XXX’;
image.png

可以通过里面undo_sql 进行反向操作将数据找回来

6总结:

1.UNDO_RETENTION 设置了事务提交后回滚页保持时间,缺省为 90 秒。因此,超出 UNDO_RETENTION 时间之外的过期闪回版本,无法被闪回查询到。
2.由于回滚段默认每秒种都会自动清理,所以需要延长回滚记录的保留时间,单位是秒。
3.建议还是用scn 来判断
4.默认的undo_retention时间为60秒所以做实验的话建议调大这个值不然很容易就会报错

[执行语句1]:
FLASHBACK TABLE T TO LSN 12938860;
执行失败(语句1)
-9801: 闪回版本已过期

1条语句执行失败

上传到网页中图片不是很清楚清楚的可以看附件

dm8数据库 闪回查询功能测试.pdf

https://eco.dameng.com/

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服