1 闪回技术实现综述
Oracle闪回技术主要由3类底层技术支撑,分别是基于undo的闪回,基于回收站的闪回和基于闪回日志的闪回,下面我们将分别介绍。
1.1 基于undo的闪回
undo记录了每次数据变化中被覆盖的值,我们可以说它记录了数据变化时的前镜像值,例如一个事务将某数据从1改成了2,那么最终数据块记录的值应该是2,但是undo会记录下来更改前的值即1。undo数据是一个循环覆盖的结构,如下图:
基于undo的闪回我们主要介绍三种:闪回查询、闪回版本查询和闪回表。
1.1.1 闪回查询
闪回查询可以帮助我们查询一张表在过去某时间的数据状态。具体使用方法也很简单,主要就是在普通的select查询语句中多写一个“AS OF TIMESTAMP ”子句,以返回指定时间戳时的数据状态。
在我们日常使用时,主要有以下3种常用的方式:
-- 1.闪回到某精确时间点:
SELECT * FROM <table_name> AS OF TIMESTAMP
TO_TIMESTAMP('2020-12-21 08:45:00','yyyy-mm-dd hh24:mi:ss');
-- 2.闪回到相对时间点之前(例如:1分钟前)
SELECT * FORM <table_name AS OF TIMESTAMP SYSDATE - 1/24/60;
-- 3.闪回到指定SCN
SELECT * FROM <table_name> AS OF SCN 5572156;
1.1.2 闪回版本查询
使用VERSIONS子句查询某一段时间对应行的所有版本,返回结果是行的改变历史,且只返回已提交的行(包括删除和重新插入的行版本)。
SELECT
versions_startscn,
versions_starttime,
versions_endscn,
ver