首批通过分布式安全可靠测评,为关键业务系统打造
使用备份恢复(带日志)功能创建备租户
更新时间:2026-04-10 11:58:00
使用备份恢复(带日志)功能创建备租户的方式为一种通用方式,该方式主要是从数据备份和日志归档中恢复出备租户,并且既可以从主租户的数据备份和日志归档中恢复,也可以从已存在的备租户的数据备份和日志归档中恢复。
步骤一:主租户或其他的备租户开启归档模式并执行数据备份
由于新的备租户需要从数据备份和日志归档中恢复出来,故在新建备租户前,需要为主租户或源端的备租户开启归档模式并执行一次全量数据备份。
说明
设置归档目的端、开启归档模式、设置备份目的端以及执行数据备份等操作均支持在系统租户(sys 租户)或用户租户下执行,在系统租户下执行时,需要在对应命令的结尾加 tenant = 'tenant_name',本文以在用户租户下的操作为例,提供操作指导。
主租户或源端的备租户开启归档模式,并保证归档状态一直为
DOING。设置归档目的端。
假设归档介质使用 NFS,归档目的端路径为
/data/1/sh_archive/,用户租户设置归档目的端的 SQL 语句示例如下:ALTER SYSTEM SET LOG_ARCHIVE_DEST = 'LOCATION=file:///data/1/sh_archive';设置归档目的端的详细操作,请参见 日志归档前准备。
开启主租户或源端的备租户的归档模式。
注意
为了保证数据备份期间的日志都能被归档,必须先开启租户的归档模式后,再执行数据备份。
用户租户开启归档模式的 SQL 语句如下:
ALTER SYSTEM ARCHIVELOG;开启归档模式的详细操作,请参见 开启归档模式。
确认归档状态是否为
DOING。用户租户查询归档状态的语句如下,如果是系统租户,需要查询
CDB_OB_ARCHIVELOG视图。系统租户
SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM oceanbase.CDB_OB_ARCHIVELOG;MySQL 租户
SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM oceanbase.DBA_OB_ARCHIVELOG;Oracle 租户
SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM SYS.DBA_OB_ARCHIVELOG;
查询结果的示例如下:
+---------+----------+---------+--------+---------------------+----------------------------+--------------------------------+ | DEST_ID | ROUND_ID | DEST_NO | STATUS | CHECKPOINT_SCN | CHECKPOINT_SCN_DISPLAY | PATH | +---------+----------+---------+--------+---------------------+----------------------------+--------------------------------+ | 1001 | 1 | 0 | DOING | 1680265982125159110 | 2023-03-31 20:33:02.125159 | file:///data/1/sh_archive | +---------+----------+---------+--------+---------------------+----------------------------+--------------------------------+ 1 row in set根据查询结果,
STATUS的值为DOING,表示归档处于正常工作状态。查看归档状态的详细操作,请参见 查看归档进度。
主租户或源端的备租户开启数据备份,并完成一次全量备份。
开启归档模式后,主租户或源端的备租户需要执行一次数据备份。
设置数据备份的备份目的端。
假设备份介质使用 NFS,备份目的端路径为
/data/1/sh_databackup,用户租户设置备份目的端的 SQL 语句示例如下:ALTER SYSTEM SET DATA_BACKUP_DEST = 'file:///data/1/sh_databackup';设置备份目的端的详细操作,请参见 备份前准备。
执行数据备份。
用户租户执行数据备份的 SQL 语句如下:
ALTER SYSTEM BACKUP DATABASE;发起租户全量数据备份的详细操作,请参见 发起数据备份。
确认数据备份状态。
用户租户下通过
DBA_OB_BACKUP_JOBS视图(系统租户查询CDB_OB_BACKUP_JOBS视图)查询数据备份进度的 SQL 语句如下:系统租户
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS;MySQL 租户
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOBS;Oracle 租户
SELECT * FROM SYS.DBA_OB_BACKUP_JOBS;
如果备份正在执行,则该视图中会显示备份任务的进度信息。查看数据备份进度的详细操作,请参见 查看数据备份进度。
如果备份已完成,可以通过
DBA_OB_BACKUP_JOB_HISTORY视图(系统租户查询CDB_OB_BACKUP_JOB_HISTORY视图)进一步查询数据备份历史。系统租户
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY;MySQL 租户
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOB_HISTORY;Oracle 租户
SELECT * FROM SYS.DBA_OB_BACKUP_JOB_HISTORY;
查询数据备份历史的结果如下:
+--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+--------+----------------------------+----------------------------+-----------+--------+---------+-------------+-------------------------------+ | JOB_ID | INCARNATION | BACKUP_SET_ID | INITIATOR_TENANT_ID | INITIATOR_JOB_ID | EXECUTOR_TENANT_ID | PLUS_ARCHIVELOG | BACKUP_TYPE | JOB_LEVEL | ENCRYPTION_MODE | PASSWD | START_TIMESTAMP | END_TIMESTAMP | STATUS | RESULT | COMMENT | DESCRIPTION | PATH | +--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+--------+----------------------------+----------------------------+-----------+--------+---------+-------------+-------------------------------+ | 1 | 1 | 1 | 1004 | 0 | 1004 | OFF | FULL | USER_TENANT | NONE | | 2023-03-31 20:48:32.342315 | 2023-03-31 20:49:39.908559 | COMPLETED | 0 | | | file:///data/1/sh_databackup | +--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+--------+----------------------------+----------------------------+-----------+--------+---------+-------------+-------------------------------+ 1 row in set根据查询结果,当
STATUS的值为COMPLETED时,表示数据备份已完成。
步骤二:恢复出备租户
使用
root用户登录到待创建的备租户所在集群的sys租户。执行以下命令,创建备租户所需的 Unit 规格。
例如,创建一个 CPU 为 1 核且内存为 5 GB 的 Unit 规格
unit1。CREATE RESOURCE UNIT unit1 MAX_CPU 1, MEMORY_SIZE = '5G';有关 Unit 规格的详细创建操作,请参见 创建租户。
创建备租户所需的资源池。
为备租户创建资源池时,建议尽量与源端租户保持同构,即建议备租户的资源池中
unit_num的个数与源端租户相同。例如,创建资源池
pool_for_standby。CREATE RESOURCE POOL pool_for_standby UNIT = 'unit1', UNIT_NUM = 1, ZONE_LIST = ('zone1','zone2','zone3');有关资源池的详细创建操作,请参见 创建租户。
执行
RESTORE命令,使用租户的数据备份和日志归档功能,恢复出备租户。语句如下:
ALTER SYSTEM RESTORE standby_tenant_name FROM uri UNTIL TIME ='timestamp' WITH 'restore_option' [WITH KEY FROM 'backup_key_path' ENCRYPTED BY 'password'] [DESCRIPTION description];相关参数说明如下:
standby_tenant_name:指待恢复出的备租户的名称。uri:需要分别指定主租户或源端的备租户的数据备份路径和归档路径。UNTIL TIME= timestamp:用于指定的恢复终点,恢复到该位点为止,且包括该位点。指定timestamp必须以=连接。timestamp仅支持YYYY-MM-DD HH24:MI:SS.FF格式, 精确到纳秒。关于如何选取
timestamp的详细说明,请参见 物理恢复相关参数介绍。restore_option支持指定pool_list、locality、primary_zone, 其中pool_list为必选项, 其余为可选项。不同参数之间通过&分隔。在指定locality和primary_zone时,建议尽量与源租户保持同构。如果不同构,待租户恢复后激活为主租户可能会产生负载均衡操作,影响性能。有关
restore_option中各参数的详细说明,请参见 物理恢复相关参数介绍。WITH KEY FROM 'backup_key_path' ENCRYPTED BY 'password':指定加密租户的秘钥备份信息。仅当源租户配置了透明加密,才需要在恢复时指定秘钥备份相关的信息。backup_key_path:秘钥的备份路径。password:备份秘钥时设置的加密密码。
从日志归档路径
file:///data/1/sh_archive与数据备份路径file:///data/1/sh_databackup恢复出备租户standby_tenant的示例如下:ALTER SYSTEM RESTORE standby_tenant FROM 'file:///data/1/sh_databackup,file:///data/1/sh_archive' UNTIL TIME='2023-05-26 15:04:23.825558' WITH 'pool_list=pool_for_standby';关于
RESTORE命令的更多介绍,请参见 物理恢复相关参数介绍。确认恢复是否完成。
恢复过程中,可以通过
DBA_OB_TENANTS视图确认恢复是否完成。SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';查询结果如下
+----------------+-------------+----------------------------+--------+-------------+----------------------------+ | TENANT_NAME | TENANT_TYPE | CREATE_TIME | STATUS | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ | standby_tenant | USER | 2023-04-02 20:42:38.800518 | NORMAL | STANDBY | 2023-04-02 20:42:30.736135 | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ 1 row in set根据查询结果,当
TENANT_ROLE的值为STANDBY时,则表示备租户恢复完成。有关查看恢复进度的更多详细介绍,请参见 查看恢复进度。
步骤三:开启日志持续同步
使用默认的 RESTORE 命令创建的新备租户,不会连续同步主租户或源端备租户归档的日志,需要手动再执行 RECOVER 命令重新设置新备租户的恢复终点,开启日志持续同步模式。
使用管理员用户登录新备租户或新备租户所在集群的
sys租户。根据实际使用场景,执行
RECOVER命令,更改新备租户的恢复终点。新备租户所在集群的
sys租户为新备租户开启日志持续同步ALTER SYSTEM RECOVER STANDBY TENANT = tenant_name UNTIL UNLIMITED;其中,
UNLIMITED表示无穷大。示例如下:
ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant UNTIL UNLIMITED;新备租户为本租户开启日志持续同步
ALTER SYSTEM RECOVER STANDBY UNTIL UNLIMITED;
再次查询
DBA_OB_TENANTS视图,通过SYNC_SCN字段确认新备租户的同步位点。其中,
SCN_TO_TIMESTAMP(SYNC_SCN)列显示了新备租户当前的同步进度。新备租户所在集群的
sys租户查询视图SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';新备租户查询视图
MySQL 租户
SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';查询结果如下:
+----------------+-------------+----------------------------+--------+-------------+----------------------------+ | TENANT_NAME | TENANT_TYPE | CREATE_TIME | STATUS | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ | standby_tenant | USER | 2023-04-02 20:42:38.800518 | NORMAL | STANDBY | 2023-04-02 21:06:50.810688 | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ 1 row in setOracle 租户
SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM SYS.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';查询结果如下:
+------------------+-------------+------------------------------+--------+-------------+---------------------------------+ | TENANT_NAME | TENANT_TYPE | CREATE_TIME | STATUS | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +------------------+-------------+------------------------------+--------+-------------+---------------------------------+ | standby_tenant | USER | 23-MAY-23 02.37.58.647507 PM | NORMAL | STANDBY | 26-MAY-23 01.34.46.896905660 PM | +------------------+-------------+------------------------------+--------+-------------+---------------------------------+ 1 row in set