---
title: "副本类型转换 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 副本类型转换 根据业务需要，可以将租户下日志流的 F 副本转换为 R 副本或者 R 副本转换为 F 副本。 注意事项 当前仅 R 副本与 F 副本支持副本类型的相互转换，C 副本不支持副本类型转换。 通过修改 Locality 转换副本类型 示例：将租户 mysql001 的 Locality 由 F@zone1,F…
---
切换语言

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

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

# 副本类型转换

更新时间：2026-06-02 15:17:20

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/600.manage/300.replica-management/200.replica-distribution/200.locality-common-operations/450.change-the-replica-type.md)  

根据业务需要，可以将租户下日志流的 F 副本转换为 R 副本或者 R 副本转换为 F 副本。

## 注意事项

当前仅 R 副本与 F 副本支持副本类型的相互转换，C 副本不支持副本类型转换。

## 通过修改 Locality 转换副本类型

示例：将租户 `mysql001` 的 Locality 由 `F@zone1,F@zone2,F@zone3` 修改为 `F@zone1,F@zone2,R@zone3`。

1. 使用 root 用户登录到集群的 sys 租户。

   连接示例如下：

   ```shell
   obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A

   ```
 2. 进入 `oceanbase` 数据库。

   ```shell
   obclient(root@sys)[(none)]> USE oceanbase;

   ```
 3. 查看修改前的 Locality。

   ```shell
   obclient(root@sys)[oceanbase]> SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS;

   ```

   查询结果如下：

   ```shell
   +-----------+-------------+-------------+-------------------+---------------------------------------------+
   | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE      | LOCALITY                                    |
   +-----------+-------------+-------------+-------------------+---------------------------------------------+
   |         1 | sys         | SYS         | RANDOM            | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   |      1001 | META$1002   | META        | zone1;zone3;zone2 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   |      1002 | mysql001    | USER        | zone1;zone3;zone2 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   |      1003 | META$1004   | META        | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   |      1004 | oracle001   | USER        | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   +-----------+-------------+-------------+-------------------+---------------------------------------------+
   5 rows in set

   ```
 4. 修改租户 `mysql001` 的 Locality。

   ```shell
   obclient(root@sys)[oceanbase]> ALTER TENANT mysql001 LOCALITY="F@zone1,F@zone2,R@zone3";

   ```
 5. 查看 Locality 变更任务的执行状态。

   ```shell
   obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE = 'ALTER_TENANT_LOCALITY';

   ```

   查询结果如下：

   ```shell
   +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+-----------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+----------------+-------------+
   | JOB_ID | JOB_TYPE              | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME                 | MODIFY_TIME                | TENANT_ID | SQL_TEXT                                                                          | EXTRA_INFO                                                                                                 | RS_SVR_IP      | RS_SVR_PORT |
   +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+-----------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+----------------+-------------+
   |      1 | ALTER_TENANT_LOCALITY | SUCCESS    |        NULL |        0 | 2024-04-10 11:16:46.242622 | 2024-04-10 11:16:46.242622 |      1002 | ALTER TENANT mysql001 LOCALITY="F@zone1,F@zone2,R@zone3"                          | FROM: 'FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3', TO: 'FULL{1}@zone1, FULL{1}@zone2, READONLY{1}@zone3' | 172.xx.xxx.192 |        2882 |
   +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+-----------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+----------------+-------------+
   1 rows in set

   ```

   根据查询结果，`JOB_STATUS` 显示为 `SUCCESS`，表示 Locality 变更任务执行成功。
 6. 查看修改后的 Locality。

   ```shell
   obclient(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, PRIMARY_ZONE, LOCALITY FROM oceanbase.DBA_OB_TENANTS;

   ```

   查询结果如下：

   ```shell
   +-----------+-------------+-------------+-------------------+-------------------------------------------------+
   | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE      | LOCALITY                                        |
   +-----------+-------------+-------------+-------------------+-------------------------------------------------+
   |         1 | sys         | SYS         | RANDOM            | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3     |
   |      1001 | META$1002   | META        | zone1;zone3;zone2 | FULL{1}@zone1, FULL{1}@zone2, READONLY{1}@zone3 |
   |      1002 | mysql001    | USER        | zone1;zone3;zone2 | FULL{1}@zone1, FULL{1}@zone2, READONLY{1}@zone3 |
   |      1003 | META$1004   | META        | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3     |
   |      1004 | oracle001   | USER        | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3     |
   +-----------+-------------+-------------+-------------------+-------------------------------------------------+
   5 rows in set

   ```

   通过步骤 3 与步骤 6 的查询比较，租户 `mysql001` 的 Locality 由原来的 `FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3` 变为 `FULL{1}@zone1, FULL{1}@zone2, READONLY{1}@zone3`，租户 `mysql001` 的副本类型转换成功。

## 手动转换副本类型

当通过修改 Locality 的方式修改副本类型时，正常情况下，系统会自动转换副本类型，但由于一些异常原因，导致系统未正常工作，可以通过 `ALTER SYSTEM MODIFY REPLICA` 命令手动进行副本类型转换。

### 使用限制

- 系统租户（sys 租户）可以对所有租户的日志流执行副本类型转换操作，用户租户只能对本租户的日志流执行副本类型转换操作。
 - 租户的同一个日志流，除了副本迁移任务可以并行执行多个以外，其他容灾任务（包括添加副本、删除副本、转换副本类型、修改日志流的法定成员数等）每次只能执行一个。

  sys 租户可以通过视图 `CDB_OB_LS_REPLICA_TASKS` 确认是否有正在运行的容灾任务；用户租户可以通过视图 `DBA_OB_LS_REPLICA_TASKS` 确认是否有正在运行的容灾任务。

### 前提条件

- 在执行副本类型转换操作前，请确认当前用户拥有 `ALTER SYSTEM` 权限，否则无法执行 `ALTER SYSTEM MODIFY REPLICA` 命令。
 - 在查询视图前，请确认当前用户拥有以下视图的 `SELECT` 权限，否则无法查询相关信息。

     - `DBA_OB_TENANTS`
     - `DBA_OB_LS`/`CDB_OB_LS`
     - `DBA_OB_LS_LOCATIONS`/`CDB_OB_LS_LOCATIONS`

### 操作步骤

假设当前有一个 tenant1 租户，其 Locality 为 `F@zone1,F@zone2,R@zone3`，同时，tenant1 租户的 1002 日志流仅在 `zone1` 和 `zone2` 各有一个 F 类型的副本，在 `zone3` 上也有一个 F 类型的副本。现在需要手动将 `zone3` 上的 F 副本转换为 R 副本。

1. 用户登录到集群对应的租户。

   连接示例如下：

   ```shell
   obclient -h172.30.xxx.xxx -P2883 -uroot@tenant1#obdemo -pxxxx -A

   ```

   有关更加详细的连接数据库的操作指引，参见 [连接数据库概述（MySQL 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682520) 和 [连接数据库概述（Oracle 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682578)。
 2. 获取待操作的租户对应的租户 ID 及 Locality 信息。

      - 系统租户

       ```shell
       obclient(root@sys)[oceanbase]> SELECT TENANT_NAME, TENANT_ID, LOCALITY FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='tenant1';

       ```
      - 用户租户

           MySQL 模式   Oracle 模式

       MySQL 模式下执行以下语句：

       ```shell
       obclient(root@tenant1)[oceanbase]> SELECT TENANT_NAME, TENANT_ID, LOCALITY FROM oceanbase.DBA_OB_TENANTS;

       ```

       Oracle 模式下执行以下语句：

       ```shell
       obclient(SYS@tenant1)[SYS]> SELECT TENANT_NAME, TENANT_ID, LOCALITY FROM SYS.DBA_OB_TENANTS;

       ```

       查询结果的示例如下：

       ```shell
       +-------------+-----------+-------------------------------------------------+
       | TENANT_NAME | TENANT_ID | LOCALITY                                        |
       +-------------+-----------+-------------------------------------------------+
       | tenant1     |      1002 | FULL{1}@zone1, FULL{1}@zone2, READONLY{1}@zone3 |
       +-------------+-----------+-------------------------------------------------+
       1 row in set

       ```

       根据查询结果，该租户对应的租户 ID 为 `1002`。

       有关视图 `DBA_OB_TENANTS` 中各字段的详细说明，请参见 [DBA_OB_TENANTS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683982)。
 3. 获取待操作租户的所有日志流信息。

      - 系统租户

       ```shell
       obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS WHERE TENANT_ID=1002;

       ```

       有关视图 `CDB_OB_LS` 中各字段的详细说明，请参见 [CDB_OB_LS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683901)。
      - 用户租户

       ```shell
       obclient(root@tenant1)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS;

       ```

       ```shell
       obclient(SYS@tenant1)[SYS]> SELECT * FROM SYS.DBA_OB_LS;

       ```

       ```shell
       +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+----------------+
       | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN          | DROP_SCN | SYNC_SCN            | READABLE_SCN        | FLAG | UNIT_LIST      |
       +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+----------------+
       |     1 | NORMAL | zone1;zone2  |             0 |           0 |                NULL |     NULL | 1712122872503652000 | 1712122872503652000 |      |                |
       |  1001 | NORMAL | zone1;zone2  |          1002 |        1001 | 1711951977207156000 |     NULL | 1712122872503652000 | 1712122872503652000 |      | 1001,1002,1003 |
       +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+----------------+
       2 rows in set

       ```

       根据查询结果可知，tenant1 租户有一个 1 号日志流和一个 1001 号日志流。

       有关视图 `DBA_OB_LS` 中各字段的详细说明，请参见 [DBA_OB_LS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684711)。
 4. 查看待操作租户日志流的副本分布。

      - 系统租户

       ```shell
       obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID=1001 AND TENANT_ID=1002;

       ```

       有关视图 `CDB_OB_LS_LOCATIONS` 中各字段的详细说明，请参见 [CDB_OB_LS_LOCATIONS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683997)。
      - 用户租户

       ```shell
       obclient(root@tenant1)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS_LOCATIONS WHERE LS_ID=1001;

       ```

       ```shell
       obclient(SYS@tenant1)[SYS]> SELECT * FROM SYS.DBA_OB_LS_LOCATIONS WHERE LS_ID=1001;

       ```

       ```shell
       +---------------------+---------------------+-------+----------------+----------+----------+-------+----------+-------------------------------------------------------------------+----------------------+--------------+--------------+---------+
       | CREATE_TIME         | MODIFY_TIME         | LS_ID | SVR_IP         | SVR_PORT | SQL_PORT | ZONE  | ROLE     | MEMBER_LIST                                                       | PAXOS_REPLICA_NUMBER | REPLICA_TYPE | LEARNER_LIST | REBUILD |
       +---------------------+---------------------+-------+----------------+----------+----------+-------+----------+-------------------------------------------------------------------+----------------------+--------------+--------------+---------+
       | 01-APR-24 02.13.04. | 01-APR-24 02.13.04. |  1001 | 172.xx.xxx.192 |     2882 |     2881 | zone3 | FOLLOWER | NULL                                                              |                 NULL | FULL         | NULL         | FALSE   |
       | 01-APR-24 02.13.04. | 01-APR-24 02.13.04. |  1001 | 172.xx.xxx.212 |     2882 |     2881 | zone2 | FOLLOWER | NULL                                                              |                 NULL | FULL         | NULL         | FALSE   |
       | 01-APR-24 02.13.04. | 01-APR-24 02.13.10. |  1001 | 172.xx.xxx.226 |     2882 |     2881 | zone1 | LEADER   | 172.xx.xxx.192:2882:1,172.xx.xxx.212:2882:1,172.xx.xxx.226:2882:1 |                    3 | FULL         | NULL         | FALSE   |
       +---------------------+---------------------+-------+----------------+----------+----------+-------+----------+-------------------------------------------------------------------+----------------------+--------------+--------------+---------+
       3 rows in set

       ```

       根据查询结果可知，租户的 1001 号 日志流在 `172.xx.xxx.192:2882`、`172.xx.xxx.212:2882` 和 `172.xx.xxx.226:2882` 上均有一个 F 类型的副本。再结合查询的 Locality 信息，`zone3` 上的副本类型应该是 R 类型，需要将 `100.xx.xxx.192:2882` 上的 F 副本转换为 R 副本。

       有关视图 `DBA_OB_LS_LOCATIONS` 中各字段的详细说明，请参见 [DBA_OB_LS_LOCATIONS](https://www.oceanbase.com/700.reference/700.system-views/400.system-view-of-mysql-mode/200.dictionary-view-of-mysql-mode/4400.oceanbase-dba_ob_ls_locations-of-mysql-mode.md)。
 5. 执行副本类型转换命令。

   语句如下：

   ```sql
   ALTER SYSTEM MODIFY REPLICA LS [=] ls_id SERVER [=] 'svr_ip:svr_port' REPLICA_TYPE [=] 'replica_type' [PAXOS_REPLICA_NUM [=] paxos_replica_num] [TENANT [=] 'tenant_name'];

   ```

   语句使用说明：

      - `ls_id`：指定待转换副本类型的日志流 ID。
      - `svr_ip:svr_port`：指定待转换副本类型的目标服务器的 IP 及端口号。示例：`172.xx.xxx.192:2882`。
      - `replica_type`：指定转换后的目标副本类型。当前支持以下两种副本类型的相互转换：

            - 全功能型副本：使用 `FULL` 或 `F` 表示。
            - 只读副本：使用 `READONLY` 或 `R` 表示。
      - `paxos_replica_num`：指定修改后日志流的法定成员数，即租户 Locality 中全功能型（F）副本的数量。同时一个日志流的 F 副本数最多为 7 个。

       指定该参数的值时，需要注意以下事项：

            - 如果是将 F 副本转换为 R 副本，转换后，相当于删除了一个 F 副本，故 `paxos_replica_num` 的值需要减去 1。
            - 如果是将 R 副本转换为 F 副本，转换后，相当于添加了一个 F 副本，故 `paxos_replica_num` 的值需要加上 1。
            - 修改后，`paxos_replica_num` 需要满足多数派。
            - `paxos_replica_num` 的值需要大于等于当前 Leader 副本中 `MEMBER_LIST` 的成员个数。sys 租户可以通过查询视图 `CDB_OB_LS_LOCATIONS` 确认；用户租户可以通过查询视图 `DBA_OB_LS_LOCATIONS` 确认。
            - `paxos_replica_num` 值变化的绝对值不能大于 1。例如，如果当前 `paxos_replica_num` 为 `3`，只能将 `paxos_replica_num` 修改为 `2` 或 `4`。

       如果指定的值有以上任一条件不满足，则系统会报错。如果不显式指定该值，系统将使用当前默认的 `paxos_replica_num`。例如，本示例中，`paxos_replica_num` 默认为 3。
      - `tenant_name`：指定待操作的租户。系统租户可以指定其他租户，用户租户只能指定本租户。如果不显式指定待操作的租户，则默认租户名为当前租户。本语句不支持使用 `all`、`all_user`、`all_meta` 等指定所有租户、用户租户以及所有 Meta 租户。
      - 本语句一次只能修改一个副本的类型。

   示例如下：

   ```shell
   obclient> ALTER SYSTEM MODIFY REPLICA LS = 1001 SERVER='172.xx.xxx.192:2882'  REPLICA_TYPE='R' PAXOS_REPLICA_NUM=2;

   ```
 6. 命令执行成功后，再次查看目标日志流的副本分布。

      - 系统租户

       ```

       ```

       ```shell
       +---------------------+---------------------+-------+----------------+----------+----------+-------+----------+---------------------------------------------+----------------------+--------------+-------------------------+---------+
       | CREATE_TIME         | MODIFY_TIME         | LS_ID | SVR_IP         | SVR_PORT | SQL_PORT | ZONE  | ROLE     | MEMBER_LIST                                 | PAXOS_REPLICA_NUMBER | REPLICA_TYPE | LEARNER_LIST            | REBUILD |
       +---------------------+---------------------+-------+----------------+----------+----------+-------+----------+---------------------------------------------+----------------------+--------------+-------------------------+---------+
       | 01-APR-24 02.13.04. | 03-APR-24 01.52.17. |  1001 | 172.xx.xxx.192 |     2882 |     2881 | zone3 | FOLLOWER | NULL                                        |                 NULL | READONLY     | NULL                    | FALSE   |
       | 01-APR-24 02.13.04. | 03-APR-24 01.52.18. |  1001 | 172.xx.xxx.212 |     2882 |     2881 | zone2 | FOLLOWER | NULL                                        |                 NULL | FULL         | NULL                    | FALSE   |
       | 01-APR-24 02.13.04. | 03-APR-24 01.52.17. |  1001 | 172.xx.xxx.226 |     2882 |     2881 | zone1 | LEADER   | 172.xx.xxx.212:2882:1,172.xx.xxx.226:2882:1 |                    2 | FULL         | 172.xx.xxx.192:2882:1:0 | FALSE   |
       +---------------------+---------------------+-------+----------------+----------+----------+-------+----------+---------------------------------------------+----------------------+--------------+-------------------------+---------+
       3 rows in set

       ```

       从查询结果可知，租户的 1001 号 日志流在 `172.xx.xxx.192:2882` 上的副本变成了 R 类型的副本。

## 相关文档

- [Locality 介绍](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682494)
 - [修改 Locality](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682966)
 - [查看 Locality](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682973)
 - [增加副本](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682969)
 - [减少副本](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682970)
 - [修改日志流的法定成员数](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682968)
 - [副本迁移](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682972)

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