执行恢复 
=========================

本节主要介绍如何通过命令和 OCP 的方式进行物理恢复，目前 OceanBase 数据库支持租户级别的基于时间点的恢复。

通过命令进行恢复 
-----------------------------

恢复会先根据用户输入的命令，从备份的目的地将全量备份恢复回来。之后，再将增量备份恢复到全量备份上面。最后，应用备份出去的事务日志。
**说明**



本节中的操作需要使用 root 用户在 sys 租户上执行。

1. 执行以下语句，停止日志备份。

   ```sql
   obclient> ALTER SYSTEM NOARCHIVELOG;
   ```

   
   **说明**

   

   由于当前版本暂不支持日志备份在集群上发起恢复，如果发起恢复，则会导致日志备份断流，故建议在执行恢复前先停止日志备份。
   

2. 创建 Unit（资源单元）。

   示例如下：

   ```sql
   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;
   ```

   

3. 创建 Resource Pool（资源池）。

   示例如下：

   ```sql
   obclient> CREATE RESOURCE POOL restore_pool unit = 'box_16c96g', unit_num = 1, zone_list = ('z1','z2','z3');
   ```

   

4. 执行以下语句，设置加密信息。

   **说明**

   

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

   ```sql
   obclient> SET @kms_encrypt_info = '<加密string>';
   ```

   

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

5. 打开恢复配置。

   检查 `restore_concurrency` 是否为 `0`，如果为 `0` ，则需要执行以下语句：

   ```sql
   obclient> ALTER SYSTEM SET restore_concurrency = 50;
   ```

   

6. （可选）修改恢复的等待时间。

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

   ```sql
   obclient> ALTER SYSTEM SET _restore_idle_time = '10s';
   ```

   

7. 根据现场需要，设置恢复的密码。

   ```sql
   obclient> SET DECRYPTION IDENTIFIED BY 'password';
   ```

   

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

   ```sql
   obclient> SET DECRYPTION IDENTIFIED BY 'password1'，'password2';
   ```

   

8. 执行以下语句，开始执行恢复任务。

   ```sql
   obclient> ALTER SYSTEM RESTORE <dest_tenantname> FROM <source_tenantname> at 'uri' UNTIL 'timestamp' WITH 'restore_option';
   ```

   

   部分参数说明如下表所示。
   

   |        参数         |                                                                                                                                                                                                                                                                 描述                                                                                                                                                                                                                                                                 |
   |-------------------| |
   | dest_tenantname   | 指恢复的新租户的名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | source_tenantname | 指原集群的租户。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | uri               | 指备份时设置的 `backup_dest`。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | timestamp         | 指恢复的时间戳，需要大于等于最早备份的数据备份的 `CDB_OB_BACKUP_SET_DETAILS `的`START_TIME`，小于等于日志备份 `CDB_OB_BACKUP_ARCHIVELOG_SUMMARY` 的 `MAX_NEXT_TIME`。                                                                                                                                                                                                                                                                                                                                                                                                  |
   | restore_option    | 支持 `backup_cluster_name`、`backup_cluster_id`、`pool_list`、`locality`、`kms_encrypt`： * `backup_cluster_name` 为必选项，填写源集群的名称。   * `backup_cluster_id` 为必选项，填写源集群的 `cluster_id`。   * `pool_list` 为必选项，填写用户的资源池。   * `locality` 为可选项，填写租户的 Locality 信息。   * `kms_encrypt` 为可选项，为 `true` 则表示在恢复时需要使用步骤 4 指定的 `kms_encrypt_info`。    |

   

   恢复示例：
   * NFS

     ```sql
     obclient> ALTER SYSTEM RESTORE restored_trade FROM trade at 'file:///data/nfs/backup' until '2020-05-21 09:39:54.071670' with 'backup_cluster_name=ob20daily.backup&backup_cluster_id=1&pool_list=restore_pool;
     ```

     
   
   * OSS

     ```sql
     obclient> ALTER SYSTEM RESTORE restored_trade FROM trade at 'oss://antsys-oceanbasebackup/backup_rd/?host=cn-hangzhou-alipay-b.oss-cdn.aliyun-inc.com&access_id=xxx&access_key=xxx' until ' 2020-03-23 08:59:45' with 'backup_cluster_name=ob20daily.backup&backup_cluster_id=1&pool_list=restore_pool';
     ```

     
   
   * 腾讯云 COS

     ```sql
     obclient> ALTER SYSTEM RESTORE restored_trade from trade at 'cos://backup-1304745170/backup_rd/20210127?host=cos.ap-nanjing.myqcloud.com&access_id=xxx&access_key=xxx&appid=xxx' until ' 2020-03-23 08:59:45' with 'backup_cluster_name=ob20daily.backup&backup_cluster_id=1&pool_list=restore_pool';
     ```

     
   

   

9. 执行以下语句，查看恢复进度。

   * 查看系统表 Root Table：

     ```sql
     obclient> SELECT svr_ip,role, is_restore, COUNT(*) FROM __all_root_table AS a, (SELECT value FROM __all_restore_info WHERE name='tenant_id') AS b WHERE a.tenant_id=b.value GROUP BY role, is_restore, svr_ip ORDER BY svr_ip, is_restore;
     ```

     

     其中，`is_restore` 的取值含义如下：
     * 0：表示正常副本

       
     
     * 1：表示逻辑恢复的副本

       
     
     * 2：表示物理恢复需要恢复基线的副本

       
     
     * 3：表示物理恢复需要恢复转储的副本

       
     
     * 4：物理恢复需要恢复 clog 的副本

       
     
     * 5：物理恢复需要转储的副本

       
     
     * 6：物理恢复等待所有副本转储完成的副本

       
     
     * 7：物理恢复设置 member list 的副本

       
     

     

     `role` 的取值含义如下：
     * 1：表示 Leader

       
     
     * 2：表示 Follower

       
     
     * 3：表示恢复中的 Leader

       
     

     
   
   * 查看用户表 Meta Table：

     ```sql
     obclient> SELECT svr_ip,role, is_restore, COUNT(*) FROM __all_virtual_meta_table AS a, (SELECT value FROM __all_restore_info WHERE name='tenant_id') AS b WHERE a.tenant_id=b.value GROUP BY role, is_restore, svr_ip ORDER BY svr_ip, is_restore;
     ```

     

     或者

     ```sql
     obclient> SELECT svr_ip ,is_restore, COUNT(*) FROM __all_virtual_partition_store_info WHERE tenant_id>1002 group by svr_ip,is_restore order by svr_ip, is_restore;
     ```

     
     
   

   

10. 执行以下语句，查看恢复结果。

    ```sql
    obclient> SELECT * FROM __all_restore_info;
    ```

    

    ```sql
    obclient> SELECT * FROM __all_restore_history;
    ```

    
    




通过 OCP 进行恢复 
--------------------------------

您也可以在 OCP 上对已备份的集群发起恢复操作。
**说明**



不同 OCP 版本的操作界面可能不同，本节以 OCP V2.5.0 版本为例提供操作指导，OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。

1. 登录 OCP。

   

2. 在左侧导航栏上，单击 **备份恢复** \> **恢复** 。

   

3. 在页面右上角单击 **发起恢复** 。

   

4. 设置存储配置。

   存储配置相关说明如下表所示。
   

   |               配置               |                                                                                                                                                                         描述                                                                                                                                                                         |
   |--------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
   | **存储类型**                       | 支持 **OSS** 和 **File** 两种类型                                                                                                                                                                                                                                                                                                                         |
   | **存储目录**                       | 存储目录： * **存储类型** 为 **OSS** 时，示例如下： ```html oss://antsys-oceanbasebackup/backup_rd/ ```   * **存储类型** 为 **File** 时，示例如下： ```html file:///data/nfs/backup ```    |
   | **访问域名** 、 **访问用户** 、 **访问秘钥** | 如果选择的 **存储类型** 为 **OSS** ，则需要输入访问域名、访问用户和访问密钥后，然后单击 **测试** ，确认可访问。                                                                                                                                                                                                                                                                                 |

   

   如果已经有可用的配置，可以直接在 **存储配置** 区域的右上角单击 **选择已有配置** ，并选择对应的配置后，系统会自动解析存储配置。
   

5. 选择 **恢复源与时间** 。

   在列表中选择 **源集群** **、** **源租户** 和 **恢复的时间点** 。

   ![选择恢复源](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/2958229061/p207261.png)
   

6. 选择恢复的目标租户。

   在列表中选择运行状态的集群，并在 **租户名称** 文本框中输入新的租户名称。

   ![恢复目标](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/2958229061/p207262.png)
   

7. 对恢复的租户进行 Zone 配置，选择 **副本类型** **、** **Unit 规格** 和 **Unit 数量** ，并对 Zone 进行优先级排序。

   

8. 单击 **发起恢复** 。

   



