---
title: "Switchover 相关的问题 | OceanBase 文档中心"
description: Switchover 相关的问题 在验证主集群是否能够切换为备集群角色或备集群是否能切换为主集群角色时，需要查看 V$OB_CLUSTER 视图中的 SWITCHOVER_INFO 字段，该字段展示了不能成功执行 Switchover 命令的原因，本节主要介绍该字段的不同值所表示的含义以及针对此类问题的处理方法。 字…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# Switchover 相关的问题

更新时间：2024-04-07 15:50:48

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

## 字段值 1：CHECK PRIMARY CLUSTER SERVER STATUS

**含义**

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

示例如下：

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                     |
+-------------------+-------------------------------------+
| NOT ALLOWED       | CHECK PRIMARY CLUSTER SERVER STATUS |
+-------------------+-------------------------------------+

```

其中：

- `SWITCHOVER_STATUS` 表示切换状态，值为 `NOT ALLOWED` 则表示不允许进行切换。
 - `SWITCHOVER_INFO` 字段展示了不能切换的原因。示例中， `CHECK PRIMARY CLUSTER SERVER STATUS` 表示有 Server 不在线，需要校验主集群的 Server 状态。

**处理方法**

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

示例如下：

```sql
obclient> SELECT SVR_IP, STATUS FROM oceanbase.__ALL_SERVER WHERE STATUS != 'ACTIVE';
+-------------+----------+
| SVR_IP      | STATUS   |
+-------------+----------+
| xxx.xx.x.x5 | inactive |
+-------------+----------+

```

其中：

- `SVR_IP` 表示 Server IP。
 - `STATUS` 表示该 Server 的服务状态，值为 `inactive` 表示 Server 不在线。

## 字段值 2：CHECK MERGE STATUS

**含义**

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

示例如下：

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                     |
+-------------------+-------------------------------------+
| NOT ALLOWED       | CHECK MERGE STATUS                  |
+-------------------+-------------------------------------+

```

**处理方法**

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

```sql
obclient> SELECT ZONE, NAME, INFO FROM oceanbase.__ALL_ZONE WHERE NAME ='MERGE_STATUS';
+-------+--------------+------+
| ZONE  | NAME         | INFO |
+-------+--------------+------+
|       | merge_status | IDLE |
| zone1 | merge_status | IDLE |
| zone2 | merge_status | IDLE |
| zone3 | merge_status | IDLE |
+-------+--------------+------+

```

`INFO` 字段信息代表合并状态，分别有以下几种

- `IDLE`：表示未进行合并
 - `MERGING`：表示正在进行合并
 - `TIMEOUT`：表示合并超时（但是合并不会暂停，仍然继续，仅设置超时标志）
 - `ERROR`：表示合并出错（需要高优先级处理）

## 字段值 3：NONE SYNCED STANDBY CLUSTER

**含义**

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

示例如下：

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                     |
+-------------------+-------------------------------------+
| NOT ALLOWED       | NONE SYNCED STANDBY CLUSTER         |
+-------------------+-------------------------------------+

```

**处理方法**

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

示例如下：

```sql
obclient> SELECT CLUSTER_ID, SYNCHRONIZATION_STATUS FROM oceanbase.V$OB_STANDBY_STATUS;
+------------+------------------------+
| CLUSTER_ID | SYNCHRONIZATION_STATUS |
+------------+------------------------+
|          2 | OK                     |
+------------+------------------------+

```

其中：

- `CLUSTER_ID` 表示集群 ID 。
 - `SYNCHRONIZATION_STATUS` 表示同步状态，显示 `OK` 则表示同步成功，如果不同步则会显示不同步的原因。

## 字段值 4：CHECK SYS SCHEMA SYNC STATUS

**含义**

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

示例如下：

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                     |
+-------------------+-------------------------------------+
| NOT ALLOWED       | CHECK SYS SCHEMA SYNC STATUS        |
+-------------------+-------------------------------------+

```

**处理方法**

分别在主集群和备集群上执行以下命令，对比主备集群的 `REFRECHED_SCHEMA_VERSION` 是否一致，如果不一致，说明备集群系统租户的 Schema 未同步完成。需要等待备集群系统租户的 Schema 同步完成，如果发现同步卡住，请联系技术支持人员协助处理。

查询语句如下：

```sql
obclient> SELECT * FROM oceanbase.__all_virtual_server_schema_info WHERE tenant_id = 1;

```

## 字段值 5：CHECK USER SCHEMA SYNC STATUS

**含义**

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

示例如下：

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                     |
+-------------------+-------------------------------------+
| NOT ALLOWED       | CHECK USER SCHEMA SYNC STATUS       |
+-------------------+-------------------------------------+

```

**处理方法**

1. 在备集群上执行以下命令，查询备集群上普通租户的 Schema 同步状态，查看出现 Schema 同步落后的 `tenant_id`。

   ```shell
   obclient> SELECT *, USEC_TO_TIME(MIN_SYS_TABLE_SCN), USEC_TO_TIME(MIN_USER_TABLE_SCN) FROM oceanbase.V$OB_CLUSTER_STATS;
   +-----------+--------------------------+---------+-------------------+--------------------+---------------------------------+----------------------------------+
   | tenant_id | refreshed_schema_version | ddl_lag | min_sys_table_scn | min_user_table_scn | USEC_TO_TIME(MIN_SYS_TABLE_SCN) | USEC_TO_TIME(MIN_USER_TABLE_SCN) |
   +-----------+--------------------------+---------+-------------------+--------------------+---------------------------------+----------------------------------+
   |         1 |         1638945061379584 |       0 |  1638965918418375 |   1638965918418375 | 2021-12-08 20:18:38.418375      | 2021-12-08 20:18:38.418375       |
   |      1001 |         1638945068536016 |       0 |  1638965918418766 |   1638965918418766 | 2021-12-08 20:18:38.418766      | 2021-12-08 20:18:38.418766       |
   |      1002 |         1638945068659384 |       0 |  1638965918418912 |   1638965918418912 | 2021-12-08 20:18:38.418912      | 2021-12-08 20:18:38.418912       |
   +-----------+--------------------------+---------+-------------------+--------------------+---------------------------------+----------------------------------+

   ```

      - `TENANT_ID`：表示租户 `ID`，`TENANT_ID` 为 `1`表示系统租户，其他数值表示普通租户。
      - `MIN_SYS_TABLE_SCN`：表示系统表的同步进度。
      - `MIN_USER_TABLE_SCN`：表示用户表的同步进度。

   查询结果中，如果有租户（不包含系统租户）的 `MIN_SYS_TABLE_SCN` 的值与当前时间不一致，则代表该租户的 Schema 不同步。可以分别在主备集群上执行以下命令，检查主备集群上对应租户的 `REFRECHED_SCHEMA_VERSION` 是否不一致。如果不一致，请联系技术支持人员协助处理。

   ```sql
   obclient> SELECT * FROM oceanbase.__all_virtual_server_schema_info WHERE tenant_id = xxxx;

   ```

   其中，`tenant_id` 需要替换为前面查询出来的出现 Schema 同步落后的 `tenant_id`。

   如果所有租户（不包含系统租户）的 `MIN_SYS_TABLE_SCN` 的值均与当前时间一致，需要进行下一步检查。
 2. 在备集群上执行以下命令，检查分区中相同的 `row_id`，其 `created_schema_version` 和 `readable_schema_version` 是否相等。

   ```shell
   obclient> SELECT * FROM oceanbase.__all_core_table WHERE table_name = '__all_schema_status';

   ```

   查询结果中，对于相同的 `row_id`，如果其 `created_schema_version` 和 `readable_schema_version` 的值不相等，则表示该分区未创建成功，请联系技术支持协助处理。

   如果其 `created_schema_version` 和 `readable_schema_version` 的值相等，需要进行下一步检查。
 3. 在备集群上执行以下命令，检查 `__all_ddl_helper` 表是否为空。

   ```shell
   obclient> SELECT * FROM oceanbase.__all_ddl_helper;

   ```

   查询结果中，如果 `__all_ddl_helper` 表不为空，则表示索引没有生效，请联系技术支持协助处理。

## 字段值 6：CHECK FREEZE INFO SYNC STATUS

**含义**

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

示例如下：

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                     |
+-------------------+-------------------------------------+
| NOT ALLOWED       | CHECK FREEZE INFO SYNC STATUS       |
+-------------------+-------------------------------------+

```

**处理方法**

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

示例如下：

```sql
obclient>  SELECT * FROM oceanbase.__ALL_VIRTUAL_FREEZE_INFO;
+----------------+------------------+----------------+
| frozen_version | frozen_timestamp | schema_version |
+----------------+------------------+----------------+
|              1 |                1 |           NULL |
|              2 | 1637548600183610 |           NULL |
|              3 | 1637604010868012 |           NULL |
+----------------+------------------+----------------+

```

其中：

- `frozen_version` ：表示冻结版本。当主备集群的 `frozen_version` 字段的值一样时，代表冻结信息同步完成。
 - `frozen_timestamp` ：表示冻结时间戳。

## 字段值 7：CHECK ENOUGH REPLICA

**含义**

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

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                     |
+-------------------+-------------------------------------+
| NOT ALLOWED       | CHECK ENOUGH REPLICA                |
+-------------------+-------------------------------------+

```

**处理方法**

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

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

```

- `SVR_IP` 表示 Server IP。
 - `STATUS` 表示该 Server 的状态，值为 `inactive` 表示 Server 的状态不正常，`active` 表示正常。

## 字段值 8：CHECK REDO LOG SYNC STATUS

**含义**

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

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                     |
+-------------------+-------------------------------------+
| NOT ALLOWED       | CHECK REDO LOG SYNC STATUS          |
+-------------------+-------------------------------------+

```

**处理方法**

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

```sql
obclient> SELECT * FROM oceanbase.__ALL_VIRTUAL_CLOG_STAT WHERE IS_IN_SYNC=0;

```

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

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

**含义**

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

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                                      |
+-------------------+------------------------------------------------------+
| NOT ALLOWED       | CAN NOT ACCESS CLUSTERS: cluster1, cluster2          |
+-------------------+------------------------------------------------------+

```

`cluster1` ， `cluster2` 分别代表不能访问的备集群。

**处理方法**

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

   ```sql
   obclient> SELECT CLUSTER_ID, SYNCHRONIZATION_STATUS FROM oceanbase.V$OB_STANDBY_STATUS;

   ```
 2. 根据查询结果中 `SYNCHRONIZATION_STATUS` 字段的描述进行处理。

## 字段值 10：NO CLUSTER IN SWITCHING

**含义**

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

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                                      |
+-------------------+------------------------------------------------------+
| NOT ALLOWED       | NO CLUSTER IN SWITCHING                              |
+-------------------+------------------------------------------------------+

```

**处理方法**

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

```sql
obclient> SELECT SWITCHOVER_STATUS FROM oceanbase.V$OB_CLUSTER;
+-------------------+
| SWITCHOVER_STATUS |
+-------------------+
| NOT ALLOWED       |
+-------------------+

```

## 字段值 11：PRIMARY CLUSTER HAS REPLICA IN RESTORE

**含义**

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

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                                      |
+-------------------+------------------------------------------------------+
| NOT ALLOWED       | PRIMARY CLUSTER HAS REPLICA IN RESTORE               |
+-------------------+------------------------------------------------------+

```

**处理方法**

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

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

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

  ```sql
  obclient> SELECT * FROM oceanbase.__ALL_ROOT_TABLE WHERE IS_RESTORE != 0;

  ```
 - 查看正在恢复的用户表副本状态

  ```sql
  obclient> SELECT * FROM oceanbase.__ALL_VIRTUAL_META_TABLE WHERE IS_RESTORE != 0;

  ```

## 字段值 12：STANDBY CLUSTER HAS REPLICA IN RESTORE

**含义**

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

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                                      |
+-------------------+------------------------------------------------------+
| NOT ALLOWED       | STANDBY CLUSTER HAS REPLICA IN RESTORE               |
+-------------------+------------------------------------------------------+

```

**处理方法**

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

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

  ```

## 字段值 13：PRIMARY CLUSTER DOING BACKUP

**含义**

主集群正在执行数据备份或日志备份，不允许执行角色切换，因为切换为备集群后不再支持数据备份和日志备份，要求您先停止数据备份任务和日志备份任务。

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                                      |
+-------------------+------------------------------------------------------+
| NOT ALLOWED       | PRIMARY CLUSTER DOING BACKUP                         |
+-------------------+------------------------------------------------------+

```

**处理方法**

在主集群上，执行以下命令，停止数据备份任务和日志备份任务。

- 停止数据备份任务

  ```sql
  obclient> ALTER SYSTEM CANCEL BACKUP;

  ```
 - 停止日志备份任务

  ```sql
  obclient> ALTER SYSTEM NOARCHIVELOG;

  ```

## 字段值 14：CHECK OTHER PRIMARY CLUSTER

**含义**

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

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                                      |
+-------------------+------------------------------------------------------+
| NOT ALLOWED       | CHECK OTHER PRIMARY CLUSTER                          |
+-------------------+------------------------------------------------------+

```

**处理方法**

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

```sql
obclient> SELECT * FROM oceanbase.V$OB_STANDBY_STATUS;

```

## 字段值 15：INNER ERROR

**含义**

发生内部错误。

```sql
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO                                      |
+-------------------+------------------------------------------------------+
| NOT ALLOWED       | INNER ERROR                                          |
+-------------------+------------------------------------------------------+

```

**处理方法**

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

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
