OceanBase 数据库支持物理恢复租户内指定的表。

操作步骤

  1. 使用 sys 租户的 root 用户登录数据库。

  2. (可选)执行以下语句,停止日志备份。

    1. obclient> ALTER SYSTEM NOARCHIVELOG;

    说明

    由于 V2.2.7x 之前的版本不支持在日志备份的集群上发起恢复,如果发起恢复,会导致日志备份断流,故建议 V2.2.7x 之前的版本在执行恢复前先停止日志备份。

  3. 创建 Unit(资源单元)。

    示例如下:

    1. 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;
  4. 创建 Resource Pool(资源池)。

    示例如下:

    1. obclient> CREATE RESOURCE POOL restore_pool unit = 'box_16c96g', unit_num = 1, zone_list = ('z1','z2','z3');
  5. 执行以下语句,设置加密信息。

    说明

    如果未加密或恢复时可以访问原来的 KMS,则跳过本步骤。

    1. obclient> SET @kms_encrypt_info = '<加密string>';

    其中,<加密string>EXTERNAL_KMS_INFO 的值,EXTERNAL_KMS_INFO 为租户级配置项。

  6. 打开恢复配置。

    检查 restore_concurrency 是否为 0,如果为 0 ,则需要执行以下语句:

    1. obclient> ALTER SYSTEM SET restore_concurrency = 50;
  7. (可选)修改恢复的等待时间。

    默认恢复等待时间 _restore_idle_time 为 1 分钟,整个恢复期间会有 3 次等待,即 3 分钟的等待时间。对于测试恢复性能的场景,为了减少恢复的空闲时间,您可以执行以下语句将等待时间调整为 10s

    1. obclient> ALTER SYSTEM SET _restore_idle_time = '10s';
  8. 根据现场需要,设置恢复的密码。

    1. obclient> SET DECRYPTION IDENTIFIED BY 'password';

    只有在备份时添加了密码的场景下才需要设置恢复的密码。同时如果全量备份+增量备份设置的密码不一样,则需要输入多个密码,密码之间使用逗号分隔。示例如下:

    1. obclient> SET DECRYPTION IDENTIFIED BY 'password1''password2';
  9. 执行以下语句,开始执行恢复任务。

    1. 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_nameuser_name.table_name

    示例:crm.sales,crm.products,hr.employees

    说明

    数据库名或表名可能含有特殊字符,对于含特殊字符的数据库名或表名需要放在反引号(`)内。例如:<code data-tag="code">crm.sales,crm.products`

    dest_tenant_name

    指恢复的新租户的名称。

    source_tenant_name

    指原集群的租户名。

    uri

    指备份时设置的 backup_dest

    recover_end_time

    指恢复的时间戳,需要大于等于最早备份的数据备份的 CDB_OB_BACKUP_SET_DETAILS START_TIME,小于等于日志备份 CDB_OB_BACKUP_ARCHIVELOG_SUMMARYMAX_NEXT_TIME

    restore_options

    支持 backup_cluster_namebackup_cluster_idpool_listlocalitykms_encrypt

    • backup_cluster_name 为必选项,填写源集群的名称。

    • backup_cluster_id 为必选项,填写源集群的 cluster_id

    • pool_list 为必选项,填写用户的资源池。

    • locality 为可选项,填写租户的 Locality 信息。

    • kms_encrypt 为可选项,为 true 则表示在恢复时需要使用步骤 5 指定的 kms_encrypt_info

    以下示例表示从租户 tenant1 的备份中将表 salesproductsorders 恢复到 new_tenant1 中,恢复出来的数据版本为 2021-02-28 08:59:45

    1. 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';
  10. 恢复过程中,您可以通过 oceanbase.CDB_OB_RESTORE_PROGRESS 视图查看恢复进度。

    1. obclient> SELECT * FROM oceanbase.CDB_OB_RESTORE_PROGRESS;
  11. 恢复完成后,您可以通过 oceanbase.CDB_OB_RESTORE_HISTORY 视图查看恢复结果。

    1. obclient> SELECT * FROM oceanbase.CDB_OB_RESTORE_HISTORY;