达梦数据库闪回技术的应用

当用户操作不慎导致错误的数据删改时,用户非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。
闪回技术主要是通过回滚段存储的UNDO记录来完成历史记录的还原。设置ENABLE_FLASHBACK为1后,开启闪回功能。DM会保留回滚段一段时间,回滚段保留的时间代表着可以闪回的时间长度,由UNDO_RETENTION参数指定。
开启闪回功能后,DM会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的UNDO记录,就可以还原出特定事务号的记录,即指定时刻的记录状态,从而完成闪回查询。闪回查询功能完全依赖于回滚段管理,对于DROP等误操作不能恢复。

闪回特性可应用在以下方面:

1.自我维护过程中的修复:当一些重要的记录被意外删除时,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复。
2.用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查看变化的数据。

使用说明:

1.闪回查询只支持普通表(包括加密表与压缩表)、临时表和堆表,不支持水平分区表、垂直分区表、列存储表、外部表与视图。
2.闪回查询中trxid的值,一般需要由闪回版本查询的伪列来确定。实际使用中多采用指定时刻的方式。
检查数据库参数ENABLE_FLASHBACK是否设置为1,开启闪功能,如果没有开启,将静态参数改为1,检查UNDO_RETENTION保留时间

alter system set 'ENABLE_FLASHBACK'=1 spfile
select para_value from v$DM_INI WHERE PARA_NAME='ENABLE_FLASHBACK';

举例说明

例一:闪回查询特定时刻的T1表

创建一张T1表
create table t1 (t_id int,t_name varchar(32));
insert into t1 values (1,‘盖伦’);
insert into t1 values (2,‘卡牌’);
insert into t1 values (3,‘诺手’);
insert into t1 values (4,‘盖伦’);
insert into t1 values (5,‘瞎子’);
在 2020-03-16 17:43:24 时刻插入数据,并提交。
insert into t1 values (6,‘亚索’);
commit;
在这里插入图片描述
使用闪回查询取得2020-03-16 17:43:23 时刻的数据。此时刻在插入数据的操作之前,可见此时的结果集不应该有2020-03-16 17:43:24 时刻插入的数据。
SELECT * FROM T1 WHEN TIMESTAMP ‘2020-03-16 17:43:23’;
在这里插入图片描述
删除ID为4的一行,删除后查询
select * from t1;
在这里插入图片描述
使用闪回查询得到删除前的数据
SELECT * FROM T1 WHEN TIMESTAMP ‘2020-03-16 18:19:39’;
在这里插入图片描述

例二:闪回版本查询

多次更新表时,通过闪回版本可以找到数据修改的过程。
update t1 set t_name=‘提莫’ where t_id=3;
commit;
update t1 set t_name=‘薇恩’ where t_id=3;
commit;
SELECT VERSIONS_ENDTRXID,* FROM t1 VERSIONS BETWEEN TIMESTAMP ‘2019-07-11 19:20:11’ AND SYSDATE

t_name 从‘诺手’→‘提莫’→‘微恩’修改过程。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值