物理备库通过日志传输服务在主租户和备租户之间实时同步 Redo 日志。特别地,主租户不会主动给备租户推送日志,仅依赖备租户从主租户拉取日志。
日志传输服务会自动寻址日志位置信息,并处理日志落后及主租户所在集群节点故障等高可用问题。备租户既可以通过主租户的日志归档来获取日志,也可以通过网络直连主租户所在的集群来获取日志。
日志传输服务提供了两种不同的使用模式,这两种使用模式决定了物理备库的两种不同的部署方案:基于日志归档的物理备库和基于网络的物理备库。
基于日志归档的物理备库
基于日志归档的物理备库中,物理备库的 Redo 日志来源于主租户或其他备租户的日志归档,类似于 Oracle 数据库的 Far Sync,备租户仅与日志归档交互,而不会和上游的主租户或备租户有任何其他形式的交互。
在该部署模式下,备租户与上游租户不需要网络联通,但其同步性能和可用性会受到日志归档介质的影响。
基于日志归档的物理备库模式的部署架构图如下所示。图中,Log Archive(日志归档)、Log Archive Dest(日志归档目的端) 以及 Log Restore(日志恢复) 共同构成了该部署模式下的日志传输服务。
基于网络的物理备库
基于网络的物理备库中,备租户直接通过网络连接主租户或其他备租户读取日志,类似于 MySQL 数据库的 Replication。
在该部署模式下,备租户和主租户的网络需要联通。备租户会通过网络发送 RPC 请求读取主租户集群中的 Redo 日志,同时为了支持在主租户节点故障、日志回收等场景下备租户的高可用,备租户也需要少量主租户系统视图的查询权限。
特别地,该部署模式下,备租户会向主租户的日志传输服务不断请求日志,日志传输服务返回的日志既可以是主租户的在线日志,也可以是主租户的归档日志(主租户开启了日志归档模式的场景下),两种日志来源支持自动切换,对备租户以及业务的使用者透明。
基于网络的物理备库模式的部署架构图如下所示。图中,Primary Tenant1 未开启日志归档,Standby Tenant1 仅能通过日志传输服务同步 Primary Tenant1 的在线日志;Primary Tenant2 开启了日志归档,Standby Tenant2 通过日志传输服务可以同步 Primary Tenant2 的在线日志,待在线日志回收后,日志传输服务会自动切换日志源到归档日志,备租户便能够通过日志传输服务继续同步 Primary Tenant2 的归档日志,从而尽可能保证日志同步不中断。
两种部署模式对比
基于日志归档的物理备库与基于网络的物理备库在功能的使用上会有一些差异,具体差异如下表所示。
功能项 | 基于日志归档的物理备库 | 基于网络的物理备库 |
---|---|---|
是否支持 Switchover | 支持 | 支持 |
是否支持 Failover | 支持 | 支持 |
是否支持一个主库对接多个备库 | 支持 | 支持 |
是否支持级联备库 | 支持 | 支持 |
是否为异步同步 | 是 | 是 |
是否支持最大可用或最大保护模式 | 不支持 | 不支持 |
是否支持备库限速 | 不支持 | 支持,集群级限速 |
备库的数据源 | 归档日志 | 主库的在线日志或归档日志,支持自动切换 |
是否要求主库开启归档模式 | 要求 | 不要求 |
是否要求备库开启归档模式 | 要求,否则无法执行 Switchover | 不要求 |
实时性 | 秒级 ~ 分钟级 | 秒级 |
日志归档支持的存储介质 | OSS/NFS | 不涉及 |
无论是基于日志归档的物理备库,还是基于网络的物理备库,都需要为备租户设置日志恢复源。两种部署方式的日志恢复源支持随时按需动态修改,同时也支持从一种日志恢复源切换为另外一种日志恢复源。本节将分别从基于日志归档的物理备库场景和基于网络的物理备库场景介绍如何设置日志恢复源。
注意事项
在从一种日志恢复源修改为另一种日志恢复源时,必须保证修改前后其日志恢复源与创建备租户时所指定的源租户一致,即要么使用源租户的日志归档,要么直接指向源租户。如果修改前后的日志恢复源不一致,将会导致备租户的数据错误且无法恢复,需要您重新创建新的备租户。
基于日志归档的物理备库的场景
通过物理备份恢复(带日志)功能创建的备租户,在执行 RESTORE
命令恢复出备租户时已为备租户设置了默认的恢复源,即默认恢复源为主租户或源端的备租户的日志归档目的端,故通常不需要再设置。如果需要将日志恢复源修改为直接指向主租户或源端的备租户,请参考本文中 基于网络的物理备库的场景 的内容重新进行设置。
对于使用其他方式(创建空备租户和使用 BACKUP DATABASE PLUS ARCHIVELOG
功能创建备租户)创建的备租户,如果需要将日志恢复源设置为使用主租户的日志归档,则需要参考以下操作手动设置日志恢复源。
注意
当归档介质为对象存储(例如:阿里云 OSS、AWS S3 以及兼容 S3 协议的对象存储)时,物理备库运行过程中,如果主租户或源端的备租户更改了备份介质的密钥信息,则需要参考以下操作重新设置日志恢复源。
-
使用管理员用户登录备租户或备租户所在集群的
sys
租户。 -
执行以下命令,配置备租户的恢复源指向主租户的归档目的端。
-
备租户所在集群的
sys
租户配置备租户的恢复源ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=archive_path' TENANT = tenant_name;
-
备租户配置本租户的恢复源
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=archive_path';
其中,
LOCATION
属性用于指定主租户的归档目的端。以下以归档介质为 OSS 或 NFS 时为例。
阿里云 OSS
NFS
当主租户的归档介质为 OSS 时,备租户所在集群的
sys
租户或备租户设置日志恢复源的示例如下:obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=oss://oceanbase-test-bucket/backup/archive?host=****.aliyun-inc.com&access_id=****&access_key=****' TENANT = standby_tenant;
obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=oss://oceanbase-test-bucket/backup/archive?host=****.aliyun-inc.com&access_id=****&access_key=****';
-
基于网络的物理备库的场景
通过创建空备租户的方式创建的备租户,在执行 CREATE STANDBY TENANT
命令时已通过 LOG_RESTORE_SOURCE
参数设置了一个默认的日志恢复源,即默认恢复源为直接指向主租户,故通常不需要再设置。如果仍需要将日志恢复源修改为使用主租户的日志归档,则需要您参考本文中 基于日志归档的物理备库的场景 重新设置日志恢复源。
对于使用其他方式(使用备份恢复(带日志)功能创建备租户和使用 BACKUP DATABASE PLUS ARCHIVELOG
功能创建备租户)创建的备租户,如果需要将日志恢复源设置为指向主租户或源端的备租户,则需要参考以下操作通过 ALTER SYSTEM SET LOG_RESTORE_SOURCE
命令手动设置日志恢复源。
步骤一:创建访问视图的专用用户
由于备租户在连接主租户或源端的备租户时,需要访问主租户或源端的备租户的部分系统视图,因此需要有一个访问视图专用用户具备这部分系统视图的查询权限。您可以提供一个主租户或源端的备租户上已有相关权限的用户,也可以在主租户或源端的备租户上为当前备租户专门创建一个新的具备相关权限的用户。
备租户需要访问的系统视图如下:
-
GV$OB_LOG_STAT
:用于获取主租户的机器列表、副本服务的日志流 LSN 范围、角色(是否是 Leader)等信息。关于
GV$OB_LOG_STAT
视图的更多介绍,参见 GV$OB_LOG_STAT。 -
GV$OB_UNITS
:查询主租户的所有 Unit 信息,获取副本状态、Zone 以及 Region 等信息,用于过滤、获取和维护租户机器连接等。关于
GV$OB_UNITS
视图的更多介绍,参见 GV$OB_UNITS。 -
GV$OB_PARAMETERS
: 用于查询主租户的cluster_id
、tenant_id
等服务必须的元信息。关于
GV$OB_PARAMETERS
视图的更多介绍,请参见 GV$OB_PARAMETERS。 -
DBA_OB_ACCESS_POINT
: 用于获取访问入口信息。在主租户迁移复制、容灾等场景下,若访问入口发生变化,备租户可以自动感知,不需要用户手动修改。关于
DBA_OB_ACCESS_POINT
视图的更多介绍,参见 DBA_OB_ACCESS_POINT。 -
DBA_OB_TENANTS
:获取主租户的兼容模式。关于
DBA_OB_TENANTS
视图的更多介绍,参见 DBA_OB_TENANTS。 -
DBA_OB_LS
: 获取主租户的日志流列表以及日志流状态。关于
DBA_OB_LS
视图的更多介绍,参见 DBA_OB_LS。
创建访问视图专用用户并授权的具体操作如下。
注意
OceanBase 数据库的用户名和权限信息是在主备租户之间进行同步,备租户自身不允许创建用户和授予权限。因此,如果当前备租户的源端是另外一个备租户,则需要在对应的主租户上创建访问视图专用用户并授予权限。
MySQL模式
-
使用管理员用户登录到主租户。
-
执行以下命令,创建一个新用户。
obclient [oceanbase]> CREATE USER rep_user IDENTIFIED BY '******';
-
给用户授权。
以下示例是将
oceanbase
数据库下所有表的SELECT
权限授予该用户。您也可以仅授予oceanbase
库下GV$OB_LOG_STAT
、GV$OB_UNITS
、GV$OB_PARAMETERS
、DBA_OB_ACCESS_POINT
、DBA_OB_TENANTS
、DBA_OB_LS
等视图的 SELECT 权限。obclient [oceanbase]> GRANT SELECT ON oceanbase.* TO rep_user;
Oracle 模式
-
使用管理员用户登录到主租户。
-
创建一个新用户。
obclient [SYS]> CREATE USER rep_user IDENTIFIED BY '******';
-
将角色
STANDBY_REPLICATION
授予新用户rep_user
。STANDBY_REPLICATION
为系统默认角色,该角色默认包含CREATE SESSION
系统权限以及对以下视图的查询权限:- GV$OB_LOG_STAT
- GV$OB_UNITS
- GV$OB_PARAMETERS
- DBA_OB_ACCESS_POINT
- DBA_OB_TENANTS
- DBA_OB_LS
- DBA_OB_LS_HISTORY
语句如下:
obclient [SYS]> GRANT STANDBY_REPLICATION TO rep_user;
步骤二:获取主租户或源端的备租户的访问入口信息
基于网络的物理备库在设置日志恢复源时,还需要获取主租户或源端的备租户的访问入口信息,即租户副本所在的 OBServer 节点的 IP 地址及其端口号。
-
使用管理员用户登录主租户或源端的备租户。
-
执行以下命令,获取访问入口信息。
-
MySQL 模式
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_ACCESS_POINT;
说明
如果您当前登录的是
sys
租户,需要通过查询CDB_OB_ACCESS_POINT
视图来获取访问入口信息。 -
Oracle 模式
obclient [SYS]> SELECT * FROM SYS.DBA_OB_ACCESS_POINT;
查询结果如下:
+-----------+-------------+-------------+----------+ | TENANT_ID | TENANT_NAME | SVR_IP | SQL_PORT | +-----------+-------------+-------------+----------+ | 1004 | mysql | xx.xx.xx.22 | 17855 | | 1004 | mysql | xx.xx.xx.23 | 17857 | | 1004 | mysql | xx.xx.xx.24 | 17859 | +-----------+-------------+-------------+----------+ 3 rows in set
本示例中,查询的租户有三个副本,如果主租户或源端的备租户为单副本租户,则仅返回一行结果。
-
步骤三:检查主租户设置
在当前主备架构下,当主租户进行缩容、Transfer 等操作后,容易出现主租户的日志流被删除、日志被回收从而导致备租户日志同步卡住的问题。为了解决该问题,需要在主租户上开启归档模式或者为主租户设置租户级配置项 ls_gc_delay_time。
检查主租户上是否开启日志归档或者设置配置项 ls_gc_delay_time
的方法如下:
-
检查主租户是否开启归档模式
-
使用管理员用户登录主租户或主租户所在集群的
sys
租户。 -
查询是否开启归档模式。
-
主租户所在集群的
sys
租户obclient> SELECT LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='mysql';
-
用户租户
MySQL 模式
Oracle 模式
MySQL 模式下查询是否开启归档模式:
obclient> SELECT LOG_MODE FROM oceanbase.DBA_OB_TENANTS;
查询结果的示例如下:
+--------------+ | LOG_MODE | +--------------+ | NOARCHIVELOG | +--------------+ 1 row in set
根据查询结果,
ARCHIVELOG
表示主租户已开启归档模式;NOARCHIVELOG
表示未开启归档模式,开启归档模式的详细操作参见 开启归档模式。 -
-
-
检查主租户上配置项
ls_gc_delay_time
的值是否大于0s
租户级配置项
ls_gc_delay_time
用于配置日志流的延迟删除时间,默认值为0s
,表示未开启日志流延迟删除功能。当设置了配置项ls_gc_delay_time
并且未开启归档时,一个日志流在满足被删除的条件后会等待一定的时间才会被回收。-
使用管理员用户登录主租户。
-
查询主租户上配置项
ls_gc_delay_time
的值。obclient> SHOW PARAMETERS LIKE '%ls_gc_delay_time%';
根据查询结果,如果值为
0s
,则表示未设置,用户可以根据需要进行设置。配置项ls_gc_delay_time
的详细设置方法及说明,参见 ls_gc_delay_time。
-
步骤四:设置日志恢复源
-
使用管理员用户登录备租户或备租户所在集群的
sys
租户。 -
执行以下命令,设置日志恢复源。
-
备租户所在集群的
sys
租户设置备租户的日志恢复源ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password' TENANT = standby_tenant_name;
-
备租户设置本租户的日志恢复源
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password';
部分参数说明如下:
$ip_list
:主租户或源端的备租户所在副本的 OBServer 节点的 IP 及 SQL 端口号。此处填写步骤二中获取的信息。如果有多个 OBServer 节点信息,可以不用填写全部 OBServer 节点的信息。$user_name
:填写步骤一中创建的访问视图的专用用户。$tenant_name
:待连接的主租户或源端的备租户名。$password
:访问视图的专用用户对应的用户密码。
示例如下:
obclient > ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=******' TENANT = standby_tenant;
obclient > ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=******';
设置成功后,系统租户(
sys
租户)或用户租户可以分别通过CDB_OB_LOG_RESTORE_SOURCE
视图和DBA_OB_LOG_RESTORE_SOURCE
视图,确认日志恢复源是否修改成功 -
默认情况下,备租户应处于持续同步模式,若当前备租户未处于持续同步模式,请参考本文将备租户设置为持续同步模式。
操作步骤
-
使用管理员用户登录备租户或备租户所在集群的
sys
租户。 -
执行
RECOVER
命令,设置备租户的日志恢复终点。ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] UNTIL UNLIMITED;
其中,仅在使用
sys
租户执行命令时,才需要在语句中添加TENANT = tenant_name
参数指定备租户名;UNLIMITED
表示无穷大。sys
租户设置备租户的日志恢复终点的示例如下:ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant UNTIL UNLIMITED;
备租户设置本租户的日志恢复终点的示例如下:
ALTER SYSTEM RECOVER STANDBY UNTIL UNLIMITED;
执行该语句后,备租户会进入持续同步模式。
更多信息
OceanBase 数据库也支持通过 RECOVER
命令将备租户的恢复终点设置为任意合理的时间点。语法如下:
-
恢复到指定时间戳
ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] UNTIL TIME='timestamp';
-
恢复到指定 SCN
ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] UNTIL SCN =scn;
部分参数说明如下:
-
仅在使用
sys
租户执行命令时,才需要在语句中添加TENANT = tenant_name
参数指定备租户名。 -
timestamp
为指定的时间戳,单位为纳秒。 -
scn
为指定的 SCN,是一个逻辑的、系统内部的时间戳。
执行以上语句后,备租户会恢复到该位点位置,且包括该位点。
CDB_OB_LOG_RESTORE_SOURCE
视图和 DBA_OB_LOG_RESTORE_SOURCE
视图中记录了日志恢复源信息,您可以通过查询视图来获取日志恢复源信息。
操作步骤
-
使用管理员用户登录备租户或备租户所在集群的
sys
租户。 -
执行以下命令,查看日志恢复源信息。
-
系统租户(
sys
租户)下查看日志恢复源信息SELECT * FROM oceanbase.CDB_OB_LOG_RESTORE_SOURCE;
-
用户租户下查看日志恢复源信息
-
MySQL 模式:
SELECT * FROM oceanbase.DBA_OB_LOG_RESTORE_SOURCE;
-
Oracle 模式:
SELECT * FROM SYS.DBA_OB_LOG_RESTORE_SOURCE;
-
基于日志归档的物理备库中,备租户的日志恢复源查询结果的示例如下:
+-----------+----+----------+--------------------------------+---------------------+ | TENANT_ID | ID | TYPE | VALUE | RECOVERY_UNTIL_SCN | +-----------+----+----------+--------------------------------+---------------------+ | 1006 | 1 | LOCATION | file:///data/1/sh_archive | 4611686018427387903 | +-----------+----+----------+--------------------------------+---------------------+ 1 row in set
从查询结果可知,
TYPE
列为LOCATION
,表示备租户是通过主租户或源端的备租户的日志归档来同步日志。基于网络的物理备库中,备租户的日志恢复源查询结果的示例如下:
+-----------+----+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+ | TENANT_ID | ID | TYPE | VALUE | RECOVERY_UNTIL_SCN | +-----------+----+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+ | 1006 | 1 | SERVICE | IP_LIST=xx.xx.xx.22:17855;xx.xx.xx.23:17857;xx.xx.xx.24:17859,USER=rep_user@mysql,PASSWORD=***********************************,TENANT_ID=1004,CLUSTER_ID=1,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=true | 4611686018427387903 | +-----------+----+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+ 1 row in set
从查询结果可知,
TYPE
列为SERVICE
,表示备租户是通过网络连接主租户或源端的备租户来同步日志。 -
-
执行以下命令,查看日志链路相关信息。
-
系统租户(
sys
租户)下查看日志链路相关信息SELECT * FROM oceanbase.GV$OB_LOG_TRANSPORT_DEST_STAT;
-
用户租户下查看日志链路相关信息。
-
MySQL 模式:
SELECT * FROM oceanbase.GV$OB_LOG_TRANSPORT_DEST_STAT;
-
Oracle 模式:
SELECT * FROM SYS.GV$OB_LOG_TRANSPORT_DEST_STAT;
-
-
备租户进入持续同步模式后,您可以通过视图来实时查看备租户的日志同步进度,以便及时做出调整。
对于主租户而言,每个主租户至少有两个日志流,即一个系统日志流,一个普通日志流。备租户与主租户的日志流数相同,也至少有两个日志流,其日志同步进度需要考虑多个日志流的总同步进度。
在同一个租户内,不同日志流之间的同步时间是可比较的,备租户总的同步进度为每个日志流同步进度的最小值。
系统租户查看备租户的同步进度
系统租户可以查看所有租户或指定租户的同步进度。
-
使用管理员用户登录备租户所在集群的
sys
租户。 -
执行以下语句,查看指定备租户的同步进度。
SELECT TENANT_NAME, TENANT_ID, TENANT_ROLE, SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';
查询结果如下:
+----------------+-----------+-------------+----------------------------+ | TENANT_NAME | TENANT_ID | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +----------------+-----------+-------------+----------------------------+ | standby_tenant | 1004 | STANDBY | 2023-04-14 16:38:53.938774 | +----------------+-----------+-------------+----------------------------+ 1 row in set
查询结果中,
SCN_TO_TIMESTAMP(SYNC_SCN)
列显示了备租户当前的同步进度。您可以将该时间与实际时间进行对比,如果相差较多,则表示备租户的同步进度落后于主租户。有关
DBA_OB_TENANTS
视图的更多说明,请参见 DBA_OB_TENANTS。 -
(可选)确认备租户同步进度较慢之后,可以执行以下命令,进一步查询同步进最慢的日志流。
SELECT LS_ID, SCN_TO_TIMESTAMP(END_SCN) FROM oceanbase.GV$OB_LOG_STAT WHERE TENANT_ID = 1004 AND ROLE = 'LEADER';
查询结果如下:
+-------+----------------------------+ | LS_ID | SCN_TO_TIMESTAMP(END_SCN) | +-------+----------------------------+ | 1 | 2023-04-14 16:42:34.249988 | | 1001 | 2023-04-14 16:42:34.295123 | +-------+----------------------------+
根据查询结果,
1
号日志流的同步进度较慢。
备租户查看本租户的同步进度
备租户也可以查看本租户当前的同步进度。
-
使用管理员用户登录备租户。
-
执行以下语句,查看备租户的同步进度。
-
MySQL 模式
SELECT TENANT_NAME, TENANT_ROLE, SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS;
查询结果如下:
+----------------+-------------+----------------------------+ | TENANT_NAME | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +----------------+-------------+----------------------------+ | standby_tenant | STANDBY | 2023-04-14 16:38:53.938774 | +----------------+-------------+----------------------------+
-
Oracle 模式
SELECT TENANT_NAME, TENANT_ROLE, SCN_TO_TIMESTAMP(SYNC_SCN) FROM SYS.DBA_OB_TENANTS;
查询结果如下:
+----------------+-------------+------------------------------+ | TENANT_NAME | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +----------------+-------------+------------------------------+ | standby_tenant | STANDBY | 14-APR-23 16:38:53.938774 PM | +----------------+-------------+------------------------------+
查询结果中,
SCN_TO_TIMESTAMP(SYNC_SCN)
列显示了备租户当前的同步进度。您可以将该时间与实际时间进行对比,如果相差较多,则表示备租户的同步进度落后于主租户。有关
DBA_OB_TENANTS
视图的更多说明,请参见 DBA_OB_TENANTS(MySQL 模式) 和 DBA_OB_TENANTS(Oracle 模式)。 -
-
(可选)确认备租户同步进度较慢之后,可以执行以下命令,进一步查询同步进最慢的日志流。
-
MySQL 模式
SELECT LS_ID, SCN_TO_TIMESTAMP(END_SCN) FROM oceanbase.GV$OB_LOG_STAT WHERE ROLE = 'LEADER';
查询结果如下:
+-------+----------------------------+ | LS_ID | SCN_TO_TIMESTAMP(END_SCN) | +-------+----------------------------+ | 1 | 2023-04-14 16:42:34.249988 | | 1001 | 2023-04-14 16:42:34.295123 | +-------+----------------------------+
-
Oracle 模式
SELECT LS_ID, SCN_TO_TIMESTAMP(END_SCN) FROM SYS.GV$OB_LOG_STAT WHERE ROLE = 'LEADER';
查询结果如下:
+-------+-----------------------------+ | LS_ID | SCN_TO_TIMESTAMP(END_SCN) | +-------+-----------------------------+ | 1 | 14-APR-23 16:42:34.249988 PM| | 1001 | 14-APR-23 16:42:34.295123 PM| +-------+-----------------------------+
根据查询结果,
1
号日志流的同步进度较慢。 -
备租户在日志同步过程中,支持暂停日志同步以及暂停后重新开启日志同步。
暂停日志同步
-
使用管理员用户登录备租户或备租户所在集群的
sys
租户。 -
执行以下命令,暂停日志同步。
ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] CANCEL ;
其中,仅在使用
sys
租户执行命令时,才需要在语句中添加TENANT = tenant_name
参数指定备租户名系统租户下指定备租户暂停日志同步的示例如下:
ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant CANCEL ;
备租户暂停日志同步的示例如下:
ALTER SYSTEM RECOVER STANDBY CANCEL;
注意
暂停日志同步后,备租户不会再从主租户同步任何日志。需要尽量避免因暂停日志同步而导致的备租户日志断流。
-
暂停同步后,可以分别查询
DBA_OB_TENANTS
和GV$OB_LOG_STAT
视图,发现此时日志流的同步进度会停留在命令执行的时间点。通过
DBA_OB_TENANTS
和GV$OB_LOG_STAT
视图查看日志流同步进度的详细操作,请参见 查看日志同步进度。
开启日志同步
暂停日志同步后,可以通过更改备租户恢复终点的方式再次开启日志同步。
-
使用管理员用户登录备租户或备租户所在集群的
sys
租户。 -
执行以下命令,开启日志同步。
ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] UNTIL UNLIMITED;
其中,仅在使用
sys
租户执行命令时,才需要在语句中添加TENANT = tenant_name
参数指定备租户名;UNLIMITED
表示无穷大。sys
租户下指定备租户开启日志同步的示例如下:ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant UNTIL UNLIMITED;
备租户开启日志同步的示例如下:
ALTER SYSTEM RECOVER STANDBY UNTIL UNLIMITED;