首批通过分布式安全可靠测评,为关键业务系统打造
执行按表恢复
更新时间:2026-04-10 11:58:01
本节主要介绍如何进行按表恢复。
使用限制
仅支持恢复用户表,不支持单独恢复临时表、视图、物化视图、物化视图日志、索引等。
表恢复的源租户与目标租户的兼容性必须一致,例如,均为 Oracle 兼容性租户,或者均为 MySQL 兼容性租户。
恢复表时,指定的表名需要与系统实际存储的表名一致。例如,Oracle 模式租户下创建表
test,而系统内部实际存储的表名为TEST,故在恢复表时需要指定表名为TEST,否则系统会报错,提示表不存在。与租户级恢复支持的备份数据版本一样,表级恢复当前也是仅支持将低版本的备份数据中的表恢复到同版本或高版本中,同版本下的小版本之间也不支持逆向恢复。有关租户级恢复支持的备份数据版本的详细说明,参见 恢复前准备。
按表恢复除了恢复表,与该表相关联的很多信息也会被恢复,但仍有部分信息不恢复,具体可恢复的信息参见 表级恢复的 Schema 恢复说明。
前提条件
由于指定表的恢复过程中需要使用辅助租户,因此,在进行表恢复前,您需要在目标租户所在的集群内为辅助租户创建所需的资源池。为辅助租户创建所需资源池的详细操作,请参见 按表恢复前准备。
操作步骤
使用
root用户登录目标租户所在集群的sys租户。(可选)如果恢复指定的表时所使用的备份数据配置了加密功能,则需要配置备份集的加密信息。
仅在数据备份时添加了密码的场景下才需要设置备份的恢复密码。
SET DECRYPTION IDENTIFIED BY 'password';其中,
password需要替换为备份时添加的密码。如果全量备份和增量备份设置的密码不一样,则需要输入多个密码,密码之间使用英文逗号分隔(全量备份密码放在前面,增量备份密码放在后面)。全量备份和增量备份设置的密码相同时的示例如下:
SET DECRYPTION IDENTIFIED BY '******';全量备份和增量备份设置的密码不一样时的示例如下:
SET DECRYPTION IDENTIFIED BY '******','******';执行以下命令,恢复指定的表。
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_name1,database_name.table_name2,...,多个表之间使用英文逗号(,)分隔。指定
database_name和table_name时:table_name需要与系统实际存储的表名一致。例如,Oracle 模式租户下创建表test,而系统内部实际存储的表名为TEST,故在恢复表时需要指定表名为TEST,否则系统会报错,提示表不存在。对于
database_name或table_name中含有特殊字符的场景,含特殊字符的database_name或table_name需要放在反引号(``)内。如果需要恢复一个 Database 下的所有表,则可以表示为
database_name.*。如果需要恢复租户下的所有用户表,则可以表示为
*.*。
dest_tenant_name:表待恢复的目标租户名,仅支持将表恢复到用户租户中,不支持恢复到sys租户或 Meta 租户。uri:分别指定数据备份和日志归档的路径,与租户级物理恢复命令的参数一样。若数据备份是通过 PLUS ARCHIVELOG 方式发起的,只需要填一个路径即可,否则需要分别输入数据备份和日志归档至少 2 个路径,例如:'file:///backup/archive, file:///backup/data'。{TIME='timestamp'} \| {SCN=scn}:指定的恢复终点,恢复到该位点位置,且包含该位点。当指定恢复到TIME或SCN时, 必须以=来连接指定的值。如果不指定UNTIL子句,则默认恢复到最新的位点。restore_option:指定辅助租户的pool_list、locality、primary_zone及concurrency,不同参数之间通过&分隔。在指定locality和primary_zone时,建议尽量与源租户保持同构。对于
concurrency,如果不指定,则默认等于该辅助租户被分配的 MAX_CPU 数。例如,本文档中,系统租户为辅助租户分配的 MAX_CPU 为 16。有关各参数的详细说明请参见 按表恢复相关参数介绍。
WITH KEY FROM 'backup_key_path' ENCRYPTED BY 'password':指定加密租户的秘钥备份信息。仅当源租户配置了透明加密,才需要在恢复时指定秘钥备份相关的信息。backup_key_path:秘钥的备份路径。password:备份秘钥时设置的加密密码。
有关秘钥备份的相关操作,请参见 备份前准备 中的 备份秘钥。
remap_table_name_list:重命名恢复后的表名。支持仅重命名表名,表所属的 Database 不变;也支持表名不变,仅重命名到其他 Database;还支持重命名表名,同时所属的 Database 重命名为其他 Database。源对象与重命名对象之间使用英文冒号(:)连接,具体格式的示例如下:表名从
student重命名为student2,表所属的 Database 不变:REMAP TABLE school.student:student2。当所属的 Database 不变时,在恢复到目标租户创建表时,系统默认会将表恢复到目标租户同名的 Database 中,如果同名的 Database 不存在,则表恢复就会失败。
表名不变,表所属的 Database 从
school改为college:REMAP TABLE school.student:college.student。表名从
student重命名为student2,表所属的 Database 从school改为college:REMAP TABLE school.student:college.student2。将
school下的所有表恢复到college中:REMAP TABLE school.*:college.*
说明
如果重命名的
database_name或table_name中含有特殊字符,则含特殊字符的database_name或table_name需要放在反引号(``)内。remap_tablegroup_list:重命名表所属的表组。如果源表绑定了表组,则在恢复到目标租户创建表时,系统默认会将表恢复到目标租户中同名的表组,如果同名的表组不存在,表恢复就会失败。如果目标租户中有其他表组,可以将表通过该语句恢复到其他表组中,源对象与重命名对象之间使用英文冒号(:)连接。例如,将源表组
tg1中的表全部恢复到目标租户的表组newtg1中:REMAP TABLEGROUP tg1:newtg1。remap_tablespace_list:重命名表所属的表空间。表空间在 OceanBase 数据库中是一个逻辑单元,当前主要用于数据加密。如果源表绑定了表空间,则在恢复到目标租户创建表时,系统默认会将表恢复到目标租户中同名的表空间,如果同名的表空间不存在,表恢复就会失败。如果目标租户中有其他表空间,也可以将表通过该语句恢复到其他表空间中,源对象与重命名对象之间使用英文冒号(:)连接。例如,将源表空间
ts1中的表全部恢复到目标租户的表空间newts1中:REMAP TABLESPACE ts1:newts1。
有关表恢复相关参数的更多详细说明,请参见 按表恢复相关参数介绍。
将
infodb库中的表tbl1、tbl2恢复到目标租户的infodb库中,并且将表tbl1重命名为newtbl,同时将表所属的表组重定向为newtg1,表所属的表空间重定向为newts1。示例如下:ALTER SYSTEM RECOVER TABLE infodb.tbl1,infodb.tbl2 TO TENANT oracle001 FROM 'file:///data/nfs/backup/data,file:///data/nfs/backup/archive' UNTIL TIME='2023-09-30 00:00:00' WITH 'pool_list=restore_pool' REMAP TABLE infodb.tbl1:newtbl REMAP TABLEGROUP tg1:newtg1 REMAP TABLESPACE ts1:newts1;
注意
表数据恢复成功即表示表恢复成功,允许索引、约束或其他关联的 Schema 恢复失败。
后续操作
指定表的恢复结束后,您还需要在辅助租户所在的集群中执行以下命令,手动释放为辅助租户创建的资源池。
DROP RESOURCE POOL restore_pool;其中,
restore_pool表示在恢复前准备时为辅助租户创建的资源池名。有关删除资源池的详细操作及介绍,请参见 删除资源池。
相关文档
有关表级恢复中各 Schema 信息的恢复情况,参见 表级恢复的 Schema 恢复说明。