---
title: "减少副本 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 减少副本 本文介绍如何减少租户下日志流的副本数。 通过修改 Locality 减少副本 通过修改集群中某个租户的 Locality，可以减少该租户下日志流的副本数。有关修改 Locality 的详细操作和注意事项，参见 修改 Locality 。 前提条件 变更 Locality 之前，需要确认待变更的 Zone 上…
---
切换语言

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

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

# 减少副本

更新时间：2026-06-02 15:46:47

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

本文介绍如何减少租户下日志流的副本数。

## 通过修改 Locality 减少副本

通过修改集群中某个租户的 Locality，可以减少该租户下日志流的副本数。有关修改 Locality 的详细操作和注意事项，参见 [修改 Locality](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682966)。

### 前提条件

变更 Locality 之前，需要确认待变更的 Zone 上各节点的资源分配情况。如果 Zone 上的节点资源不足导致无法存放租户需要的资源单元，则将导致无法进行 Locality 变更。

有关 Zone 上各节点的资源分配情况，请参见 [查看租户和资源信息](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682449)。

### 注意事项

- 租户的 Locality 不可以为空。
 - 当租户的 Locality 发生变更时，在该租户下，所有表的副本分布情况也会随之变化。
 - 在旧一轮租户 Locality 没有完成变更时，新一轮的租户 Locality 变更不允许被执行。
 - 减少副本后，如果要释放资源，还需要注意缩减目标租户的资源池。

  以 `z1,z2,z3` 为例，删除 `z3`，有两种场景：

     1. 租户在 `z3` 上有独立的资源池，例如：租户有 `resource_pool1` 和 `resource_pool2` 两个资源池，其中 `resource_pool2` 位于 `z3`，那么减少副本后，需要将 `resource_pool2` 从租户的资源池列表移除，然后可以选择删除资源池，真正释放资源，删除资源池的详细操作，参见 [删除资源池](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682934)。
     2. `z3` 上没有独立的资源池，比如：租户的资源池 `resource_pool1` 位于 `z2` 和 `z3`，那么减少副本后，需要调整 `resource_pool1` 的 `zone` 列表，移除 `z3`，真正释放资源，调整资源池 `zone` 列表的详细操作，参见 [修改资源池属性](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682463)。

### 操作步骤

示例：通过修改租户 `mysql001` 的 Locality，由 `FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3` 修改为 `FULL{1}@zone1, FULL{1}@zone2`，减少租户的副本数。

#### 说明

此处仅以减少 1 个 Zone 为示例，实际操作中注意减少后的 Zone 的数量需要能够满足多数派原则。

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. 查看租户 `mysql001` 修改前的 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         | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   |      1001 | META$1002   | META        | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   |      1002 | mysql001    | USER        | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   +-----------+-------------+-------------+-------------------+---------------------------------------------+
   3 rows in set

   ```

   可以看到租户 `mysql001` 在 zone1、zone2、zone3 上分别有一个全能型副本。
 4. 修改租户 `mysql001` 的 Locality。

   ```shell
    obclient(root@sys)[oceanbase]> ALTER TENANT mysql001 locality="FULL{1}@zone1, FULL{1}@zone2";

   ```
 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    |           0 |      100 | 2023-01-05 19:33:46.730319 | 2023-01-05 19:33:46.920111 |      1002 | ALTER TENANT mysql001 locality='FULL{1}@zone1, FULL{1}@zone2'                | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | xx.xx.xx.xx    |        2882 |
   +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+
   1 row in set

   ```

   当 `JOB_STATUS` 为 `SUCCESS` 时，则说明 Locality 变更任务执行成功。
 6. 查看租户 `mysql001` 修改后的 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         | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
   |      1001 | META$1002   | META        | zone1;zone2       | FULL{1}@zone1, FULL{1}@zone2                |
   |      1002 | mysql001    | USER        | zone1;zone2       | FULL{1}@zone1, FULL{1}@zone2                |
   +-----------+-------------+-------------+-------------------+---------------------------------------------+
   3 rows in set

   ```

   通过步骤 3 与步骤 6 的查询比较，租户 `mysql001` 的 Locality 由原来的 `FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3` 变为 `FULL{1}@zone1, FULL{1}@zone2`，租户 `mysql001` 的副本数减少。

## 手动删除副本

当通过修改 Locality 减少副本时，正常情况下，系统会自动删除多余的副本，但由于一些异常原因，导致系统未正常工作，可以通过 `ALTER SYSTEM REMOVE REPLICA` 命令手动删除多余的日志流副本。

### 使用限制

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

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

### 前提条件

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

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

### 操作步骤

假设当前有一个 tenant1 租户，其 Locality 为 `F@zone1,F@zone3`，同时，tenant1 租户的 1001 号日志流在 `zone1`、`zone2` 和 `zone3` 上各有一个 F 类型的副本。现在需要手动将 `zone2` 上的副本删除。

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}@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;zone3  |             0 |           0 |                NULL |     NULL | 1712136316868815003 | 1712136316868815003 |      |                |
       |  1001 | NORMAL | zone1;zone3  |          1001 |        1001 | 1711951923021132001 |     NULL | 1712136316868815003 | 1712136316868815003 |      | 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-1000000005683901)。
 4. 根据前面获取到的日志流信息，查看 1001 号日志流的副本分布。

      - 系统租户

       ```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 |
       +----------------------------+----------------------------+-------+----------------+----------+----------+-------+----------+----------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+
       | 2024-04-03 17:23:06.381521 | 2024-04-03 17:23:15.934957 |  1001 | 172.xx.xxx.192 |     2882 |     2881 | zone3 | FOLLOWER | NULL                                                                             |                 NULL | FULL         |              | FALSE   |
       | 2024-04-01 14:12:08.588944 | 2024-04-03 17:23:14.904070 |  1001 | 172.xx.xxx.212 |     2882 |     2881 | zone2 | FOLLOWER | NULL                                                                             |                 NULL | FULL         |              | FALSE   |
       | 2024-04-01 14:12:08.589084 | 2024-04-03 17:23:14.080074 |  1001 | 172.xx.xxx.226 |     2882 |     2881 | zone1 | LEADER   | 172.xx.xxx.192:2882:1712136186291857,172.xx.xxx.212:2882:1,172.xx.xxx.226:2882:1 |                    3 | FULL         |              | FALSE   |
       +----------------------------+----------------------------+-------+----------------+----------+----------+-------+----------+----------------------------------------------------------------------------------+----------------------+--------------+--------------+---------+
       3 rows in set

       ```

       根据查询结果可知，租户的 1001 日志流在 `172.xx.xxx.192:2882` 、`172.xx.xxx.212:2882` 和 `172.xx.xxx.226:2882` 上均有一个 F 类型的副本。结合 Locality 信息，需要删除日志流在 `172.xx.xxx.212:2882`（`zone2`） 上的副本。

       有关视图 `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 REMOVE REPLICA LS [=] ls_id SERVER [=] 'svr_ip:svr_port' [PAXOS_REPLICA_NUM [=] paxos_replica_num] [TENANT [=] 'tenant_name'];

   ```

   语句使用说明：

      - `ls_id`：指定待删除副本的日志流 ID。
      - `svr_ip:svr_port`：指定待删除副本所在服务器的 IP 及端口号。示例：`172.xx.xxx.212:2882`。
      - `paxos_replica_num`：指定修改后日志流的法定成员数，即租户 Locality 中全功能型（F）副本的数量。同时一个日志流的 F 副本数最多为 7 个。

       指定该参数的值时，需要满足以下条件：

            1. 修改后，`paxos_replica_num` 需要满足多数派。
            2. `paxos_replica_num` 的值需要大于等于当前 Leader 副本中 `MEMBER_LIST` 的成员个数。
            3. `paxos_replica_num` 值变化的绝对值不能大于 1。例如，本示例中，当前 `paxos_replica_num` 为 `3`，只能将 `paxos_replica_num` 修改为 `2`。

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

   删除 1001 号日志流在 `172.xx.xxx.212:2882` 上的副本，且指定删除后 `PAXOS_REPLICA_NUM` 为 2，示例如下：

   ```shell
   obclient> ALTER SYSTEM REMOVE REPLICA LS = 1001 SERVER = '172.xx.xxx.212:2882' 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 |
       +----------------------------+----------------------------+-------+----------------+----------+----------+-------+----------+------------------------------------------------------------+----------------------+--------------+--------------+---------+
       | 2024-04-03 17:23:06.381521 | 2024-04-03 17:32:49.079886 |  1001 | 172.xx.xxx.192 |     2882 |     2881 | zone3 | FOLLOWER | NULL                                                       |                 NULL | FULL         |              | FALSE   |
       | 2024-04-01 14:12:08.589084 | 2024-04-03 17:32:49.124409 |  1001 | 172.xx.xxx.226 |     2882 |     2881 | zone1 | LEADER   | 172.xx.xxx.192:2882:1712136186291857,172.xx.xxx.226:2882:1 |                    2 | FULL         |              | FALSE   |
       +----------------------------+----------------------------+-------+----------------+----------+----------+-------+----------+------------------------------------------------------------+----------------------+--------------+--------------+---------+
       2 rows in set

       ```

       根据查询结果可知，租户的 1001 日志流在 `172.xx.xxx.192:2882` 和 `172.xx.xxx.226:2882` 上均有一个 F 类型的副本。原来 `172.xx.xxx.212:2882` 上的副本已删除。

## 相关文档

- [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-1000000005682971)
 - [修改日志流的法定成员数](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) 咨询热线
