基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
恢复指定的表
更新时间:2023-07-18 17:27:23
OceanBase 数据库支持物理恢复租户内指定的表。
操作步骤
使用
root用户登录数据库的sys租户。(可选)执行以下语句,停止日志备份。
obclient> ALTER SYSTEM NOARCHIVELOG;说明
由于 V2.2.7x 之前的版本不支持在日志备份的集群上发起恢复,如果发起恢复,会导致日志备份断流,故建议 V2.2.7x 之前的版本在执行恢复前先停止日志备份。
创建 Unit(资源单元)。
示例如下:
obclient> CREATE RESOURCE UNIT box_16c96g max_cpu 16, max_memory 103079215104, max_iops 10240, max_disk_size 53687091200, max_session_num 64, MIN_CPU=16, MIN_MEMORY=103079215104, MIN_IOPS=10240;创建 Resource Pool(资源池)。
示例如下:
obclient> CREATE RESOURCE POOL restore_pool unit = 'box_16c96g', unit_num = 1, zone_list = ('z1','z2','z3');执行以下语句,设置加密信息。
说明
如果未加密或恢复时可以访问原来的 KMS,则跳过本步骤。
obclient> SET @kms_encrypt_info = '<加密string>';其中,
<加密string>为EXTERNAL_KMS_INFO的值,EXTERNAL_KMS_INFO为租户级配置项。打开恢复配置。
检查
restore_concurrency是否为0,如果为0,则需要执行以下语句:obclient> ALTER SYSTEM SET restore_concurrency = 50;(可选)修改恢复的等待时间。
默认恢复等待时间
_restore_idle_time为 1 分钟,整个恢复期间会有 3 次等待,即 3 分钟的等待时间。对于测试恢复性能的场景,为了减少恢复的空闲时间,您可以执行以下语句将等待时间调整为10s。obclient> ALTER SYSTEM SET _restore_idle_time = '10s';根据现场需要,设置恢复的密码。
obclient> SET DECRYPTION IDENTIFIED BY 'password';只有在备份时添加了密码的场景下才需要设置恢复的密码。同时如果全量备份+增量备份设置的密码不一样,则需要输入多个密码,密码之间使用逗号分隔。示例如下:
obclient> SET DECRYPTION IDENTIFIED BY 'password1','password2';执行以下语句,开始执行恢复任务。
obclient> ALTER SYSTEM RESTORE <table_name_list> FOR <dest_tenant_name> FROM <source_tenant_name> AT 'uri' UNTIL 'timestamp' WITH 'restore_option' ;部分参数说明如下表所示。
参数 描述 table_name_list 指定待恢复的租户内的表,表名需要包含表所在的数据库名(MySQL 模式)或表所属的 Owner(Oracle 模式),多个表名之间中用英文逗号(,)连接。 单个表的表示方法: database_name.table_name或user_name.table_name示例:crm.sales,crm.products,hr.employees
说明
数据库名或表名可能含有特殊字符,对于含特殊字符的数据库名或表名需要放在反引号(``)内。例如:`c&rm`.`s#ales`dest_tenant_name 指恢复的新租户的名称。 source_tenant_name 指源集群的租户名。 uri 指备份时设置的 backup_dest。recover_end_time 指恢复的时间戳,需要大于等于最早备份的数据备份的 CDB_OB_BACKUP_SET_DETAILS的START_TIME,小于等于日志备份CDB_OB_BACKUP_ARCHIVELOG_SUMMARY的MAX_NEXT_TIME。restore_options 支持 backup_cluster_name、backup_cluster_id、pool_list、locality、primary_zone、kms_encrypt:backup_cluster_name为必选项,填写源集群的名称。backup_cluster_id为必选项,填写源集群的cluster_idpool_list为必选项,填写用户的资源池。多个资源池之间用英文逗号(,)分隔。locality为可选项,填写新租户副本分布的 Locality 信息,需要满足与新租户所在集群的pool_list的 Zone 信息相匹配,默认使用源租户的 Locality。若填写的信息与新租户所在集群的pool_list 的 Zone 信息不匹配,则系统会重置为缺省 Locality,即按 resource_pool 的zone_list为每个 Zone 设一个 F 副本。
例如,源租户的 Locality 为"F@z1,F@z2,F@z3",新租户所在集群的 Zone 分布为"z1,z2,z3,z4",则新租户的 Locality 使用源租户的 Locality。若源租户的 Locality为"F@z1,F@z2,F@z3,F@z4,F@z5",新租户所在集群的 Zone 分布为"z1,z2,z3",则新租户的 Locality 使用所在集群的全部的 Zone,即新租户的 Locality 为"F@z1,F@z2,F@z3"。primary_zone为可选项,填写新租户的 Leader 副本的偏好位置,需要满足与pool_list及locality的匹配,即需要满足 Zone 信息匹配以及primary_region内至少有两个 Paxos 成员等限制,默认使用源租户的 Primary Zone。若填写的信息与新租户所在集群的pool_list及locality不匹配,则系统会将其重置为缺省primary_zone,即按locality的zone_list将 Leader 随机分布在这些 Zone 中。
例如,源租户的 Locality 为"F@z1,F@z2,F@z3",Primary Zone 为z1,新租户所在集群的 Zone 分布为"z1,z2,z3,z4",则新租户的 Primary Zone 也为z1。若源租户的 Locality 为"F@z1,F@z2,F@z3,F@z4,F@z5",Primary Zone 为z1,新租户所在集群的 Zone 分布是"z1,z2,z3",则新租户的 Locality 为"F@z1,F@z2,F@z3", 同时 Primary Zone 为"z1,z2,z3"。kms_encrypt为可选项,为true则表示在恢复时需要使用步骤 5 指定的kms_encrypt_info。
以下示例表示从租户
tenant1的备份中将表sales、products和orders恢复到new_tenant1中,恢复出来的数据版本为2021-02-28 08:59:45。obclient> ALTER SYSTEM RESTORE crm.sales, crm.products, hr.employees FOR new_tenant1 FROM tenant1 AT 'oss://antsys-oceanbasebackup/backup_rd/?host=cn-hangzhou-alipay-b.oss-cdn.aliyun-inc.com&access_id=xxx&access_key=xxx' UNTIL '2021-02-28 08:59:45' WITH 'backup_cluster_name=ob20daily.backup&backup_cluster_id=1&pool_list=restore_pool';恢复过程中,您可以通过
CDB_OB_RESTORE_PROGRESS视图查看恢复进度。obclient> SELECT * FROM oceanbase.CDB_OB_RESTORE_PROGRESS;恢复完成后,您可以通过
CDB_OB_RESTORE_HISTORY视图查看恢复结果。obclient> SELECT * FROM oceanbase.CDB_OB_RESTORE_HISTORY;