Benjamin Zhang

目前就职于中科院计算机网络信息中心,主要兴趣集中在数据库,操作系统,中间件。

【闪回技术】Oracle闪回查询

14 Dec 2018 » Oracle

Oracle闪回技术

场景:测试环境数据库的表数据被误删除。

解决思路:使用闪回表技术

原理

闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。 Oracle中一个逻辑结构–撤销段(Undo segment)。因为大部分闪回技术都需要依赖撤销段中的撤销数据。撤销数据是反转DML语句结果所需的信息,只要某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段。(事务回滚也会用到撤销段中的数据)

闪回查询(Flashback Query)

1):基本闪回查询

功能描述:可以查询过去某个时间段的数据库状态。

工作原理:Oracle 会提取所需要的撤销数据(前提是撤销是可用的,即撤销数据还没被覆盖)进行回滚,但这种回滚是临时的,

SQL> select * from wfprocessdefine as of timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');

2):闪回表

功能描述:可将某个表回退到过去某个时间点 工作原理:同样,Oracle会先去查询撤销段,提取过去某个时间点之后的所有变更,构造反转这些变更的SQL语句进行回退,闪回操作 是一个单独的事务,所以若由于撤销数据过期之类的原因导致无法闪回,整个操作会回滚,不会存在不一致的状态。

*.启用表闪回首先要在表上支持行移动

SQL> alter table wfprocessdefine enable row movement;

*.闪回表操作

SQL> flashback table wfprocessdefine to timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');

闪回失效的情况: 1)违反了数据库约束. 2)撤销数据失效. 3)闪回不能跨越DDL.