首批通过分布式安全可靠测评,为关键业务系统打造
闪回查询多数据库版本
更新时间:2023-12-20 17:10:37
本节主要介绍 OceanBase 数据库的闪回查询多数据库版本的示例和使用限制。
OceanBase 数据库提供了记录级别的闪回查询(Flashback Query)功能,该功能允许用户获取某个历史版本的数据。其中,Oracle 模式支持 AS OF SCN和 AS OF TIMESTAMP 两种语法来查询;MySQL 模式支持通过 AS OF SNAPSHOT 语法来查询。
闪回查询支持的方式
OceanBase 数据库当前支持通过以下两种方式来进行闪回查询:
创建 Restore Point
当用户创建了 Restore Point,则可使用闪回查询功能查询 Restore Point 点对应的数据版本。 Restore Point 的创建及使用的相关操作请参见 Restore Point。
设置
undo_retention变量当用户设置
undo_retention变量后,即可使用闪回查询功能查询当前时间T到T - undo_retention时间范围内的任意多版本数据。本节主要介绍如何通过设置
undo_retention变量来进行闪回查询。
注意事项
使用 undo_retention 变量进行闪回查询时,需要注意以下事项:
假设
undo_retention变量设置的时间为 T0,变量设置后对 T0 之前的数据不起作用,对 T0 之后的数据才起作用。如果被查询的表已经被删除进了回收站,则需要先将该表从回收站中恢复。
闪回表的相关操作请参见 闪回回收站对象。
假设当前时间为
T,设置undo_retention变量后,如果在T - undo_retention时间段内有 DDL 操作,系统会用最新的数据字典解释表的数据。对于 DDL 操作发生前产生的数据,被删除的列的数据将变成删除状态,新添加列的数据则设为 Default 值。
设置变量
在通过 undo_retention 变量进行闪回查询前,需要先修改 undo_retention 变量的值。undo_retention 变量的默认值为 1800,单位为秒。
租户管理员登录到对应的租户。
执行以下语句,修改
undo_retention变量的值。示例如下:
obclient> SET GLOBAL undo_retention=900;更多
undo_retention变量的说明信息请参见 undo_retention。
MySQL 模式下的闪回查询
假设,当前 undo_retention 变量设置的值为 900,用户有一个表 table1。
通过 AS OF SNAPSHOT指定历史时间并闪回查询单表在该历史时间点的状态的数据的示例如下:
obclient> SELECT * FROM table1 AS OF SNAPSHOT 1582807800000000;
其中,1582807800000000 为时间戳,需要您根据待查询的时间自行转换,单位为微秒。
Oracle 模式下的闪回查询
假设当前 undo_retention 变量配置的值为 900,用户有 3 个表 table1、table2、expr1。
闪回查询的使用示例如下:
通过
TIMESTAMP指定的历史时间并闪回查询一张单表在该历史时间中的状态的数据。obclient> SELECT * FROM table1 AS OF TIMESTAMP TO_TIMESTAMP('2020-08-13 16:20:00','yyyy-mm-dd hh24:mi:ss');通过
TIMESTAMP指定的历史时间并闪回查询多表在该历史时间中的状态的数据。obclient> SELECT * FROM table1,table2 AS OF TIMESTAMP TO_TIMESTAMP('2020-08-13 16:20:00','yyyy-mm-dd hh24:mi:ss');通过
SCN指定历史时间并闪回查询单表在该历史时间点的状态的数据。obclient> SELECT * FROM table1 AS OF SCN 1582807800000000;其中,
1582807800000000为时间戳,需要您根据待查询的时间自行转换,单位为微秒。