本节主要介绍 OceanBase 数据库的闪回查询多数据库版本的示例和使用限制。
OceanBase 数据库提供了记录级别的闪回查询(Flashback Query)功能,该功能允许用户获取某个历史版本的数据。社区版 OceanBase 数据库支持通过 AS OF SNAPSHOT 语法来查询。
闪回查询支持的方式
OceanBase 数据库当前支持通过以下方式来进行闪回查询:
设置租户级配置项
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> ALTER SYSTEM SET undo_retention=900;更多租户级配置项
undo_retention的说明信息请参见 undo_retention。
闪回查询
假设,当前 undo_retention 变量设置的值为 900,用户有一个表 table1。
通过 AS OF SNAPSHOT指定历史时间并闪回查询单表在该历史时间点的状态的数据的示例如下:
obclient> SELECT * FROM table1 AS OF SNAPSHOT 1582807800000000;
其中,1582807800000000 为时间戳,需要您根据待查询的时间自行转换,单位为微秒。




