---
title: "RECOVER TABLE - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: RECOVER TABLE 描述 ALTER SYSTEM RECOVER TABLE 语句用于表数据的恢复，即在备份数据中将用户指定的表恢复到一个已有租户中，这个已有租户和原表所在的租户可以是同一个租户，也可以是不同的租户，甚至可以是不同的集群。 使用限制及注意事项 恢复表时，仅支持恢复用户表，不支持单独恢复临时表…
---
切换语言

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

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

# RECOVER TABLE

更新时间：2026-07-03 20:55:47

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/100.system-tenants/200.alter-system/3400.recover-table.md)  

## 描述

`ALTER SYSTEM RECOVER TABLE` 语句用于表数据的恢复，即在备份数据中将用户指定的表恢复到一个已有租户中，这个已有租户和原表所在的租户可以是同一个租户，也可以是不同的租户，甚至可以是不同的集群。

## 使用限制及注意事项

- 恢复表时，仅支持恢复用户表，不支持单独恢复临时表、视图、索引等。
 - 恢复表时，不支持恢复表上的外键、触发器及统计信息等。
 - 恢复表时，待恢复的表的源租户与目标租户的兼容性必须一致，例如，均为 Oracle 兼容性租户，或者均为 MySQL 兼容性租户。
 - 与租户的恢复一样，表的恢复当前也是仅支持将低版本的备份数据中的表恢复到同版本或高版本中，同版本下的小版本之间也不支持逆向恢复。
 - 恢复表时，指定的表名需要与系统实际存储的表名一致。例如，Oracle 模式租户下创建表 test，而系统内部实际存储的表名为 TEST，故在恢复表时需要指定表名为 TEST，否则系统会报错，提示表不存在。
 - 使用 `ALTER SYSTEM RECOVER TABLE` 语句恢复表的过程中需要使用辅助租户，故在语句执行前，请确认已在目标租户所在的集群内为辅助租户创建了所需的资源池。为辅助租户创建所需资源池的详细操作，请参见 [按表恢复前准备](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682429)。

## 权限要求

仅 `sys` 租户的 `root` 用户（`root@sys`） 可以执行 `ALTER SYSTEM RECOVER TABLE` 语句。

## 语法

```sql
ALTER SYSTEM
    RECOVER TABLE table_name_list
    TO [TENANT [=]] dest_tenant_name
    FROM uri [ UNTIL {TIME ='timestamp'}| {SCN = scn} ]
    WITH 'restore_option' [WITH KEY FROM 'backup_key_path' ENCRYPTED BY 'password']
    [REMAP TABLE remap_table_name_list]
    [REMAP TABLEGROUP remap_tablegroup_list]
    [REMAP TABLESPACE remap_tablespace_list]
    [DESCRIPTION [=] description];

table_name_list:
    database_name.table_name [, database_name.table_name ...]

remap_table_name_list：
    /* 数据库名不变，只更改表名 */
    database_name.old_table_name:new_table_name
    /* 表名不变，只更改数据库名 */
    |old_database_name.table_name:new_database_name.table_name
    /* 同时修改数据库名和表名  */
    | old_database_name.old_table_name:new_database_name.new_table_name
    /* 将源数据库下的所有表恢复到新的数据库 */
    | old_database_name.`*`:new_database_name.`*`

remap_tablegroup_list：
    old_tablegroup_name:new_tablegroup_name

remap_tablespace_list：
    old_tablespace_name:new_tablespace_name

```

## 参数解释

| **参数** | **描述** |
| --- | --- |
| table_name_list | 指定需要恢复的表，格式形如 `database_name.table_name1,database_name.table_name2,...`，多个表之间使用英文逗号（,）来分隔。   - `table_name` 需要与系统实际存储的表名一致。例如，Oracle 模式租户下创建表 `test`，而系统内部实际存储的表名为 `TEST`，故在恢复表时需要指定表名为 `TEST`，否则系统会报错，提示表不存在。 - 如果要恢复一个 Database 下的所有表，`table_name` 可以用 “*” 替代，即 `database_name.\*`。 - 如果要恢复所有的表，`database_name` 和 `table_name` 处均填写“*”，即 *.*。 - 如果 `database_name` 或者 `table_name` 含有特殊字符则需要放在反引号（``）内。 |
| dest_tenant_name | 指定表级恢复的目标租户，当前版本仅支持指定用户租户。 |
| uri | 指定需要传入数据备份和日志归档的路径。如果数据备份是通过 `PLUS ARCHIVELOG` 方式发起的，只需要填一个路径即可，否则需要分别输入数据备份和日志归档路径（至少 2 个），例如，`'file:///backup/archive, file:///backup/data'`。有关数据备份方式的详细信息请参见数据备份命令 [BACKUP](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686252)。 |
| UNTIL | 指定恢复终点，即恢复到该位点为止，且包括该位点。当指定恢复到 TIME 或 SCN 时, 必须以 `=` 来连接指定的值。如果不指定 `UNTIL` 子句，则默认恢复到最新的位点。   - `TIME ='timetamp'`：指定恢复的时间戳。 - `SCN = scn`：指定恢复的 SCN（System Change Number），包括该 SCN 位点。 |
| restore_option | 指定辅助租户的 `pool_list`、`locality`、`primary_zone` 和 `concurrency`，不同参数之间通过 `&` 分隔：   - `pool_list` 为必选项，填写用户的资源池。多个资源池之间用英文逗号（,）分隔。 - `locality` 为可选项，填写辅助租户副本分布的 Locality 信息，需要满足与辅助租户所在集群的 `pool_list` 的 Zone 信息相匹配。不填写该值时，默认按照 `resource_pool` 的 `zone_list` 为每个 Zone 设一个 F 副本。     填写样例: `locality='F@z1,F@z2,F@z3'`。 - `primary_zone` 为可选项，填写辅助租户的 Leader 副本的偏好位置，需要与 `pool_list` 及 `locality` 的匹配，即需要满足 Zone 信息匹配以及 `primary_region` 内至少有两个 Paxos 成员等限制。不填写该值时，则系统按照 `locality` 的 `zone_list` 将 Leader 随机分布在这些 Zone 中。      填写样例: `primary_zone='z1'`。 - `concurrency`为可选项，指定恢复的并发度。如果不指定，则默认等于辅助租户被分配的 MAX_CPU 数。     填写样例：`concurrency=50` |
| WITH KEY FROM 'backup_key_path' ENCRYPTED BY 'password' | 指定加密租户的秘钥备份信息，为可选项。仅当源租户配置了透明加密，才需要在恢复时指定秘钥备份相关的信息。其中：   - `backup_key_path` 指定秘钥的备份路径。 - `password` 指定备份秘钥时设置的加密密码。 |
| REMAP | 指定映射关系。如果不指定 `REMAP`，会尝试将目标表放到与原表相同的 TableSpace->Table Group->DataBase 下。 |
| remap_table_name_list | 重命名恢复后的表名。支持仅重命名表名，表所属的 Database 不变；也支持表名不变，仅重命名到其他 Database；还支持重命名表名，同时所属的 Database 重命名为其他 Database。源对象与重命名对象之间使用英文冒号（:）连接。 |
| remap_tablegroup_list | 重命名表所属的表组。如果源表绑定了表组，则在恢复到目标租户创建表时，系统默认会将表恢复到目标租户中同名的表组，如果同名的表组不存在，表恢复就会失败。如果目标租户中有其他表组，可以将表通过该语句恢复到其他表组中，源对象与重命名对象之间使用英文冒号（:）连接。 |
| remap_tablespace_list | 重命名表所属的表空间。表空间在 OceanBase 数据库中是一个逻辑单元，当前主要用于数据加密。如果源表绑定了表空间，则在恢复到目标租户创建表时，系统默认会将表恢复到目标租户中同名的表空间，如果同名的表空间不存在，表恢复就会失败。如果目标租户中有其他表空间，也可以将表通过该语句恢复到其他表空间中，源对象与重命名对象之间使用英文冒号（:）连接。 |
| description | 指定该操作的描述信息，可选。 |

## 示例

在 MySQL 模式租户 `obt` 的数据库 `test` 下已设置的数据备份路径是 'file:///data/backup/data'，日志归档的路径是 `'file:///data/backup/archive'`，并且日志归档功能已经打开，也做了全量数据备份。在操作过程中误将 `student` 表删除，如下示例为通过表级恢复功能将某一租户下的 `test.student` 表恢复到时间点 `'2023-08-21 19:47:20'`，并且重命名为 `student_recover`。

1. 在 `sys` 租户下创建表级恢复过程中辅助租户所需的资源，本示例中创建一个 `4c4g` 规格的资源池。

      1. 创建资源单元。

        ```sql
        obclient [oceanbase]> CREATE RESOURCE UNIT recover_4c5g MAX_CPU 4, MEMORY_SIZE = '5G', MAX_IOPS 1024, MIN_IOPS=1024;

        ```
      2. 创建资源池。

        ```sql
        obclient [oceanbase]> CREATE RESOURCE POOL recover_tmp_pool UNIT = 'recover_4c5g', UNIT_NUM = 1, ZONE_LIST = ('z1','z2','z3');

        ```
 2. 将表 `student` 恢复到目标租户 `obt` 的 `test` 库中，并且重命名为 `student_recover`，使用的数据备份路径是 `file:///data/backup/data`，归档日志路径是 `file:///data/backup/archive`，恢复到的时间点是 `'2023-08-21 19:47:20'`，辅助租户使用的 Resource Pool 是 `recover_tmp_pool`，Primary Zone 是 `z1`。

   ```sql
   obclient [oceanbase]> ALTER SYSTEM RECOVER TABLE test.student TO TENANT obt FROM 'file:///data/backup/data,file:///data/backup/archive' UNTIL TIME='2023-08-21 19:47:20' WITH 'pool_list=recover_tmp_pool&primary_zone=z1' REMAP TABLE test.student:student_recover;

   ```
 3. 表级恢复命令执行成功后，可以通过 `CDB_OB_RECOVER_TABLE_JOBS` 视图查看恢复进度，`STATUS` 列指明恢复阶段，`RESTORE_AUX_TENANT` 表示正在恢复辅助租户。

   ```sql
   obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_RECOVER_TABLE_JOBS\G

   ```

   查询结果如下：

   ```shell
   *************************** 1. row ***************************
               TENANT_ID: 1
                  JOB_ID: 2
     INITIATOR_TENANT_ID: 1
        INITIATOR_JOB_ID: 2
         START_TIMESTAMP: 2023-08-21 19:54:25
           END_TIMESTAMP: 1970-01-01 08:00:00
                  STATUS: RESTORE_AUX_TENANT
         AUX_TENANT_NAME: AUX_RECOVER$1692618864733548
      TARGET_TENANT_NAME: OBT
              IMPORT_ALL: 0
                 DB_LIST: NULL
              TABLE_LIST: `TEST`.`STUDENT`
             RESTORE_SCN: 1692618440000000000
     RESTORE_SCN_DISPLAY: 21-AUG-23 07.47.20.000000000 PM
          RESTORE_OPTION: pool_list=RECOVER_TMP_POOL&primary_zone=z1
             BACKUP_DEST: file:///data/backup/data,file:///data/backup/archive
         BACKUP_SET_LIST: file:///data/backup/data/backup_set_1_full
       BACKUP_PIECE_LIST: file:///data/backup/archive/piece_d1002r1p1
           BACKUP_PASSWD: NULL
       EXTERNAL_KMS_INFO: NULL
           REMAP_DB_LIST: NULL
        REMAP_TABLE_LIST: `TEST`.`STUDENT`:`TEST`.`STUDENT_RECOVER`
   REMAP_TABLEGROUP_LIST: NULL
   REMAP_TABLESPACE_LIST: NULL
                  RESULT: SUCCEESS
                 COMMENT: NULL
             DESCRIPTION: NULL

   ```

## 相关文档

[执行按表恢复](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682431)

 上一篇 下一篇 ![有帮助](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) 咨询热线
