DM 闪回查询

一、概述

对于用户的DML操作,达梦数据库提供了闪回查询功能。对于错误的数据修改和删除,通过闪回查询,可以方便地进行恢复。闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原,在DM8中,需要设置ENABLE_FLASHBACK 为 1来开启数据库的闪回功能,通过UNDO_RETENTION参数设定可以闪回的时间长度。

二、闪回功能参数值的查询与设置:

与闪回功能相关的参数主要有两个,分别是ENABLE_FLASHBACK、UNDO_RETENTION,前者为闪回开头,为1时开启,后者为闪回时间长度,通过v d m i n i 、 v dm_ini、v dminivparameter视图及系统提供的函数均可以查询它们的值。

  • 1.通过v$dm_ini查询参数值:
select para_name, para_value, para_type, descriptIon from v$dm_ini where para_name='ENABLE_FLASHBACK';

在这里插入图片描述

SQL> select para_name, para_value, para_type, descriptIon from v$dm_ini where para_name='UNDO_RETENTION';

在这里插入图片描述

SQL> select para_name, para_value, para_type, descriptIon from v$dm_ini where para_name='UNDO_RETENTION';

在这里插入图片描述

  • 2.通过v$parameter查询参数值:
SQL> select name, type, value, description from v$parameter where name='ENABLE_FLASHBACK';

在这里插入图片描述

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

在这里插入图片描述

  • 3.通过系统函数查询参数值:

通过上面的查询,可以看到ENABLE_FLASHBACK为整型变量,而UNDO_RETENTION为浮点型变量。通过SF_GET_PARA_VALUE函数进行查询。

SQL> SELECT SF_GET_PARA_VALUE(1, 'ENABLE_FLASHBACK');

在这里插入图片描述

SQL> SELECT SF_GET_PARA_VALUE(1, 'UNDO_RETENTION');

在这里插入图片描述

上面的执行结果可以看到,SF_GET_PARA_VALUE查询UNDO_RETENTION值时报错,原因是UNDO_RETENTION值类型为浮点型,需要用SF_GET_PARA_DOUBLE_VALUE来查询。如下图示:

SQL> SELECT SF_GET_PARA_DOUBLE_VALUE(1, 'UNDO_RETENTION');

在这里插入图片描述

  • 4.设置ENABLE_FLASHBACK参数。

可以使用SP_SET_PARA_VALUE函数来设置数据库参数值。

SQL> SP_SET_PARA_VALUE(1, 'ENABLE_FLASHBACK', 1);

在这里插入图片描述

  • 5.设置UNDO_RETENTION参数。
SQL> SP_SET_PARA_VALUE(1, 'UNDO_RETENTION', 90);

在这里插入图片描述
同样地,用SP_SET_PARA_VALUE函数进行报错,原因也是UNDO_RETENTION值类型为浮点型,需要用SP_SET_PARA_DOUBLE_VALUE函数进行设置。

SQL> SP_SET_PARA_DOUBLE_VALUE(1, 'UNDO_RETENTION', 3600);

在这里插入图片描述
通过上面对两个主要参数的设置后,DM数据库的闪回查询功能已经开启,并将回滚数据保留一段时间,方便用户进行误操作的恢复。

三、闪回查询子句

通过闪回查询子句,可以得到指定表过去某时刻的结果集。指定条件可以为时刻,或事务号,实际使用中多采用指定时刻的方式。
举例如下:
示例表为SALES模式下的CUSTOMER表,通过对该的DML操作来演示闪回查询的方法。
某一时刻该表的数据发下:

SQL> select * from sales.customer;

在这里插入图片描述
在该表中插入一条数据,如下操作:

SQL> insert into sales.customer values(10);
SQL> commit;

在这里插入图片描述
接着更新一条数据,如下图:

SQL> update sales.customer set personid=10 where customerid=6;
SQL> commit;

在这里插入图片描述
利用时间戳进行数据版本查询,可以看到在较早时刻该表对应的数据量较少,如下图所示:

SQL> select * from sales.customer  WHEN TIMESTAMP '2021-01-08 20:20:00';

在这里插入图片描述
不带时间戳进行查询,表示表中目前时刻的数据,如下图示:

SQL> select * from sales.customer;

在这里插入图片描述
通过时间版本关键字VERSIONS查询某一段时间内数据库的数据记录,如下图示:

SQL> SELECT * FROM SALES.CUSTOMER VERSIONS BETWEEN TIMESTAMP '2021-01-08 20:20:00' AND SYSDATE;

在这里插入图片描述
对该表删除一条记录,如下图示:

SQL> delete sales.customer where customerid=7;
SQL> commit;

在这里插入图片描述
通过伪列VERSIONS_ENDTRXID、关键字VERSIONS查询修改字段某一时段的事务号及具体值,观察该记录的变化情况,如下图示:

SQL> SELECT  VERSIONS_ENDTRXID, PERSONID FROM SALES.CUSTOMER VERSIONS BETWEEN TIMESTAMP '2021-01-08 20:20:00' AND SYSDATE;

在这里插入图片描述

用户通过分析上面字段的各版本的值的变化,将数据手工更改,恢复到期望的值,达到恢复目的。

四、闪回事务查询

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

SELECT * FROM V$FLASHBACK_TRX_INFO WHERE COMMIT_TIMESTAMP > '2020-08-01 12:00:00';

V$FLASHBACK_TRX_INFO提供的信息较为全面,如下表示:

在这里插入图片描述

五、小结

数据库闪回特性可以弥补用户不当操作造成的数据意外变更,在对数据库误操作后,此时数据库管理员需要尝试向某个固定时间点进行恢复,首先要通过闪回查询分析数据变化,然后利用字段版本值进行恢复操作,以减小误操作造成的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值