在验证主集群是否能够切换为备集群角色或备集群是否能切换为主集群角色时,需要查看 V$OB_CLUSTER 视图中的 SWITCHOVER_INFO 字段,该字段展示了不能成功执行 Switchover 命令的原因,本节主要介绍该字段的不同值所表示的含义以及针对此类问题的处理方法。

字段值 1:CHECK PRIMARY CLUSTER SERVER STATUS

含义

可能有 Server 不在线,需要校验主集群的 Server 状态。

处理方法

执行以下命令,在主集群或备集群上查询 Server 状态。如果 STATUS 不是 ACTIVE,则说明 Server 不在线,需要处理不在线的 Server。

  1. obclient> SELECT SVR_IP, STATUS FROM __ALL_SERVER WHERE STATUS != 'ACTIVE';

字段值 2:CHECK MERGE STATUS

含义

合并任务的状态不正常,需要检查合并状态是否出现 Error。

处理方法

在当前集群上执行以下命令,查询合并状态。如果合并状态出现 ERROR,请联系技术支持人员协助处理。

  1. obclient> SELECT ZONE, NAME, INFO FROM __ALL_ZONE WHERE NAME ='MERGE_STATUS';

字段值 3:NONE SYNCED STANDBY CLUSTER

含义

不存在同步的备集群,主集群不能切换为备集群。

处理方法

在主集群上,执行以下命令,查询备集群的详细同步状态以及不同步的原因。

  1. obclient> SELECT CLUSTER_ID, SYNCHRONIZATION_STATUS FROM V$OB_STANDBY_STATUS;

字段值 4:CHECK SYS SCHEMA SYNC STATUS

含义

Schema 没有同步完成,需要校验备集群的系统租户的 Schema 是否同步完成。

处理方法

分别在主集群和备集群上执行以下命令,查询各自集群的 Schema 同步状态,查看出现 Schema 同步落后的 tenant_id。需要等待租户的 Schema 同步完成,如果发现同步卡住,请联系技术支持人员协助处理。

  1. obclient> SELECT *, USEC_TO_TIME(MIN_SYS_TABLE_SCN), USEC_TO_TIME(MIN_USER_TABLE_SCN) FROM V$OB_CLUSTER_STATS;

字段值 5:CHECK USER SCHEMA SYNC STATUS

含义

Schema 没有同步完成,需要校验备集群的普通租户的 Schema 是否同步完成。

处理方法

分别在主集群和备集群上执行以下命令,查询各自集群的 Schema 同步状态,查看出现 Schema 同步落后的 tenant_id。需要等待租户的 Schema 同步完成,如果发现同步卡住,请联系技术支持人员协助处理。

  1. obclient> SELECT *, USEC_TO_TIME(MIN_SYS_TABLE_SCN), USEC_TO_TIME(MIN_USER_TABLE_SCN) FROM V$OB_CLUSTER_STATS;

字段值 6:CHECK FREEZE INFO SYNC STATUS

含义

冻结信息没有同步完成,需要校验备集群的冻结信息是否同步完成。

处理方法

分别在主集群和备集群上执行以下命令,查询各自集群的冻结信息,查看落后的冻结版本。需要等待冻结信息同步完成,如果发现同步卡住,请联系技术支持人员协助处理。

  1. obclient> SELECT * FROM __ALL_VIRTUAL_FREEZE_INFO;

字段值 7:CHECK ENOUGH REPLICA

含义

副本不足,需要检查备集群的副本个数是否足够。

处理方法

副本不足是指分区的活跃副本不满足多数派,一般原因是多数派副本所在的 Server 故障或者网络隔离所致,可以通过检查备集群上所有 Server 的状态是否正常来确认每个分区的副本数是否都足够。

检查所有 Server 的状态是否正常的语句如下:

  1. obclient> SELECT SVR_IP, STATUS FROM __ALL_SERVER WHERE STATUS != 'ACTIVE';

字段值 8:CHECK REDO LOG SYNC STATUS

含义

REDO 日志没有同步完成,需要校验备集群的 REDO 日志是否同步完成。

处理方法

在备集群上执行以下命令,查询是否存在没有完成日志同步的副本,并查看对应副本的状态。

  1. obclient> SELECT * FROM __ALL_VIRTUAL_CLOG_STAT WHERE IS_IN_SYNC=0;

如果存在没有完成日志同步的副本,需要等待同步完成。如果备集群一直追不上或者同步卡住,请联系技术支持人员协助处理。

字段值 9:CAN NOT ACCESS CLUSTERS: cluster1, cluster2

含义

某些集群不能访问,需要校验这些备集群的状态。

处理方法

  1. 在主集群上,执行以下命令,查询备集群的详细同步状态。

    1. obclient> SELECT CLUSTER_ID, SYNCHRONIZATION_STATUS FROM V$OB_STANDBY_STATUS;
  2. 根据查询结果中 SYNCHRONIZATION_STATUS 字段的描述进行处理。

字段值 10:NO CLUSTER IN SWITCHING

含义

没有集群处于 SWITCHING 状态,不能让备集群 Switchover 成为主集群。当备集群处于 NOT ALLOWED 状态时可能出现该信息。

处理方法

在主集群上执行以下命令,查询各集群的状态,确认之前是否成功执行了主集群切换为备集群的操作。

  1. obclient> SELECT SWITCHOVER_STATUS FROM V$OB_CLUSTER;

字段值 11:PRIMARY CLUSTER NOT IN SYNC MODE

字段含义

日志传输模式没有设置为同步模式。

在最大保护和最大可用模式下,要求主集群的日志传输参数配置为强同步(SYNC)模式,同时要求 Switchover 之后,保护模式不变,并且原主集群变为强同步的备集群。

处理方法

您可以登录主集群,通过修改主集群的日志传输参数为 SYNC 来解决该问题。配置集群的日志传输参数相关操作请参见 配置备集群日志传输参数

字段值 12:STANDBY CLUSTER NOT IN SYNC MODE

含义

日志传输模式没有设置为强同步模式。

在最大保护或最大可用模式下,只能选择强同步(SYNC)模式的备集群切换为主集群。当前备集群的日志传输参数没有配置为 SYNC 模式,故不允许切换为主集群。

处理方法

选择强同步(SYNC)模式的备集群切换为主集群。

字段值 13:PRIMARY CLUSTER HAS REPLICA IN RESTORE

含义

当前主集群上有部分副本没有创建完成,不允许执行角色切换。

处理方法

需要您主动删除这部分副本后才能继续执行角色切换。

查询主集群上副本状态的方法如下:

  • 查看正在恢复的系统表的副本状态

    1. obclient> SELECT * FROM __ALL_ROOT_TABLE WHERE IS_RESTORE != 0;
  • 查看正在恢复的用户表副本状态

    1. obclient> SELECT * FROM __ALL_VIRTUAL_META_TABLE WHERE IS_RESTORE != 0;

字段值 14:STANDBY CLUSTER HAS REPLICA IN RESTORE

含义

当前备集群上有部分副本没有创建完成,不允许执行角色切换。

处理方法

需要等待备集群上的副本创建完成后才能继续执行角色切换。

您可以在备集群上执行以下命令,查看副本状态:

  • 查看正在恢复的系统表的副本状态

    1. obclient> SELECT * FROM __ALL_ROOT_TABLE WHERE IS_RESTORE != 0;
  • 查看正在恢复的用户表副本状态

    1. obclient> SELECT * FROM __ALL_VIRTUAL_META_TABLE WHERE IS_RESTORE != 0;

字段值 15:PRIMARY CLUSTER DOING BACKUP

含义

主集群正在执行备份,不允许执行角色切换,因为切换为备集群后不再支持备份,要求您先停止备份任务。

处理方法

在主集群上,执行以下命令,停止备份任务。

  1. obclient> ALTER SYSTEM CANCEL BACKUP;

字段值 16:CHECK OTHER PRIMARY CLUSTER

含义

存在其他主集群,不允许执行角色切换,防止集群出现双主。

处理方法

在当前集群上执行以下命令,查询其他集群的信息,以便确认集群状态并选择正确的集群执行角色切换。

  1. obclient> SELECT * FROM V$OB_STANDBY_STATUS;

字段值 17:INNER ERROR

含义

发生内部错误。

处理方法

请联系技术支持人员协助处理。