---
title: "更改复制表属性 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 更改复制表属性 OceanBase 数据库中通过 DUPLICATE_SCOPE 参数来指定复制表的属性。表创建成功后，可以通过修改 DUPLICATE_SCOPE 参数的值来实现复制表与普通表之间的相互转换。 使用限制及注意事项 在进行复制表的转换时，如果当前租户有扩缩容、Primary Zone 变更以及 Loc…
---
切换语言

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

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

# 更改复制表属性

更新时间：2026-06-04 13:20:44

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/300.database-object-management/200.manage-object-of-oracle-mode/100.manage-tables-of-oracle-mode/650.change-duplicate-scope-of-oracle-mode.md)  

OceanBase 数据库中通过 `DUPLICATE_SCOPE` 参数来指定复制表的属性。表创建成功后，可以通过修改 `DUPLICATE_SCOPE` 参数的值来实现复制表与普通表之间的相互转换。

## 使用限制及注意事项

- 在进行复制表的转换时，如果当前租户有扩缩容、Primary Zone 变更以及 Locality 变更等行为触发了负载均衡任务，则复制表属性的转换任务需要等待当前均衡任务完成。

  #### 注意

  复制表转换过程是异步的，在手动修改 `DUPLICATE_SCOPE` 后，需要等待后台分区均衡任务完成才可以实际当做目标属性的表使用。更多有关分区均衡的信息，请参见 [租户内均衡](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685946)。
 - 由于复制表与表组互斥，在将普通表转换为复制表时，如果待转换的普通表属于某个表组，则该普通表无法转换为复制表。
 - 复制表的转换依赖租户的负载均衡及 Transfer 功能，当租户级配置项 `enable_rebalance`、`enable_transfer` 以及 `enable_rereplication` 中任意一个配置项的值为 `false` 即关闭状态时，均无法进行复制表的转换操作。如果修改配置项 `enable_rebalance`、`enable_transfer` 的值为 `false` 时，有正在执行的复制表转换任务，则对应的复制表转换任务会被取消。

## 前提条件

在进行复制表的转换操作前，请确认以下配置项的值已设置为 `True`：

- `enable_rebalance`

  租户级配置项 `enable_rebalance` 在系统租户下用于控制是否进行租户间的负载均衡；在用户租户下用于控制是否进行租户内均衡。默认值为 `True`。有关配置项 `enable_rebalance` 的详细说明及设置，请参见 [enable_rebalance](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685453)。
 - `enable_transfer`

  租户级配置项 `enable_transfer` 用于控制是否在租户下进行 Transfer，默认值为 `True`。有关配置项 `enable_transfer` 的详细说明及设置，请参见 [enable_transfer](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685396)。
 - `enable_rereplication`

  集群级配置项 `enable_rereplication` 是日志流副本自动迁移复制的总开关。默认值为 `True`。有关配置项 `enable_rereplication` 的详细说明及设置，请参见 [enable_rereplication](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685565)。

## 更改复制表属性语法

更改复制表属性的 SQL 语句如下：

```sql
ALTER TABLE table_name DUPLICATE_SCOPE= 'none | cluster';

```

语句中：

- `none`：表示将当前表转换为普通表。
 - `cluster`：表示将当前表转换为复制表。

## 示例

下面的命令展示了如何将一个复制表转换为普通表。

1. 创建复制表 `tbl1`。

   ```sql
   obclient [test]> CREATE TABLE tbl1 (c1 int,c2 int) DUPLICATE_SCOPE= 'cluster';

   ```
 2. 将该复制表转换为普通表。

   ```sql
   ALTER TABLE tbl1 DUPLICATE_SCOPE= 'none';

   ```

   #### 注意

   上面 SQL 语句在修改表属性后会立即返回成功，实际复制表转换动作由后台线程异步执行。
 3. 查看表的复制表属性。

   通过视图 `sys.DBA_OB_TABLE_LOCATIONS` 可以查看表当前的复制表属性及所在的日志流 ID。其中 `DUPLICATE_SCOPE` 列为 `CLUSTER` 则表示是复制表，为 `NONE` 则表示是普通表。

   ```sql
   SELECT database_name, table_name, table_id, tablet_id, ls_id, role, duplicate_scope
   FROM sys.DBA_OB_TABLE_LOCATIONS
   WHERE table_name = 'TBL1';

   ```

   返回结果如下：

   ```shell
   +---------------+------------+----------+-----------+-------+--------+-----------------+
   | DATABASE_NAME | TABLE_NAME | TABLE_ID | TABLET_ID | LS_ID | ROLE   | DUPLICATE_SCOPE |
   +---------------+------------+----------+-----------+-------+--------+-----------------+
   | SYS           | TBL1       |   500011 |    200002 |  1002 | LEADER | NONE            |
   +---------------+------------+----------+-----------+-------+--------+-----------------+
   1 row in set

   ```

   #### 说明

   可以根据以下步骤查看复制表转换后分区副本的分布是否符合目标属性。
 4. 查看复制表转换进度。

      1. 查看日志流的属性。

        租户下所有复制表都要放到专门承载复制表的特殊日志流（广播日志流）上。过视图 `sys.DBA_OB_LS` 可以查看日志流的属性。其中 `FLAG` 列包含 `DUPLICATE` 表示为广播日志流。`FLAG` 为空或者不包含 `DUPLICATE` 则表示为普通日志流。

        ```sql
        SELECT * FROM sys.DBA_OB_LS WHERE LS_ID = 1002;

        ```

        返回结果如下：

        ```shell
         +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+-----------+
         | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN          | DROP_SCN | SYNC_SCN            | READABLE_SCN        | FLAG      | UNIT_LIST |
         +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+-----------+
         |  1002 | NORMAL | zone1        |             0 |           0 | 1713164474213079001 |     NULL | 1713173927933707000 | 1713173927933707000 | DUPLICATE |           |
         +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+-----------+
         1 row in set

        ```
      2. 判断是否需要生成复制表转换任务。

        复制表转换任务通过后台负载均衡及 Transfer 模块生成。可以通过以下语句，快速判断是否需要生成复制表转换任务。其中 `DUPLICATE_SCOPE` 是表的属性，`FLAG` 是当前表的 `tablet` 所属 LS 的属性。`FLAG` 中包含 `DUPLICATE` 则代表广播日志流。

        ```sql
        SELECT A.duplicate_scope, B.flag
        FROM sys.DBA_OB_TABLE_LOCATIONS A, sys.DBA_OB_LS B
        WHERE A.ls_id = B.ls_id
        AND A.table_name = 'TBL1'
        AND A.role = 'LEADER';

        ```

        返回结果如下：

        ```shell
         +-----------------+-----------+
         | DUPLICATE_SCOPE | FLAG      |
         +-----------------+-----------+
         | NONE            | DUPLICATE |
         +-----------------+-----------+
         1 row in set

        ```

        返回信息解释如下：

             - `DUPLICATE_SCOPE` 为 `NONE`，`FLAG` 包含 `DUPLICATE`：非复制表在广播日志流上，需要生成复制表转普通表的任务，将非复制表从广播日志流 Transfer 到普通日志流。
             - `DUPLICATE_SCOPE` 为 `NONE`，`FLAG` 不包含 `DUPLICATE`：复制表在普通日志流上，需要生成普通表转复制表任务，将复制表从普通日志流 Transfer 到广播日志流上。
      3. 立即生成转换任务。

        可以通过临时调小配置项 `partition_balance_schedule_interval` ，立即生成转换任务。

        ```sql
        ALTER SYSTEM SET partition_balance_schedule_interval = '30s';

        ```
      4. 查看复制表转换任务。

        复制表转换生成的任务可以通过相关视图 `DBA/CDB_OB_BALANCE_JOB_HISTORY` 和 `DBA/CDB_OB_BALANCE_JOBS` 进行查看。

             1. 查看历史转换任务执行情况。

               如果没有历史记录，则可能正在执行或还未生成任务。

               ```sql
               SELECT * FROM sys.DBA_OB_BALANCE_JOB_HISTORY;

               ```

               返回结果如下：

               ```shell
               +--------+------------------------------+------------------------------+-------------------+-------------------+-----------------+-------------------------+-----------+---------+
               | JOB_ID | CREATE_TIME                  | FINISH_TIME                  | BALANCE_STRATEGY  | JOB_TYPE          | TARGET_UNIT_NUM | TARGET_PRIMARY_ZONE_NUM | STATUS    | COMMENT |
               +--------+------------------------------+------------------------------+-------------------+-------------------+-----------------+-------------------------+-----------+---------+
               | 787926 | 15-APR-24 05.41.42.226172 PM | 15-APR-24 05.41.52.235808 PM | partition balance | PARTITION_BALANCE |               1 |                       1 | COMPLETED | NULL    |
               +--------+------------------------------+------------------------------+-------------------+-------------------+-----------------+-------------------------+-----------+---------+
               1 row in set

               ```
             2. 查看当前均衡任务执行情况。

               ```sql
               SELECT * FROM sys.DBA_OB_BALANCE_JOBS;

               ```
             3. 查看转换任务对应的子任务（包含分区列表）

               将上述任务对应 `job_id` 填入下面 SQL 语句中：

               ```sql
               SELECT * FROM sys.DBA_OB_BALANCE_TASKS WHERE JOB_ID = xxxx;

               ```

               ```sql
               SELECT * FROM sys.DBA_OB_BALANCE_TASK_HISTORY WHERE JOB_ID = xxxx;

               ```

#### 说明

- 若 `DBA_OB_BALANCE_JOBS` 视图中有其他 `BALANCE_JOB` 在运行，需等待当前任务完成，才会调度分区均衡任务。
 - 若上述 `BALANCE` 相关视图中没有对应复制表转换任务，可能还未生成对应 `BALANCE_JOB`，需等待或临时调小配置项 `partition_balance_schedule_interval`。
 - 如果长时间未生成转换任务，需要检查 `enable_rebalance`、`enable_transfer`、`balancer_idle_time`、`enable_rereplication` 等负载均衡相关配置项，检查是否关闭了 Transfer。

## 相关文档

- [创建表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683123)
 - [更改表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683114)

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