---
title: "Failover - OceanBase 数据库 V4.3.4 | OceanBase 文档中心"
description: Failover 当主租户不可用时，可以将备租户切换为主租户继续提供服务。 使用限制 执行 Failover 时，要求备租户所有日志流的副本均在线，否则需要等待对应的副本永久下线。 备租户或备租户所在集群的 sys 租户可以分别通过 DBA_OB_LS 视图或 CDB_OB_LS 视图查询所有日志流副本是否在线，有关…
---
切换语言

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

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

# Failover

更新时间：2024-12-16 14:41:39

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/600.manage/400.high-availability/300.physical-standby-database-disaster-recovery/600.role-switch/300.perform-failover.md)  

当主租户不可用时，可以将备租户切换为主租户继续提供服务。

## 使用限制

- 执行 Failover 时，要求备租户所有日志流的副本均在线，否则需要等待对应的副本永久下线。

  备租户或备租户所在集群的`sys` 租户可以分别通过 `DBA_OB_LS` 视图或 `CDB_OB_LS` 视图查询所有日志流副本是否在线，有关日志流副本的详细说明信息，请参见 [副本介绍](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001573665)。
 - 执行 Failover 时，不会检查对应主租户的状态，因此除主租户故障的容灾需求外，Failover 操作也可以用于独立的一个主租户在某一个时间点的快照并用于后续业务验证的需求场景。
 - 不允许在通过服务名建立的 Session 中执行 Failover 命令。有关服务的相关操作及说明，参见 [创建服务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001574418)。

  #### 注意

  执行 Failover 时，如果待执行 Failover 命令的租户下有服务名，则系统会自动删除该租户的服务名。

## 背景信息

Failover 操作只会对日志文件做修改，不会对数据文件做修改。

由于 OceanBase 数据库的每个租户均有多个日志流，而 Failover 操作需要在操作执行完成后达到数据一致的状态，故系统会选择所有日志流的同步位点中 SCN 最小的值作为 Failover 的执行位点。执行Failover 操作后，租户下的所有日志流都会统一回退到该位点。

## 操作步骤

1. 使用管理员用户登录备租户或备租户所在集群的 `sys` 租户。
 2. 执行 `ACTIVATE STANDBY VERIFY` 命令，验证 `ACTIVATE STANDBY` 命令是否可以执行成功。

      - 备所在集群的 `sys` 租户执行 `ACTIVATE STANDBY VERIFY` 命令

       ```sql
       ALTER SYSTEM ACTIVATE STANDBY TENANT [=] tenant_name VERIFY;

       ```

       示例：

       ```shell
       ALTER SYSTEM ACTIVATE STANDBY TENANT = mysql VERIFY;

       ```
      - 备租户执行 `ACTIVATE STANDBY VERIFY` 命令

       ```sql
       ALTER SYSTEM ACTIVATE STANDBY VERIFY;

       ```

       命令执行后，如果返回 `OK`，则表示验证通过，可以执行下一步。

       如果出现报错，请根据提示的文本信息参考文档 [Switchover 或 Failover 相关问题](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001573934) 进行处理后，再重新执行本命令。
 3. 验证通过后，执行 `ACTIVATE STANDBY` 命令，将备租户切换为主租户。

      - 备租户所在集群的 `sys` 租户将备租户切换为主租户

       ```sql
       ALTER SYSTEM ACTIVATE STANDBY TENANT = tenant_name;

       ```
      - 备租户将本租户切换为主租户

       ```sql
       ALTER SYSTEM ACTIVATE STANDBY;

       ```
 4. 查询 `DBA_OB_TENANTS` 视图，确认备租户是否已切换为主租户。

      - 备租户所在集群的 `sys` 租户查询视图

       ```shell
       obclient [oceanbase]> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS;

       ```
      - 备租户查询视图

       MySQL 模式：

       ```

       Oracle 模式：

       ```shell
       obclient [SYS]> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM SYS.DBA_OB_TENANTS;

       ```

   查询结果的示例如下：

   ```shell
   +-----------------+-------------+-------------+-------------------+
   | TENANT_NAME     | TENANT_TYPE | TENANT_ROLE | SWITCHOVER_STATUS |
   +-----------------+-------------+-------------+-------------------+
   | standby_tenant  | USER        | PRIMARY     | NORMAL            |
   +-----------------+-------------+-------------+-------------------+
   1 row in set

   ```

   根据查询结果，备租户的 `TENANT_ROLE` 变为 `PRIMARY`，且 `SWITCHOVER_STATUS` 为 `NORMAL`，则表示备租户切主成功。

## Failover 后的注意事项

- 租户在执行 Failover 命令切换为主租户的过程中，如果该租户有服务名，则系统会自动删除该租户的服务名。但是，系统不会删除原主租户的服务名。

  例如，服务名 service1 下有一个主租户 tenantA 和其对应的备租户 tenantB，在租户 tenantB 上执行 Failover 命令切换为主租户时，由于脱离了原来的主备关系，tenantB 的服务名 service1 会被系统删除，而 tenantA 的服务名 service1 会保留。
 - 由于 Failover 操作会将所有日志流已同步的数据恢复到一致性位点，保证该位点之前的所有日志流的数据是完整的。故执行 Failover 操作后：

     - 不支持原主租户降备后接入成为新主租户的备租户。
     - 对于第三方备租户，取决于备租户同步的日志，如果同步的日志超过一致性位点，则不支持接入作为新主租户的备租户。为了便于管理，不建议第三方备租户接入作为新主租户的备租户。

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