首批通过分布式安全可靠测评,为关键业务系统打造
Restore Point
更新时间:2023-08-28 13:46:18
本节主要介绍 OceanBase 数据库的 Restore Point 功能及其使用限制。
在很多应用系统中,用户需要查询数据库中的某个时间点,或者特定版本的数据来完成一些数据分析或汇总之类的操作。
OceanBase 数据库在 V2.2.7x 版本中提供了 Restore Point 功能,允许用户在租户上创建 Restore Point,将历史版本的数据保存下来。Restore Point 功能类似于租户的快照点,您可以通过闪回查询的方式来访问特定版本的历史数据。
功能使用限制
当前 Restore Point 功能的使用限制如下:
不支持物理备份。
不支持主备库。
不支持在
sys租户下创建 Restore Point。每个租户内最多可创建
10个 Restore Point 。创建 Restore Point 后,如果对创建 Restore Point 前就存在的表执行 DDL 语句,对于 MySQL 模式,系统会报
ERROR 4179 (HY000): restore point exist, create index/alter not allowed的错误;对于 Oracle 模式,系统会报ORA-00600: internal error code, arguments: -4179, restore point exist, create index/alter not allowed的错误。
前提条件
由于 Restore Point 功能依赖 GTS 维护全局的一致性快照,故在使用 Restore Point 时,需要开启 GTS。
开启 GTS 的 SQL 命令如下。
obclient> set GLOBAL ob_timestamp_service='GTS';
创建 Restore Point
通过CREATE RESTORE POINT语句创建租户级的 Restore Point,示例如下:
obclient> CREATE RESTORE POINT restore_point;
更多 CREATE RESTORE POINT 的说明信息,请参见 CREATE RESTORE POINT(MySQL 模式) 和 CREATE RESTORE POINT(Oracle 模式)。
查询 Restore Point
创建 Restore Point 后,可以通过查询 V$RESTORE_POINT 视图来查看当前可用的 Restore Point,并根据查询到的 Restore Point 进行数据分析。
查询 Restore Point 的方法如下:
租户管理员登录数据库。
执行以下语句,查询当前租户中可用的 Restore Point 及其对应的版本号。
MySQL 模式
obclient> SELECT * FROM oceanbase.V$RESTORE_POINT;Oracle 模式
obclient> SELECT * FROM V$RESTORE_POINT;
查询结果中:
TENANT_ID列为创建 Restore Point 的租户的 ID。SNAPSHOT列为 Restore Point 对应的数据版本号。TIME列为 Restore Point 的创建时间。NAME列为 Restore Point 的名称。
更多
V$RESTORE_POINT视图的字段及说明请参见 MySQL 模式的 v$restore_point 和 Oracle 模式的 V$RESTORE_POINT。根据查询到的版本号,执行以下语句,进行数据的查询分析。
例如,查询到的版本号为
1638501121443992,则您可以查询到指定表在该版本的数据。MySQL 模式
obclient> SELECT * FROM table_name AS OF SNAPSHOT 1638501121443992;Oracle 模式
obclient> SELECT * FROM table_name AS OF SCN 1638501121443992;
删除 Restore Point
保留的 Restore Point 对应的数据会占用相应的存储资源,在分析业务结束后需要手动执行删除 Restore Point 的操作。
SQL 语句如下:
obclient> DROP RESTORE POINT restore_point;
更多 DROP RESTORE POINT 的说明信息,请参见MySQL 模式的 DROP RESTORE POINT(MySQL 模式) 和 Oracle 模式的 DROP RESTORE POINT(Oracle 模式)。
使用示例
通过以下示例简单介绍如何在 Oracle 模式下使用 Restore Point 功能访问特定版本的数据。
创建一个测试表
test并插入数据。obclient> CREATE TABLE test ( ID NUMBER PRIMARY KEY, NAME varchar2(20)); obclient> INSERT INTO test VALUES (1,'LI'); obclient> commit;创建一个 Restore Point。
obclient> CREATE RESTORE POINT restore_point;向表中再插入一些数据并提交。
obclient> INSERT INTO test VALUES (2, 'WANG'); Query OK, 1 row affected obclient> INSERT INTO test VALUES (3, 'SU'); Query OK, 1 row affected obclient> commit; Query OK, 0 rows affected查询表
test当前版本的数据。obclient> SELECT * FROM test; +----+------+ | ID | NAME | +----+------+ | 1 | LI | | 2 | WANG | | 3 | SU | +----+------+ 3 rows in set查看创建的 Restore Point 信息,并根据查询到的版本号查看该版本之前的数据。
obclient>SELECT * FROM V$RESTORE_POINT; +-----------+------------------+------------------------------+---------------+ | TENANT_ID | SNAPSHOT | TIME | NAME | +-----------+------------------+------------------------------+---------------+ | 1002 | 1637549041740744 | 22-NOV-21 10.44.01.742454 AM | RESTORE_POINT | +-----------+------------------+------------------------------+---------------+ 1 row in set obclient> SELECT * FROM test AS OF SCN 1637549041740744; +----+------+ | ID | NAME | +----+------+ | 1 | LI | +----+------+ 1 row in set