达梦数据库,闪回操作

当用户操作不慎导致错误的数据删改时,用户非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。

闪回技术主要是通过回滚段存储的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';

select  arch_mode  from v$database;

举例说明

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

  创建一张person_type表原先有三行数据

在 2019-07-11 09:44:16 时刻插入数据,并提交。

insert into person_type values(4,'运动员')

commit   结果如下:

使用闪回查询取得2019-07-11 09:44:15 时刻的数据。此时刻在插入数据的操作之前,可见此时的结果集不应该有2019-07-11 09:44:16 时刻插入的数据。

SELECT * FROM PERSON_TYPE WHEN TIMESTAMP '2019-07-11 09:44:15';

删除type_name为厨师的一行,使用闪回查询得到删除前的数据

SELECT * FROM PERSON_TYPE when timestamp '2019-07-11 10:14:56';

例二:闪回版本查询

多次更新表时,通过闪回版本可以找到数据修改的过程。

update person_type set type_name='司机' where type_id=4;

commit;

update person_type set type_name='律师' where type_id=4;

commit;

SELECT VERSIONS_ENDTRXID,type_id,type_name FROM PERSON_TYPE VERSIONS BETWEEN TIMESTAMP '2019-07-11 10:30:11' AND SYSDATE

type_name 从‘运动员’→‘司机’→‘律师’修改过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值