首批通过分布式安全可靠测评,为关键业务系统打造
使用 BACKUP DATABASE PLUS ARCHIVELOG 功能创建备租户
更新时间:2026-04-16 00:11:35
使用 BACKUP DATABASE PLUS ARCHIVELOG 功能创建备租户的实现方法是,将主租户的所有数据和归档日志在本机或共享存储上生成一份带有归档日志的完整的数据集,再将该数据集上传到待创建的备租户所在集群可以访问的介质上,最后使用数据集恢复出一个备租户。
步骤一:主租户开启归档模式并执行数据备份
使用管理员用户登录主租户或主租户所在集群的
sys租户。主租户开启归档模式。
设置归档目的端。
对于主租户为单机的场景,您可以将租户副本所在机器(observer 进程所在的机器)的一个可以访问路径作为归档目的端。对于其他场景,需要使用共享存储(例如,NFS 或 阿里云 OSS)作为归档目的端。
假设归档介质使用 NFS,归档目的端路径为
/data/1/sh_archive/,示例如下:主租户所在集群的
sys租户设置主租户的归档目的端ALTER SYSTEM SET LOG_ARCHIVE_DEST = 'LOCATION=file:///data/1/sh_archive' TENANT = mysql;其中,
mysql为指定的主租户名。主租户设置本租户的归档目的端
ALTER SYSTEM SET LOG_ARCHIVE_DEST = 'LOCATION=file:///data/1/sh_archive';
设置归档目的端的详细操作,请参见 日志归档的准备工作。
开启归档模式。
注意
为了保证数据备份期间的日志都能被归档,必须先开启租户的归档模式后,再执行数据备份。
主租户所在集群的
sys租户开启主租户的归档模式ALTER SYSTEM ARCHIVELOG TENANT = mysql;其中,
mysql为指定的主租户名。主租户开启本租户的归档模式
ALTER SYSTEM ARCHIVELOG;
开启归档模式的详细操作,请参见 开启归档模式。
确认归档状态是否为
DOING。主租户通过查询
DBA_OB_ARCHIVELOG视图(系统租户查询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 | 1680867152120380679 | 2023-04-07 19:32:32.120380 | file:///data/1/xianlin_archive | +---------+----------+---------+--------+---------------------+----------------------------+--------------------------------+ 1 row in set根据查询结果,
STATUS的值为DOING,表示归档处于正常工作状态。查看归档状态的详细操作,请参见 查看归档进度。
主租户使用 BACKUP DATABASE PLUS ARCHIVELOG 功能执行数据备份。
开启归档模式后,主租户需要使用 BACKUP DATABASE PLUS ARCHIVELOG 功能执行一次数据备份,生成一份带有归档日志的完整数据集。
设置数据备份的备份目的端。
对于主租户为单机的场景,您可以将租户副本所在机器(observer 进程所在的机器)的一个可以访问路径作为备份目的端,且备份目的端与归档目的端的路径不能相同。其他场景,需要使用共享存储(例如,NFS 或 阿里云 OSS)作为备份目的端。
假设备份介质使用 NFS,备份目的端路径为
/data/1/sh_databackup,示例如下:主租户所在集群的
sys租户设置主租户的备份目的端ALTER SYSTEM SET DATA_BACKUP_DEST = 'file:///data/1/sh_databackup' TENANT = mysql;其中,
mysql为指定的主租户名。主租户设置本租户的备份目的端
ALTER SYSTEM SET DATA_BACKUP_DEST = 'file:///data/1/sh_databackup';
设置备份目的端的详细操作,请参见 备份前准备。
执行数据备份。
主租户所在集群的
sys租户对主租户执行数据备份ALTER SYSTEM BACKUP TENANT = mysql PLUS ARCHIVELOG;其中,
mysql为指定的主租户名。主租户执行数据备份
ALTER SYSTEM BACKUP DATABASE PLUS ARCHIVELOG;
确认数据备份状态。
主租户下通过
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 | ON | FULL | USER_TENANT | NONE | | 2023-04-07 19:52:35.361398 | 2023-04-07 19:58:57.223196 | COMPLETED | 0 | | | file:///data/1/sh_databackup | +--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+--------+----------------------------+----------------------------+-----------+--------+---------+-------------+-------------------------------+ 1 row in set根据查询结果,当
STATUS的值为COMPLETED时,表示数据备份已完成。PLUS_ARCHIVELOG列显示为ON,表示使用的是 BACKUP DATABASE PLUS ARCHIVELOG 功能执行的数据备份,这样的备份目录下包含了数据库运行所必需的归档日志,两者一起构成了一份带有归档日志的完整数据集。
(可选)步骤二:主租户关闭归档模式
使用 BACKUP DATABASE PLUS ARCHIVELOG 功能执行数据备份后,如果不再需要持续进行日志归档了,可以关闭主租户的归档模式。
使用管理员用户登录主租户或主租户所在集群的
sys租户。执行以下命令,关闭主租户的归档模式。
主租户所在集群的
sys租户关闭主租户的归档模式ALTER SYSTEM NOARCHIVELOG TENANT = mysql;其中,
mysql为指定的主租户名。主租户关闭本租户的归档模式
ALTER SYSTEM NOARCHIVELOG;
步骤三:获取数据备份并放置在备租户可以访问的位置
从设置的备份目的端处获取主租户的数据备份。
例如,本文示例中,主租户数据备份的存放路径为
/data/1/sh_databackup。将获取的数据备份,放置在待创建的备租户可以访问的位置。
例如,对于主租户为单机的场景,只需要将数据备份打包并拷贝到备租户副本所在机器(observer 进程所在的机器)的一个可以访问的路径上。对于其他场景,可以放置在备租户可以访问的共享存储(例如,NFS 或 阿里云 OSS)上。
步骤四:使用带有归档日志的完整数据集恢复出租户
使用
root用户登录到待创建的备租户所在集群的sys租户。执行以下命令,创建备租户所需的 Unit 规格。
创建新备租户所需的 Unit 规格时,不强制要求与源租户的 Unit 规格相同,允许使用更小的 Unit 规格。例如,创建一个 CPU 为 1 核且内存为 5 GB 的 Unit 规格
unit1。例如,CREATE RESOURCE UNIT unit1 MAX_CPU 1, MEMORY_SIZE = '5G';有关 Unit 规格的详细创建操作,请参见 创建租户。
创建备租户所需的资源池。
例如,创建资源池
pool_for_standby。CREATE RESOURCE POOL pool_for_standby UNIT = 'unit1', UNIT_NUM = 1, ZONE_LIST = ('zone1','zone2','zone3');有关资源池的详细创建操作,请参见 创建租户。
从主租户的带有归档日志的完整数据集中恢复出备租户。
假设获取到的数据备份放置在备租户可访问的路径
file:///data/1/sh_databackup下,SQL 语句如下:ALTER SYSTEM RESTORE standby_tenant FROM 'file:///data/1/sh_databackup' WITH 'pool_list=pool_for_standby';确认恢复是否完成。
恢复过程中,可以通过
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-07 20:43:39.883628 | NORMAL | STANDBY | 2023-04-07 20:05:16.617492 | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ 1 row in set根据查询结果,当
TENANT_ROLE的值为STANDBY时,则表示备租户恢复完成。
后续操作
注意
不同于使用物理备份恢复(带日志)功能创建的备租户,通过该方式恢复出的备租户未指定日志恢复源,无法直接开启日志持续同步。需要设置日志恢复源后,才能开启日志的持续同步。
通过该方式创建的备租户,还需要进行如下操作: