---
title: "Failover 前准备 | OceanBase 文档中心"
description: Failover 前准备 本节主要介绍 Failover 操作前的准备事项。 当主集群不可用的情况下，可以将备集群切换为新的主集群继续提供服务。 有损 Failover 命令 在主集群不可用情况下，Failover 可以将一个备集群角色切换为主集群角色。整个过程会将所有分区的数据恢复到一致性快照点，保证该快照点之前的…
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 2.2.77 企业版 LTS

# Failover 前准备

更新时间：2024-05-08 14:26:01

本节主要介绍 Failover 操作前的准备事项。

当主集群不可用的情况下，可以将备集群切换为新的主集群继续提供服务。

## 有损 Failover 命令

在主集群不可用情况下，Failover 可以将一个备集群角色切换为主集群角色。整个过程会将所有分区的数据恢复到一致性快照点，保证该快照点之前的所有分区数据的完整性。Failover 执行成功后，系统处于一致性状态，但是无法保证数据无损。

有损 Failover 命令的语法如下：

```shell
obclient> ALTER SYSTEM ACTIVATE PHYSICAL STANDBY CLUSTER [FORCE];

```

## 注意事项及影响

执行 Failover 流程的注意事项及影响：

- 对集群状态的要求

  Failover 流程对各个集群的状态有要求：

     - 对于主集群，要求主集群的所有 OBServer 全部宕机，避免双写。
     - 对于即将执行有损 Failover 的备集群，要求所有的 OBServer 都处于 `ACTIVE` 状态，否则会导致 Failover 命令执行失败。
 - 对索引的影响

  Failover 过程会特殊处理索引。OceanBase 数据库会自动删除执行 Failover 操作后未生效的索引和多余的索引。
 - 对副本的影响

  Failover 过程不能处理正在创建中的副本。备集群创建分区时会从主集群同步元数据，如果主集群不可用，备集群正在创建中的副本可能会一直处于 `standby restore` 状态。

  如果存在正在创建中的副本，可能导致 Failover 过程卡住直到超时。为了确保 Failover 操作能顺利完成，建议备集群执行 Failover 前通过以下 SQL 语句检查处于 `standby restore` 状态的分区副本。

  > **注意**
  >
  >  
  >
  > 检查前要求主集群处于不可用状态，否则检查的备集群的状态不可信。

  ```sql
  obclient> SELECT * FROM __ALL_VIRTUAL_META_TABLE WHERE IS_RESTORE = 100;

  ```

  `IS_RESTORE` 字段取值的含义如下：

     - `0` 表示正常副本
     - `100` 表示 `standby restore` 副本

  对于查询结果：

     - 如果分区所有副本都处于 `standby restore` 状态，Failover 过程会过滤这个分区，执行 Failover 操作前不需要您介入处理，但 Failover 完成后需要手动处理。
     - 如果部分副本已经完成 `standby restore`，处于正常状态，则应尽量等待其他副本完成 `standby restore`。这个过程要求 Leader 副本是正常状态的副本。
     - 如果执行 Failover 操作前未等待所有副本完成 `standby restore`，并且是少数派副本完成，而多数派副本没有完成的情况，则 Failover 过程可能会卡住，因为多数派副本均不正常。这种情况需要将该分区的所有副本都强制删除，这样 Failover 过程就不会处理该分区。

## 获取集群信息

假设当前存在一主一备两个集群（现场操作时，请以实际环境为准）：

- 主集群信息

  ```sql
  obclient> SELECT CLUSTER_ID, CLUSTER_NAME, CLUSTER_ROLE FROM V$OB_CLUSTER;
  +------------+--------------+--------------+
  | CLUSTER_ID | CLUSTER_NAME | CLUSTER_ROLE |
  +------------+--------------+--------------+
  |          1 | obcluster    | PRIMARY      |
  +------------+--------------+--------------+
  1 row in set

  ```
 - 备集群信息

  ```sql
  obclient> SELECT CLUSTER_ID, CLUSTER_NAME, CLUSTER_ROLE FROM V$OB_CLUSTER;
  +------------+--------------+------------------+
  | CLUSTER_ID | CLUSTER_NAME | CLUSTER_ROLE     |
  +------------+--------------+------------------+
  | 2          | obcluster    | PHYSICAL STANDBY |
  +------------+--------------+------------------+
  1 row in set

  ```

 上一篇 下一篇 ![有帮助](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) 咨询热线
