OceanBase 数据库支持物理恢复租户内指定的表。
操作步骤
使用 sys 租户的 root 用户登录数据库。
(可选)执行以下语句,停止日志备份。
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
说明数据库名或表名可能含有特殊字符,对于含特殊字符的数据库名或表名需要放在反引号(
`)内。例如:<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_SUMMARY
的MAX_NEXT_TIME
。restore_options
支持
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
则表示在恢复时需要使用步骤 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';
恢复过程中,您可以通过
oceanbase.CDB_OB_RESTORE_PROGRESS
视图查看恢复进度。obclient> SELECT * FROM oceanbase.CDB_OB_RESTORE_PROGRESS;
恢复完成后,您可以通过
oceanbase.CDB_OB_RESTORE_HISTORY
视图查看恢复结果。obclient> SELECT * FROM oceanbase.CDB_OB_RESTORE_HISTORY;