---
title: "修改 Locality - OceanBase 数据库 V4.1.0 | OceanBase 文档中心"
description: 修改 Locality 本文介绍如何修改租户的 Locality 属性。 Locality 应用场景 Locality 的设置通常用于租户的副本数增加、减少或调整副本分布： 租户副本数增加 对集群中的某个租户，增加租户的副本数，一次只能增加一个。例如，租户从 1 副本变为 3 副本，需要将 Locality 由 F@…
---
切换语言

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

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

# 修改 Locality

更新时间：2023-11-10 12:00:48

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

本文介绍如何修改租户的 Locality 属性。

## Locality 应用场景

Locality 的设置通常用于租户的副本数增加、减少或调整副本分布：

- 租户副本数增加

  对集群中的某个租户，增加租户的副本数，一次只能增加一个。例如，租户从 1 副本变为 3 副本，需要将 Locality 由 `F@z1` 变更为 `F@z1,F@z2` ，再将 Locality 由 `F@z1,F@z2` 变更为 `F@z1,F@z2,F@z3`，具体操作请参见 [增加副本](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001697416)。

  #### 注意

  租户从 3 副本变为 5 副本时，可以直接操作，不需要先变更为 4 副本，再变更为 5 副本。
 - 租户副本数减少

  对集群内的某个租户，减少租户的副本数，一次只能减少一个。例如，租户从 3 副本变为 2 副本，租户从 5 副本变为 3 副本。具体操作请参见 [减少副本](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001697417)。

  #### 注意

     - 不支持租户从 2 副本变成 1 副本。
     - 租户从 5 副本变为 3 副本时，可以直接操作，不需要先变更为 4 副本，再变更为 3 副本。
 - 租户副本分布调整

  对集群内的某个租户通过若干次 Locality 变更，调整租户的机房分布。例如，租户原来的 Locality 为 `F@z1,F@z2,F@z3`，由于 z3 机房到期，需要调整为 z4，Locality 需要变更为 `F@z1,F@z2,F@z4`，需要做两次 Locality 变更，从 `F@z1,F@z2,F@z3` 变更为 `F@z1,F@z2,F@z3,F@z4`，再由 `F@z1,F@z2,F@z3,F@z4` 变更为 `F@z1,F@z2,F@z4`。具体操作请参见 [调整副本分布](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001697418)。

## 前提条件

变更 Locality 之前，需要确认待变更的 Zone 上资源单元和资源池的状态。如果 Zone 上的节点资源不足导致无法存放租户需要的资源单元，将导致无法进行 Locality 变更。

有关 Zone 上资源单元和资源池的状态的检查方法，参见 [查看集群的资源信息](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001701028)。

## 注意事项

- 租户的 Locality 不可以为空。
 - 当租户的 Locality 发生变更时，在该租户下，所有表的副本分布情况也会随之变化。
 - 在旧一轮租户 Locality 没有完成变更时，新一轮的租户 Locality 变更不允许被执行。
 - Locality 变更一次只能执行一个动作，例如把 Zone3 替换为 Zone4，不能直接替换，可以先增加一个 Zone4，然后再减少一个 Zone3。
 - 修改 Locality 时需要关注对 Primary Zone 的影响，建议提前调整 Primary Zone。

  例如：

     1. 需要减少 zone3，如果 zone3 属于第一优先级的 Primary Zone，则调整 Locality 过程会影响租户读写服务。
     2. 增加 zone4 时，如果 Primary Zone 为 RANDOM，那么后续 zone4 也会提供读写服务。
 - Locality 变更涉及到 Paxos 成员的变更和数据的拷贝，需要评估对稳定性和性能的影响。对于 Paxos 成员变更的影响，需要评估清楚变更对节点故障的容忍度的影响。对于副本分布的变化，需要评估是否会打破部署架构对机房故障和城市故障的 SLA 设计。对于数据拷贝，变更过程中需要观察数据拷贝对同节点上其他租户的影响，尽量放在业务低峰期进行，并提前做好应急预案。
 - Locality 变更过程不应该降低对节点故障的预期容忍度，例如：三副本部署的集群，机房替换场景，需要先增加副本，再减少副本，以保证变更过程中不降低对节点故障的预期容忍度。因此变更过程中发生单副本异常，理论上不会影响服务连续性，如果有影响，恢复数据库可用是第一要务，应该首先尝试恢复硬件异常。

## 操作步骤

示例：将租户 `mq_t1` 的 Locality 由 `FULL{1}@sa128_obv4_1,FULL{1}@sa128_obv4_2` 修改为 `F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3`。

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

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

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

   ```shell
   obclient>use oceanbase;

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

   ```shell
   obclient> SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS;
   +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+
   | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE                           | LOCALITY                                                         |
   +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+
   |         1 | sys         | SYS         | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 |
   |      1001 | META$1002   | META        | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 |
   |      1002 | midas0_3790 | USER        | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 |
   |      1003 | META$1004   | META        | sa128_obv4_1,sa128_obv4_2              | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2                       |
   |      1004 | mq_t1       | USER        | sa128_obv4_1,sa128_obv4_2              | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2                       |
   +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+

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

   ```sql
   obclient>ALTER TENANT mq_t1 locality="F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3";

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

   ```shell
    obclient>SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE = 'ALTER_TENANT_LOCALITY';
    +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+
    | 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 mq_t1 locality="F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3"                | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2 | xx.xx.xx.xx |        2882 |
    +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+

   ```

   当 `JOB_STATUS` 为 `SUCCESS` 时，则说明 Locality 变更任务执行成功。
 6. 查看修改后的 Locality。

   ```shell
   obclient>SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS;
   +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+--------------------+
   | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE                           | LOCALITY                                                         | PREVIOUS_LOCALITY  |
   +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+--------------------+
   |         1 | sys         | SYS         | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null               |
   |      1001 | META$1002   | META        | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null               |
   |      1002 | midas0_3790 | USER        | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null               |
   |      1003 | META$1004   | META        | sa128_obv4_1,sa128_obv4_2              | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null               |
   |      1004 | mq_t1       | USER        | sa128_obv4_1,sa128_obv4_2              | FULL{1}@sa128_obv4_1, FULL{1}@sa128_obv4_2, FULL{1}@sa128_obv4_3 | null               |
   +-----------+-------------+-------------+----------------------------------------+------------------------------------------------------------------+--------------------+

   ```

   通过查询可知，`mq_t1` 的 Locality 已变更为 `F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3`，此时 `PREVIOUS_LOCALITY` 为空，说明变更成功，如果 `PREVIOUS_LOCALITY` 不为空，说明正在变更中。

## 相关文档

- [Locality 介绍](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001697243)
 - [查看 Locality](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001698975)

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