本节主要介绍 OceanBase 数据库的闪回查询多数据库版本的示例和使用限制。
OceanBase 数据库提供了记录级别的闪回查询(Flashback Query)功能,该功能允许用户获取某个历史版本的数据。其中,Oracle 模式支持
AS OF SCN和
AS OF TIMESTAMP 两种语法来查询;MySQL 模式支持通过
AS OF SNAPSHOT 语法来查询。
闪回查询支持的方式
OceanBase 数据库当前支持通过以下方式来进行闪回查询:
注意事项
使用租户级配置项
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。
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 AS OF TIMESTAMP expr1,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 为时间戳,需要您根据待查询的时间自行转换,单位为微秒。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026124/viewspace-2932864/
,如需转载,请注明出处,否则将追究法律责任。