Oracle闪回技术
场景:测试环境数据库的表数据被误删除。
解决思路:使用闪回表技术
原理
闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。
Oracle中一个逻辑结构--撤销段(Undo segment)。因为大部分闪回技术都需要依赖撤销段中的撤销数据。撤销数据是反转DML语句结果所需的信息,只要某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段。(事务回滚也会用到撤销段中的数据)
1.闪回查询(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.