oracle闪回技术详解之闪回查询

接上一篇:http://www.javashuo.com/article/p-bywztsdy-mc.html

1,照例,我们先来个例子,让大家感受下,何为闪回查询
1)建t1表,向表中插入十条数据
在这里插入图片描述
2)查看当前系统时间
在这里插入图片描述
3)删除10test,如下看到只有9条数据了
在这里插入图片描述
4) select * from t1 as of timestamp to_timestamp('2018-11-18 19:21:41','yyyy-mm-dd hh24:mi:ss');

执行完可以看到,我们的10test出现了
在这里插入图片描述
5)使用MINUS:

SELECT *
  FROM T1 AS OF TIMESTAMP TO_TIMESTAMP('2018-11-18 19:21:41', 'yyyy-mm-dd hh24:mi:ss')
MINUS
SELECT * FROM T1;

在这里插入图片描述
如图可以把指定表到截止到指定时间点快照的删除数据全部查询出来了,当然数据能查询出来,恢复什么的也就很easy了,一个批量插入脚本就可以了
6)如下执行语句

INSERT INTO T1
  SELECT *
    FROM T1 AS OF TIMESTAMP TO_TIMESTAMP('2018-11-18 19:21:41', 'yyyy-mm-dd hh24:mi:ss')
  MINUS
  SELECT * FROM T1;

可以看到前面被删除的10test已经找回来了
在这里插入图片描述

注意事项:闪回模式 中,不能进行dml操作,闪回查询可以回退到什么时间点取决于撤销段的内容,如果所需的撤销段不可以用,就会报错,闪回查询接受时间和scn如果使用scn机会更加精确,如果使用的是时间会映射到一个scn上,精确到3秒
也就是说,我们基于时间的闪回总是不精确的,总会有误差,如果基于版本scn号来做闪回操作,会使闪回结果更精确

好了对于闪回查询的相关介绍就到这里了,对于开发运维过程中,经常出现的误delete操作,使用闪回查询恢复数据是一个很实用的小技巧呢,希望对大家后续工作中有所帮助。