---
title: "Restore Point | OceanBase 文档中心"
description: Restore Point 本节主要介绍 OceanBase 数据库的 Restore Point 功能及其使用限制。 在很多应用系统中，用户需要查询数据库中的某个时间点，或者特定版本的数据来完成一些数据分析或汇总之类的操作。 OceanBase 数据库在 V2.2.7x 版本中提供了 Restore Point 功…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 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 命令如下。

```sql
obclient> set GLOBAL ob_timestamp_service='GTS';

```

## 创建 Restore Point

通过`CREATE RESTORE POINT`语句创建租户级的 Restore Point，示例如下：

```sql
obclient> CREATE RESTORE POINT restore_point;

```

更多 `CREATE RESTORE POINT` 的说明信息，请参见 [CREATE RESTORE POINT（MySQL 模式）](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000356927) 和 [CREATE RESTORE POINT（Oracle 模式）](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357357)。

## 查询 Restore Point

创建 Restore Point 后，可以通过查询 `V$RESTORE_POINT` 视图来查看当前可用的 Restore Point，并根据查询到的 Restore Point 进行数据分析。

查询 Restore Point 的方法如下：

1. 租户管理员登录数据库。
 2. 执行以下语句，查询当前租户中可用的 Restore Point 及其对应的版本号。

      - MySQL 模式

       ```sql
       obclient> SELECT * FROM oceanbase.V$RESTORE_POINT;

       ```
      - Oracle 模式

       ```sql
       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](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000356411) 和 Oracle 模式的 [V$RESTORE_POINT](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000356234)。
 3. 根据查询到的版本号，执行以下语句，进行数据的查询分析。

   例如，查询到的版本号为 `1638501121443992`，则您可以查询到指定表在该版本的数据。

       ```sql
       obclient> SELECT * FROM table_name AS OF SNAPSHOT 1638501121443992;

       ```sql
       obclient> SELECT * FROM table_name AS OF SCN 1638501121443992;

       ```

## 删除 Restore Point

保留的 Restore Point 对应的数据会占用相应的存储资源，在分析业务结束后需要手动执行删除 Restore Point 的操作。

SQL 语句如下：

```sql
obclient> DROP RESTORE POINT restore_point;

```

更多 `DROP RESTORE POINT` 的说明信息，请参见MySQL 模式的 [DROP RESTORE POINT（MySQL 模式）](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000356939) 和 Oracle 模式的 [DROP RESTORE POINT（Oracle 模式）](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357371)。

## 使用示例

通过以下示例简单介绍如何在 Oracle 模式下使用 Restore Point 功能访问特定版本的数据。

1. 创建一个测试表 `test` 并插入数据。

   ```sql
   obclient> CREATE TABLE test ( ID NUMBER PRIMARY KEY, NAME varchar2(20));

   obclient> INSERT INTO test VALUES (1,'LI');

   obclient> commit;

   ```
 2. 创建一个 Restore Point。

   ```
 3. 向表中再插入一些数据并提交。

   ```sql
   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

   ```
 4. 查询表 `test` 当前版本的数据。

   ```sql
   obclient> SELECT * FROM test;
   +----+------+
   | ID | NAME |
   +----+------+
   |  1 | LI   |
   |  2 | WANG |
   |  3 | SU   |
   +----+------+
   3 rows in set

   ```
 5. 查看创建的 Restore Point 信息，并根据查询到的版本号查看该版本之前的数据。

   ```sql
   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

   ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
