---
title: "配置双向同步任务 | OceanBase 文档中心"
description: 配置双向同步任务 本文以 MySQL 数据库至 OceanBase 数据库 MySQL 兼容模式的双向同步任务为例，为您介绍 OceanBase 迁移服务（OceanBase Migration Service，OMS）双向同步的相关说明和操作步骤。 背景信息 什么是双向同步 双向同步支持在数据增量同步阶段，同时配置…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*L03BS6f-o40AAAAAAAAAAAAADiGDAQ/original) 迁移服务 OMSV 4.3.1 企业版

# 配置双向同步任务

更新时间：2026-04-14 15:36:02

本文以 MySQL 数据库至 OceanBase 数据库 MySQL 兼容模式的双向同步任务为例，为您介绍 OceanBase 迁移服务（OceanBase Migration Service，OMS）双向同步的相关说明和操作步骤。

## 背景信息

### 什么是双向同步

双向同步支持在数据增量同步阶段，同时配置相同数据源的正向和反向迁移任务，实现数据可以在源端和目标端之间相互同步的能力。通过防循环复制的机制，可以避免某一方向已经同步过的数据，不会被对向任务重复同步。

#### 说明

双向同步并不意味着业务可以在两端同时进行写入操作。如果业务同时对相同的数据（同一主键或唯一键）进行写入操作，需要在双向同步任务的配置上定义数据冲突的处理策略（覆盖或忽略），强烈建议业务层面避免对两端同时进行相同数据的写入操作。

### 支持双向同步的迁移类型

OMS 支持 MySQL 数据库与 OceanBase 数据库 MySQL 兼容模式、Oracle 数据库与 OceanBase 数据库 Oracle 兼容模式，以及 OceanBase 数据库与 OceanBase 数据库之间的双向数据同步。使用限制、注意事项等更多详情请参见相应类型的数据迁移文档。

[迁移 MySQL 数据库的数据至 OceanBase 数据库 MySQL 兼容模式](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023037)

[迁移 OceanBase 数据库 MySQL 兼容模式的数据至 MySQL 数据库](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023030)

[迁移 Oracle 数据库的数据至 OceanBase 数据库 Oracle 兼容模式](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023022)

[迁移 OceanBase 数据库 Oracle 兼容模式的数据至 Oracle 数据库](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023040)

[OceanBase 数据库之间的数据迁移](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023023)

### MySQL 数据源授权语句

当您进行 MySQL 数据库和 OceanBase 数据库 MySQL 兼容模式之间的双向同步时，请为当前任务的 MySQL 数据源下的数据库账号赋予 `CREATE DATABASE` 和 `CREATE TABLE` 权限。OMS 需要创建事务库和事务表实现双向同步防循环复制的能力，否则可能导致双向同步任务异常。

- 授予全局创建数据库权限

  ```SQL
  GRANT CREATE ON *.* TO '<user_name>';

  ```
 - 允许用户在名为 `oms` 的数据库中创建表

  ```SQL
  GRANT CREATE ON oms.* TO '<user_name>';

  ```

### Oracle 数据源创建 Schema 及授权语句

当您进行 Oracle 数据库和 OceanBase 数据库 Oracle 兼容模式之间的双向同步时，请在当前任务的 Oracle 数据源下创建名为 `OMS` 的 Schema，并且为数据源下的数据库账号赋予在 `OMS` Schema 下 `CREATE TABLE` 的权限，否则可能导致双向同步任务异常。

- 创建 OMS 用户

  ```SQL
  CREATE USER OMS IDENTIFIED BY <YOUR_PASSWORD> DEFAULT TABLESPACE <指定表空间>; // YOUR_PASSWORD 为实际的用户密码
  ALTER USER OMS QUOTA unlimited ON <上一步指定的表空间>;
  ALTER USER <数据源用户> QUOTA unlimited ON <上一步指定的表空间>;

  ```
 - 赋予权限

  ```SQL
  GRANT CREATE ANY TABLE TO <YOUR_USERNAME>;
  GRANT INSERT ANY TABLE TO <YOUR_USERNAME>;
  GRANT UPDATE ANY TABLE TO <YOUR_USERNAME>;
  GRANT DELETE ANY TABLE TO <YOUR_USERNAME>;
  GRANT SELECT ANY TABLE TO <YOUR_USERNAME>;

  ```

## 注意事项

双向同步任务通过配置正向和反向任务，构成双向同步任务为您提供服务。

| 类型 | 描述 |
| --- | --- |
| 正向任务 | - 正向任务支持结构迁移、全量迁移、增量 DML 和增量 DDL。 - 汇聚库、汇聚表的场景不支持配置正向任务。例如，源端 a、b 汇聚至目标端 c。 - 结构迁移和全量迁移阶段，请勿执行库或表结构变更的 DDL 操作，否则会导致任务失败。 - 请勿在通过匹配规则方式选择迁移对象时，将事务表配置为排除对象规则。 |
| 反向任务 | - 仅当正向任务处于增量同步阶段，并且任务状态为运行中时，支持配置反向任务。 - 反向任务仅支持增量 DML。 - 配置反向任务时，不支持编辑同步对象，默认根据正向任务自动匹配。 |
| 其他注意事项 | - 如果双向同步任务中存在无主键或无非空唯一键表，在同步的过程中，可能导致目标端对应库表出现重复数据。 - 双向同步任务将在 MySQL、Oracle 端创建名为 OMS 的库或 Schema，并且在 OMS 库或 Schema 中创建事务表，以避免数据循环同步。任务运行期间，请勿对事务表进行任何的 DML/DDL 操作。 |

## 关于数据冲突场景说明

为了保证双向同步数据的一致性，请确认业务对相同主键或非空唯一键的数据操作只在双向同步的一端执行。如果两端同时更新，可能导致数据出现冲突，主要包括以下场景。

- INSERT 时唯一键冲突

  如果业务在两端接近同时执行了相同唯一键的 INSERT 操作，当同步到目标端时，由于唯一性约束导致数据 INSERT 写入失败。您可以通过任务配置决定是否忽略冲突数据或者覆盖目标端数据。
 - UPDATE 时唯一键冲突

     - UPDATE 要更新的数据在目标端已存在，将使用源端数据覆盖更新目标端数据。
     - UPDATE 要更新的数据在目标端不存在，将导致数据更新失败。
     - UPDATE 要更新的数据，更新后目标端出现主键或唯一键冲突，将导致数据更新失败。
 - DELETE 时数据冲突

  DELETE 时对应的记录不存在，DELETE 操作失败。

## 操作步骤

### 配置正向任务

1. 将数据迁移任务配置至 **选择迁移类型** 步骤，选择 **同步拓扑** 为 **双向同步**。

   详情请参见相应类型的 [数据迁移](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023033) 任务文档。

   ![oms114-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/oms114-zh.png)
 2. 在 **迁移选项** 区域，选择当前数据迁移任务的迁移类型。

   同步拓扑为双向同步时，支持的迁移类型包括 **结构迁移**、**全量迁移** 和 **增量同步**。

   ![oms115-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/oms115-zh.png)

   | 迁移类型 | 描述 |
   | --- | --- |
   | 结构迁移 | 结构迁移任务开始后，OMS 会将源端的数据对象定义（表、索引、约束、注释和视图等）迁移至目标端数据库中，并自动过滤临时表。 |
   | 全量迁移 | 全量迁移任务开始后，OMS 会将源端库表的存量数据迁移至目标端数据库对应的表中。 |
   | 增量同步 | 增量同步任务开始后，OMS 会将源端数据库发生变化的数据（新增、修改或删除）同步至目标端数据库对应的表中。**增量同步** 包括 **DML 同步** 和 **DDL 同步**，您可以根据需求进行自定义配置。详情请参见 [自定义配置 DDL/DML](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023212)。   #### 说明     - 双向同步场景下，`DML 同步` 选项不允许取消勾选。   - 双向同步场景下，仅配置正向任务的 DDL 同步。 |
 3. 单击 **下一步**。在 **选择迁移对象** 步骤，选择当前数据迁移任务的迁移对象。

   您可以通过 **指定对象** 和 **匹配规则** 两个入口选择迁移对象。本文为您介绍通过 **指定对象** 方式选择迁移对象的具体操作，配置匹配规则的详情请参见 [配置迁移或同步对象的匹配规则](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023205) 中库到库的通配规则说明和配置方式。

   #### 注意

      - 当数据库的库名或表名存在 "$$" 字符时，会影响数据迁移任务的创建。
      - 如果您在 **选择迁移类型** 步骤已勾选 **DDL 同步**，建议通过匹配规则方式选择迁移对象，以确保所有符合迁移对象规则的新增对象都将被同步。如果您通过指定对象方式选择迁移对象，则新增对象或重命名后的对象将不会被同步。  

   ![migration-39-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/migration-39-zh.png)

      1. 在 **选择迁移对象** 步骤，选中 **指定对象**。
      2. 在 **源端对象** 列表选中需要迁移的对象。您可以选择一个或多个库的表、视图作为迁移对象。
      3. 单击 **>**，将其添加至 **目标端对象** 列表中。

   OMS 支持通过文本导入对象，并支持对目标端对象进行重命名、设置行过滤、选择分区和列，以及移除单个或全部迁移对象等操作。

   #### 说明

   通过 **匹配规则** 方式选择迁移对象时，重命名能力由匹配规则语法覆盖，操作处仅支持设置过滤条件。详情请参见 [配置匹配规则](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023205)。

   | 操作 | 步骤 |
   | --- | --- |
   | 导入对象 | 1. 在 **目标端对象** 列表中，单击右上角的 **导入对象**。   2. 在对话框中，单击 **确定**。        **注意：**         导入会覆盖之前的操作选择，请谨慎操作。   3. 在 **导入迁移对象** 对话框中，导入需要迁移的对象。        您可以通过导入 CSV 文件的方式进行库表重命名、设置行过滤条件等操作。详情请参见 [下载和导入迁移对象配置](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023133)。   4. 单击 **检验合法性**。   5. 通过合法性的检验后，单击 **确定**。 |
   | 重命名 | OMS 支持重命名迁移对象的名称，详情请参见 [数据库库表重命名](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023211)。 |
   | 设置 | OMS 支持配置行过滤、选择分区和需要迁移的列。    1. 在选择区域的右侧列表中，鼠标悬停至目标对象。   2. 单击显示的 **设置**。   3. 在 **设置** 对话框，您可以进行以下操作。        在 **行过滤条件** 区域的文本框中，输入标准的 SQL 语句中的 WHERE 子句，来配置行过滤。详情请参见 [SQL 条件过滤数据](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023209)。     - 在 **分区** 区域的下拉列表中，选择您在全量迁移阶段需要获取的指定分区数据。选择完成后，单击 **确认**。          - 在 **选择列** 区域，选择需要迁移的列。详情请参见 [列过滤](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023208)。 |
   | 移除/全部移除 | OMS 支持在数据映射时，对暂时选中到目标端的单个或多个对象进行移除操作。    - 移除单个迁移对象        在 **目标端对象** 列表中，鼠标悬停至目标对象，单击显示的 **移除**，即可移除该迁移对象。   - 移除全部迁移对象        在 **目标端对象** 列表中，单击右上角的 **全部移除**。在对话框中，单击 **确定**，即可移除全部迁移对象。 |
 4. 单击 **下一步**。在 **迁移选项** 步骤，配置各项参数。

      - 结构迁移

       在 **选择迁移类型** 步骤，选中 **双向同步** > **结构迁移**，才会显示下述参数。

       ![oms116-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/oms116-zh.png)

       | 参数 | 描述 |
       | --- | --- |
       | 完成后自动进入下一阶段 | 当您选择了结构迁移和其他任意迁移类型时，可以设置结构迁移完成后是否自动进入下一个阶段。默认值为 **是**，您也可以在数据迁移任务详情页面的 **结构迁移** 页签进行查看和修改。 |
       | 普通索引迁移方式 | 指表对象迁移后相关联的非唯一键索引的迁移方式，包括 **不迁移**、**随结构迁移** 和 **全量后迁移**（选中全量迁移才会显示）。 |
      - 全量迁移

       在 **选择迁移类型** 步骤，选中 **双向同步** > **全量迁移**，才会显示下述参数。

       ![oms65-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/oms65-zh.png)

       | 参数 | 描述 |
       | --- | --- |
       | 全量迁移速率限制 | 您可以根据实际需求决定是否开启全量迁移速率限制。如果开启，请设置 RPS（全量迁移阶段每秒最多可以迁移至目标端的数据行数的最大值限制）和 BPS（全量迁移阶段每秒最多可以迁移至目标端的数据量的最大值限制）。   #### 说明    此处设置的 RPS 和 BPS 仅作为限速限流能力，全量迁移实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。 |
       | 全量迁移资源配置 | 您可以选择 **小**、**中**、**大** 的默认读取并发、写入并发和内存，也可以自定义全量迁移的资源配置。通过全量导入组件 Full-Import 的资源配置，可以限制任务全量迁移阶段的资源消耗。   #### 注意    自定义配置时，最小值为 1，且仅支持配置为整数。 |
       | 目标端表对象存在记录时处理策略 | 处理策略包括 **忽略** 和 **停止迁移**：      - 选择 **忽略**，当目标端表对象存在数据时，如果原数据与写入数据冲突，OMS 采用将冲突数据记录日志，保留原数据不变的策略进行数据写入。         #### 注意     - 选择 **停止迁移**，当目标端表对象存在数据时，全量迁移会报错不允许迁移，请处理好目标端数据后再继续迁移。         #### 注意          如果出错后单击恢复，OMS 将忽略该配置选项，继续迁移表数据，请谨慎操作。 |
      - 增量同步

       在 **选择迁移类型** 步骤，选中 **双向同步** > **增量同步**，才会显示下述参数。

       ![oms117-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/oms117-zh.png)

       | 参数 | 描述 |
       | --- | --- |
       | 增量同步速率限制 | 您可以根据实际需求决定是否开启增量同步速率限制。如果开启，请设置 RPS（增量同步阶段每秒最多可以同步至目标端的数据行数的最大值限制）和 BPS（增量同步阶段每秒最多可以同步至目标端的数据量的最大值限制）。   #### 说明    此处设置的 RPS 和 BPS 仅作为限速限流能力，增量同步实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。 |
       | 增量日志拉取资源配置 | 您可以选择 **小**、**中**、**大** 的默认内存，也可以自定义增量日志拉取的资源配置。通过增量拉取组件 Store 的资源配置，可以限制任务增量同步阶段日志拉取的资源消耗。   #### 注意    自定义配置时，最小值为 1，且仅支持配置为整数。 |
       | 增量数据写入资源配置 | 您可以选择 **小**、**中**、**大** 的默认写入并发和内存，也可以自定义增量数据写入的资源配置。通过增量同步组件 Incr-Sync 的资源配置，可以限制任务增量同步阶段数据写入的资源消耗。   #### 注意    自定义配置时，最小值为 1，且仅支持配置为整数。 |
       | 增量记录保存时间 | OMS 中增量解析文件缓存的时长。配置的保存时间越长，Store 组件需要消耗的磁盘空间越大。 |
       | 增量同步起始位点 | - 如果选择迁移类型时已选择 **全量迁移**，该参数不显示。     - 如果选择迁移类型时未选择 **全量迁移**，但选择了 **增量同步**，请在此处指定迁移某个时间节点之后的数据，默认为当前系统时间。详情请参见 [设置增量同步位点](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023203)。 |
       | 适配 Online DDL 工具 | 开启该功能后，数据库使用 Online DDL 工具执行无锁结构变更，数据迁移将过滤临时表对象，以提升数据迁移任务的稳定性。详情请参见 [适配 Online DDL 工具介绍](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023070)。   #### 说明    目前适配 Online DDL 工具仅支持源端为 MySQL 数据库，且使用阿里云 DMS、gh-ost 或 pt-osc 进行无锁结构变更操作的场景。 |
       | 数据冲突时处理策略 | 包括 **忽略报错，保持目标端原有数据** 和 **忽略冲突，使用源端数据覆盖目标端数据**。详情请参见上文《关于数据冲突场景说明》模块的内容。 |
      - 高级选项

       当目标端 OceanBase 数据库 MySQL 兼容模式为 V4.3.0 及之后版本，并且在 **选择迁移类型** 步骤，选中 **结构迁移** 或 **增量同步** > **DDL 同步**，才会显示该区域的参数。

       ![oms8-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/oms8-zh.png)

       目标端表对象存储类型包括 **默认**、**行存**、**列存** 和 **行列混存**，该配置用于确定结构迁移或增量同步时目标端表对象的存储类型，详情请参见 [default_table_store_format](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642104)。

       #### 说明

       **默认** 选项是根据目标端参数配置自适应其他选项，是结构迁移的表对象或增量 DDL 的新增表对象根据设置的存储类型写对应的结构。

   如果页面的配置参数无法满足需求，您可以单击页面下方的 **参数配置**，进行更加具体的配置。如果您有已配置的任务模板或组件模板，还可以在此处进行引用。

   ![oms131-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/oms131-zh.png)
 5. 单击 **预检查**，系统对正向迁移任务进行预检查。

   在 **预检查** 环节，OMS 会检查数据库用户的读写权限、数据库的网络连接等是否符合要求。全部检查任务均通过后才能启动数据迁移任务。如果预检查报错：

      - 您可以排查并处理问题后，重新执行预检查，直至预检查成功。
      - 您也可以单击失败预检查项操作列中的 **跳过**，会弹出对话框提示您跳过本操作的具体影响，确认可以跳过后，请单击对话框中的 **确定**。
 6. 预检查成功后，单击 **启动任务**，即可启动正向任务。

### 配置反向任务

1. 返回 **迁移任务列表** 页面，待正向任务处于监控中的增量同步阶段且任务状态为运行中时，单击反向任务后的 **配置**。

   ![oms118-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oms-enterprise/oms118-zh.png)
 2. 在 **配置反向迁移** 页面，自定义反向迁移任务的名称，默认为”正向任务名称-reverse“。

   建议使用中文、数字和字母的组合。名称中不能包含空格，长度不能超过 64 个字符。
 3. 在 **确认迁移配置** 步骤，确认和修改各项配置。

   | 参数 | 描述 |
   | --- | --- |
   | 源端和目标端 | 根据正向迁移任务的类型进行默认显示，不支持修改。 |
   | 增量同步 | 请根据实际需求选择 DML 同步，包括 `insert`、`update` 和 `delete`。 |
   | 迁移对象 | 单击 **查看**，即可查看在正向迁移任务中选中的迁移对象来进行反向迁移。 |
   | 迁移选项 | 反向迁移任务的配置默认和正向迁移任务中增量同步的配置一致，您可以根据实际需求进行修改。 |
 4. 单击 **下一步**，系统对反向迁移任务进行预检查。
 5. 预检查成功后，单击 **启动任务**，即可启动反向迁移任务。

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