达梦数据库,闪回操作

本文介绍了数据库闪回技术,它可处理数据逻辑损坏,通过回滚段存储的UNDO记录还原历史记录。开启闪回功能后,能进行闪回查询,不过对DROP等误操作无法恢复。还说明了其应用场景、使用说明,并给出闪回查询和闪回版本查询的示例。

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

闪回技术主要是通过回滚段存储的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 从‘运动员’→‘司机’→‘律师’修改过程。

### 达梦数据库配置闪回查询功能的方法 达梦数据库闪回技术允许在事务提交后,通过回滚段中保留的 **UNDO** 记录,查询过去某一时间点的数据状态。这种机制可以用于恢复误操作删除的数据,但默认情况下该功能是关闭的。为了启用闪回查询功能,需要对数据库进行相关配置。 --- ### 1. 开启闪回功能 在达梦数据库中,需修改数据库配置文件以启用闪回功能。通常,该配置文件为 `dm.ini` 或 `dm.cnf`,具体路径取决于安装环境。在配置文件中,需要设置以下参数: ```ini ENABLE_FLASHBACK = 1 ``` 该参数启用后,数据库会在内存中记录每个事务的开始时间和提交时间,从而支持基于时间点的闪回查询 [^1]。 --- ### 2. 设置闪回保留时间 闪回功能依赖于回滚段中保存的 UNDO 数据。为了确保闪回查询可用,需设置回滚段的保留时间。该时间决定了可以查询的历史数据范围。配置参数如下: ```ini UNDO_RETENTION = 3600 ``` 上述配置示回滚段中的 UNDO 数据保留时间为 3600 秒(即 1 小时),可根据实际需求调整该值 [^1]。 --- ### 3. 使用闪回查询语法 配置完成后,即可使用 `AS OF TIMESTAMP` 或 `AS OF SCN` 语法进行闪回查询。例如: ```sql -- 查询指定时间点的记录 SELECT * FROM employees AS OF TIMESTAMP '2025-04-05 10:00:00' WHERE id = 100; -- 将被删除的数据重新插入中 INSERT INTO employees SELECT * FROM employees AS OF TIMESTAMP '2025-04-05 10:00:00' WHERE id = 100; ``` 此方法适用于恢复误删除的数据,前提是删除操作发生在闪回保留时间范围内,并且未被其他事务覆盖 [^2]。 --- ### 4. 注意事项 - **闪回查询不能恢复被 `TRUNCATE` 或 `DROP` 操作删除的数据**,因为这些操作不会保留 UNDO 记录。 - 闪回功能对性能有一定影响,尤其在高并发事务环境中,需根据系统资源合理配置 `UNDO_RETENTION` 值。 - 若未启用闪回功能,或 UNDO 数据已被覆盖,则无法通过闪回查询恢复数据。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值