闪回查询(Flashback Query)是 Oracle 中记录级别的闪回功能。该功能允许用户获取某个历史版本的数据,OceanBase当前支持在 Oracle 模式下的闪回查询。

闪回查询支持 SCN(System Change Number )和 TIMESTAMP 两种维度的查询。

示例

示例 1

下述语句展示了如何通过 TIMESTAMP 指定的历史时间并闪回查询一张单表在该历史时间中的状态的数据:

  1. select * from tbl1 as of timestamp TO_TIMESTAMP('2020-08-13 16:20:00','yyyy-mm-dd hh24:mi:ss');

示例 2

下述语句展示了如何通过 TIMESTAMP 指定的历史时间并闪回查询多表在该历史时间中的状态的数据:

  1. select * from tbl1 as of timestamp expr1,tbl2 as of timestamp TO_TIMESTAMP('2020-08-13 16:20:00','yyyy-mm-dd hh24:mi:ss');

示例 3:

下述语句展示了如何通过 SCN 指定历史时间并闪回查询单表在该历史时间点的状态的数据:

  1. select * from tbl1 as of scn 1582807800000000;

限制

  • 最近一小段时间受限制与 undo_retention 变量设置有关,该参数默认为 0,默认单位是秒。假如 t1 时间点设置为了保留时间,且 t2 = t1 + 900s,那么 t2 时间点可以查询 [t1,t2] 区间内的数据,设置后对之前的数据不起作用,对之后的数据才起作用。以下语句展示了如何设置 undo_retention 变量:
  1. SET global undo_retention=900;
  • OceanBase 目前的 SCN 号获取还没有完善的办法,所以推荐使用 TIMESTAMP 来指定时间,这和 Oracle 是完全兼容的。
  • 查询固定时间点可以查询最近的一次合并版本。假如 您在 t1 时间点发起了集群合并,您最早可以查询到 t1 时间点的数据。
  • 如果被查询的表已经被删除进了回收站,那么需要先将该表从回收站中恢复。
  • 闪回查询受限于转储,如果发生转储,且 undo_retention 变量未设置,则无法查询。设置 undo_retention 变量后可以查询 t1(转储时间点)+ undo_retention 变量设置的时间范围。