首批通过分布式安全可靠测评,为关键业务系统打造
RECOVER TABLE
更新时间:2026-04-10 11:58:01
描述
ALTER SYSTEM RECOVER TABLE 语句用于表数据的恢复,即在备份数据中将用户指定的表恢复到一个已有租户中,这个已有租户和原表所在的租户可以是同一个租户,也可以是不同的租户,甚至可以是不同的集群。
使用限制及注意事项
恢复表时,仅支持恢复用户表,不支持单独恢复临时表、视图、索引等。
恢复表时,不支持恢复表上的外键、触发器及统计信息等。
恢复表时,待恢复的表的源租户与目标租户的兼容性必须一致,例如,均为 Oracle 兼容性租户,或者均为 MySQL 兼容性租户。
与租户的恢复一样,表的恢复当前也是仅支持将低版本的备份数据中的表恢复到同版本或高版本中,同版本下的小版本之间也不支持逆向恢复。
恢复表时,指定的表名需要与系统实际存储的表名一致。例如,Oracle 模式租户下创建表 test,而系统内部实际存储的表名为 TEST,故在恢复表时需要指定表名为 TEST,否则系统会报错,提示表不存在。
使用
ALTER SYSTEM RECOVER TABLE语句恢复表的过程中需要使用辅助租户,故在语句执行前,请确认已在目标租户所在的集群内为辅助租户创建了所需的资源池。为辅助租户创建所需资源池的详细操作,请参见 按表恢复前准备。
权限要求
仅 sys 租户的 root 用户(root@sys) 可以执行 ALTER SYSTEM RECOVER TABLE 语句。
语法
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,...,多个表之间使用英文逗号(,)来分隔。
|
| dest_tenant_name | 指定表级恢复的目标租户,当前版本仅支持指定用户租户。 |
| uri | 指定需要传入数据备份和日志归档的路径。如果数据备份是通过 PLUS ARCHIVELOG 方式发起的,只需要填一个路径即可,否则需要分别输入数据备份和日志归档路径(至少 2 个),例如,'file:///backup/archive, file:///backup/data'。有关数据备份方式的详细信息请参见数据备份命令 BACKUP。 |
| UNTIL | 指定恢复终点,即恢复到该位点为止,且包括该位点。当指定恢复到 TIME 或 SCN 时, 必须以 = 来连接指定的值。如果不指定 UNTIL 子句,则默认恢复到最新的位点。
|
| restore_option | 指定辅助租户的 pool_list、locality、primary_zone 和 concurrency,不同参数之间通过 & 分隔:
|
| WITH KEY FROM 'backup_key_path' ENCRYPTED BY '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。
在
sys租户下创建表级恢复过程中辅助租户所需的资源,本示例中创建一个4c4g规格的资源池。创建资源单元。
obclient [oceanbase]> CREATE RESOURCE UNIT recover_4c5g MAX_CPU 4, MEMORY_SIZE = '5G', MAX_IOPS 1024, MIN_IOPS=1024;创建资源池。
obclient [oceanbase]> CREATE RESOURCE POOL recover_tmp_pool UNIT = 'recover_4c5g', UNIT_NUM = 1, ZONE_LIST = ('z1','z2','z3');
将表
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。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;表级恢复命令执行成功后,可以通过
CDB_OB_RECOVER_TABLE_JOBS视图查看恢复进度,STATUS列指明恢复阶段,RESTORE_AUX_TENANT表示正在恢复辅助租户。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_RECOVER_TABLE_JOBS\G查询结果如下:
*************************** 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