OceanBase日志传输服务

物理备库通过日志传输服务在主租户和备租户之间实时同步 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 协议的对象存储)时,物理备库运行过程中,如果主租户或源端的备租户更改了备份介质的密钥信息,则需要参考以下操作重新设置日志恢复源。

  1. 使用管理员用户登录备租户或备租户所在集群的 sys 租户。

  2. 执行以下命令,配置备租户的恢复源指向主租户的归档目的端。

    • 备租户所在集群的 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_idtenant_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模式
  1. 使用管理员用户登录到主租户。

  2. 执行以下命令,创建一个新用户。

    obclient [oceanbase]> CREATE USER rep_user IDENTIFIED BY '******';
    
  3. 给用户授权。

    以下示例是将 oceanbase 数据库下所有表的 SELECT 权限授予该用户。您也可以仅授予 oceanbase 库下 GV$OB_LOG_STATGV$OB_UNITSGV$OB_PARAMETERSDBA_OB_ACCESS_POINTDBA_OB_TENANTSDBA_OB_LS 等视图的 SELECT 权限。

    obclient [oceanbase]> GRANT SELECT ON oceanbase.* TO rep_user;
    
Oracle 模式
  1. 使用管理员用户登录到主租户。

  2. 创建一个新用户。

    obclient [SYS]> CREATE USER rep_user IDENTIFIED BY '******';
    
  3. 将角色 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 地址及其端口号。

  1. 使用管理员用户登录主租户或源端的备租户。

  2. 执行以下命令,获取访问入口信息。

    • 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 的方法如下:

  • 检查主租户是否开启归档模式

    1. 使用管理员用户登录主租户或主租户所在集群的 sys 租户。

    2. 查询是否开启归档模式。

      • 主租户所在集群的 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 并且未开启归档时,一个日志流在满足被删除的条件后会等待一定的时间才会被回收。

    1. 使用管理员用户登录主租户。

    2. 查询主租户上配置项 ls_gc_delay_time 的值。

      obclient> SHOW PARAMETERS LIKE '%ls_gc_delay_time%';
      

      根据查询结果,如果值为 0s ,则表示未设置,用户可以根据需要进行设置。配置项 ls_gc_delay_time 的详细设置方法及说明,参见 ls_gc_delay_time

步骤四:设置日志恢复源

  1. 使用管理员用户登录备租户或备租户所在集群的 sys 租户。

  2. 执行以下命令,设置日志恢复源。

    • 备租户所在集群的 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 视图,确认日志恢复源是否修改成功

默认情况下,备租户应处于持续同步模式,若当前备租户未处于持续同步模式,请参考本文将备租户设置为持续同步模式。

操作步骤

  1. 使用管理员用户登录备租户或备租户所在集群的 sys 租户。

  2. 执行 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 视图中记录了日志恢复源信息,您可以通过查询视图来获取日志恢复源信息。

操作步骤

  1. 使用管理员用户登录备租户或备租户所在集群的 sys 租户。

  2. 执行以下命令,查看日志恢复源信息。

    • 系统租户(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,表示备租户是通过网络连接主租户或源端的备租户来同步日志。

  3. 执行以下命令,查看日志链路相关信息。

    • 系统租户(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;

备租户进入持续同步模式后,您可以通过视图来实时查看备租户的日志同步进度,以便及时做出调整。

对于主租户而言,每个主租户至少有两个日志流,即一个系统日志流,一个普通日志流。备租户与主租户的日志流数相同,也至少有两个日志流,其日志同步进度需要考虑多个日志流的总同步进度。

在同一个租户内,不同日志流之间的同步时间是可比较的,备租户总的同步进度为每个日志流同步进度的最小值。

系统租户查看备租户的同步进度

系统租户可以查看所有租户或指定租户的同步进度。

  1. 使用管理员用户登录备租户所在集群的 sys 租户。

  2. 执行以下语句,查看指定备租户的同步进度。

    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

  3. (可选)确认备租户同步进度较慢之后,可以执行以下命令,进一步查询同步进最慢的日志流。

    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 号日志流的同步进度较慢。

备租户查看本租户的同步进度

备租户也可以查看本租户当前的同步进度。

  1. 使用管理员用户登录备租户。

  2. 执行以下语句,查看备租户的同步进度。

    • 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 模式)

  3. (可选)确认备租户同步进度较慢之后,可以执行以下命令,进一步查询同步进最慢的日志流。

    • 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 号日志流的同步进度较慢。

备租户在日志同步过程中,支持暂停日志同步以及暂停后重新开启日志同步。

暂停日志同步

  1. 使用管理员用户登录备租户或备租户所在集群的 sys 租户。

  2. 执行以下命令,暂停日志同步。

    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;
    
    注意

    暂停日志同步后,备租户不会再从主租户同步任何日志。需要尽量避免因暂停日志同步而导致的备租户日志断流。

  3. 暂停同步后,可以分别查询 DBA_OB_TENANTS 和 GV$OB_LOG_STAT 视图,发现此时日志流的同步进度会停留在命令执行的时间点。

    通过 DBA_OB_TENANTS 和 GV$OB_LOG_STAT 视图查看日志流同步进度的详细操作,请参见 查看日志同步进度

开启日志同步

暂停日志同步后,可以通过更改备租户恢复终点的方式再次开启日志同步。

  1. 使用管理员用户登录备租户或备租户所在集群的 sys 租户。

  2. 执行以下命令,开启日志同步。

    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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值