---
title: "创建 Oracle 数据库至 OceanBase 数据库 MySQL 租户的数据迁移项目 | OceanBase 文档中心"
description: 创建 Oracle 数据库至 OceanBase 数据库 MySQL 租户的数据迁移项目 本文为您介绍如何使用 OceanBase 迁移服务（OceanBase Migration Service，OMS）迁移 Oracle 数据库的数据至 OceanBase 数据库 MySQL 租户。 背景信息 在 OMS 控制台…
---
切换语言

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

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

# 创建 Oracle 数据库至 OceanBase 数据库 MySQL 租户的数据迁移项目

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

本文为您介绍如何使用 OceanBase 迁移服务（OceanBase Migration Service，OMS）迁移 Oracle 数据库的数据至 OceanBase 数据库 MySQL 租户。

## 背景信息

在 OMS 控制台创建从 Oracle 数据库迁移数据至 OceanBase 数据库 MySQL 租户的数据迁移项目，您可以通过结构迁移、全量迁移和增量数据同步，无缝迁移源端数据库中的存量业务数据和增量数据至 OceanBase 数据库 MySQL 租户。

Oracle 数据库支持单主库、单备库和主备库等模式。迁移 Oracle 数据库的数据至 OceanBase 数据库 MySQL 租户的数据库时，不同类型的数据源支持的操作也不同。

| 类型 | 支持的操作 |
| --- | --- |
| 单主库 | 结构迁移 + 全量迁移 + 增量同步+ 全量校验 + 反向增量 |
| 单备库 | 结构迁移 + 全量迁移 + 增量同步 + 全量校验 |
| 主备库 | 主库：支持反向增量 备库：支持结构迁移 + 全量迁移 + 增量同步 + 全量校验 |

## 前提条件

- 已在目标端 OceanBase 数据库 MySQL 租户中创建对应的 Schema。OMS 支持迁移表和列，您需要提前在目标端创建对应的 Schema。
 - Oracle 源实例必须开启 Archive Log，并且在 OMS 增量复制前已经切换过 LogFile。
 - Oracle 源实例必须已经安装并可正常使用 LogMiner 工具。

  您可以通过 LogMiner 工具获取 Oracle 归档日志文件中的具体内容。
 - 已为源端 Oracle 数据库和目标端 OceanBase 数据库 MySQL 租户创建专用于数据迁移任务的数据库用户，并为其赋予了相关权限。详情请参见 [创建数据库用户](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-0000000001043112)。
 - 确认 Oracle 实例已开启数据库级别或者表级别的补偿日志。
 - 开启数据库级别的 PK 和 UK 补偿日志，当无需同步的表产生较多不必要的日志时，会增加 LogMiner Reader 拉取日志的压力和 Oracle 自身的压力。所以，OMS 支持 Oracle 数据库仅开启表级别的 PK 和 UK 补偿日志。但是，如果在创建迁移任务时，针对非 PK 列或 UK 列设置了 ETL 过滤，请开启对应列的补偿日志，或者直接开启所有列的补偿日志。
 - Oracle 机器和 OMS 机器之间需要进行时钟同步（例如配置 NTP 服务），否则会存在数据风险。如果是 Oracle RAC，则多个 Oracle 实例之间也需要进行时钟同步。

## 使用限制

- **源端数据库的操作限制**

  **请勿在结构迁移和全量迁移阶段执行库或表结构变更的 DDL 操作，否则可能造成数据迁移项目中断。**
 - 目前支持 Oracle 数据库 10G/11G/12C/18C/19C 版本，12C 及之后版本包含数据库容器（Container Database，CDB）和可插拔数据库（Pluggable Database，PDB）。
 - 迁移 Oracle 数据库的数据至 OceanBase 数据库 MySQL 租户时，不支持同步 DDL。
 - 目标端是数据库的情况下，OMS 不支持目标端存在 Trigger。如果存在，可能导致数据迁移失败。
 - 数据源标识和用户账号等，在 OMS 系统内全局唯一。
 - OMS 仅支持迁移库名、表名和列名为 ASCII 码且不包含特殊字符（包括 .|"'`()=;/& 和换行）的对象。
 - Oracle 数据库至 OceanBase 数据库 MySQL 租户的反向增量中，OMS 不支持源端存在小写的库名或表名。否则无法通过反向增量限制项预检查。
 - Oracle 数据库的增量日志解析最大支持 5T/天。
 - Oracle 数据库 11G 及之前版本不支持创建超过 30 个字节的数据库对象。在反向增量步骤中，请注意不能在 OceanBase 数据库 MySQL 租户中创建大于本限制的数据库对象。
 - OMS 不支持迁移 Oracle 数据库 12C 及之后版本中超过 30 个字节的数据库对象（包括 Schema、表和列等）。如果您需要迁移超过 30 个字节的数据库对象，请参见 [如何迁移或同步超过 30 个字节的 Oracle 数据库对象](https://www.oceanbase.com/knowledge-base/oms-ee-1000000000234455)。
 - OMS 不支持源端 Oracle 数据库执行某些 `UPDATE` 命令。以下示例为一个不支持的 `UPDATE` 命令。

  ```sql
  UPDATE TABLE_NAME SET KEY=KEY+1;

  ```

  上述示例中，`TABLE_NAME` 是表名，`KEY` 是定义为主键的 NUMERIC 类型的列。

## 注意事项

- **当录入的 Oracle 数据库为单备库或主备库模式时，如果 Oracle 主库和备库的运行实例数不同，可能导致少拉取某些实例的增量日志。您需要手动设置 Store 组件的参数，以指定增量从备库拉取时需要拉取的实例的增量日志。操作方式如下：**

     1. Store 组件启动后马上将其停止。
     2. 在 Store 组件的 **更新配置** 页面，新增参数 `deliver2store.logminer.instance_threads` 来设置需要拉取哪些实例的日志。

       多个 thread 之间使用 | 分隔。例如，1|2|3。更新组件的详情请参见 [使用 OMS 从 Oracle 备库增量同步时丢失 Archive 日志](https://www.oceanbase.com/knowledge-base/oms-ee-1000000000266018?back=kb)。
     3. 设置参数后，重启 Store 组件。
     4. 5 分钟后，执行 `grep 'log entries from' connector/connector.log`，即可查看拉取了哪些实例的日志（thread 字段表示拉取到的是哪个实例的日志）。
 - **当需要进行 Oracle 数据库的增量同步时，Oracle 数据库单个归档文件的大小建议小于 2GB。单个归档文件过大，会存在如下风险：**

     - 单个归档文件越大，拉取的耗时比线性增长更大。
     - 录入的 Oracle 数据库为单备库或主备库模式时，增量是从备库拉取，此时只能拉取归档文件。当归档文件生成后才能拉取，归档文件越大，也就意味着在处理该归档文件之前已经延迟较久，并且处理该大的归档文件耗时也越久。
     - 单个归档文件越大，在开启相同并发度的拉取时，Store 组件需要的内存也越大。
 - **Oracle 数据库的归档文件保存 2 天以上，否则由于某个时间段归档量陡增或者 Oralce Store 处理异常，准备恢复时没有了归档文件，将无法恢复。**
 - 如果源端 Oracle 数据库存在右空格差异，则 VARCHAR 或 CHAR 类型在目标端 OceanBase 数据库 MySQL 租户会强制右 trim，导致数据不一致。
 - 如果源端 Oracle 数据库存在交换主键的 DML 语句，将导致 OMS 解析日志异常，迁移至目标端时存在数据丢失的问题。交换主键的 DML 语句示例如下：

  ```sql
  UPDATE test SET c1=(CASE WHEN c1=1 THEN 2 WHEN c1=2 THEN 1 END) WHERE c1 IN (1,2);

  ```
 - Oracle 实例的的字符集配置可以为 AL32UTF8、AL16UTF16、ZHS16GBK 和 GB18030。如果源端字符集为 UTF-8，建议目标端使用兼容源端的字符集（例如，UTF-8、UTF-16 等），避免产生因字符集不兼容导致目标端出现乱码等问题。
 - OMS 从 Oracle 备库拉取增量数据时，如果您选择的迁移类型中包含增量同步和反向增量，而增量数据拉取出现异常，您可以尝试在主库执行 `ALTER SYSTEM SWITCH LOGFILE`，以便推动 OMS 正常工作。
 - 节点之间的时钟不同步，或者电脑终端和服务器之间的时钟不同步，均可能导致延迟时间（增量同步/反向增量）不准确。

  例如，如果时钟早于标准时间，可能导致延迟时间为负数。如果时钟晚于标准时间，可能导致延迟。
 - 迁移 Oracle 数据库的数据至 OceanBase 数据库 MySQL 租户时，禁止所有表进行导入、导出、Alter Table、FlashBack Table、分区分裂或合并等会导致 ROWID 变更的操作。
 - Oracle 数据库至 OceanBase 数据库 MySQL 租户的反向增量中，当 OceanBase 数据库 MySQL 租户为 V3.2.x 之前的版本，且具有全局唯一索引的多分区表时，如果您更新了表的分区键的值，可能导致数据迁移过程中丢失数据。
 - 如果 PK/UK（作为校验字段的情况下）中包含 INTERVAL 类型，您需要将该表的校验模式 `filter.verify.inmod.tables` 变更为 `in` 模式，否则校验结果不准确。
 - 如果 OceanBase 数据库 MySQL 租户的时间类型字段中，存在类似 update current_timestamp 的函数，会导致源端和目标端的数据不一致。
 - 请确认 OMS 对 FLOAT 或 DOUBLE 等列类型的迁移精度是否符合预期。如果目标端字段类型的精度小于源端字段类型的精度，则可能发生截断现象，导致源端和目标端的数据不一致。
 - 如果您变更目标端的唯一索引，需要重启增量同步组件，否则可能存在数据不一致的问题。
 - 如果数据迁移项目未启用正向切换，请删除目标端数据库对应的唯一索引和伪列。如果不删除唯一索引和伪列，会导致无法写入数据，以及往下游导入数据时，会重新生成伪列，导致与源端数据库的伪列发生冲突。

  如果数据迁移项目已启用正向切换，OMS 会根据数据迁移项目的类型，自动删除隐藏列和唯一索引。详情请参见 [数据迁移服务隐藏列机制说明](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-0000000002385977)。
 - 默认按照目标端参数 `lower_case_table_names = 1` 设置，并以小写方式创建目标端数据库对象。
 - 库表汇聚场景下：

     - 建议您使用导入对象或匹配规则的方式映射源端和目标端的关系。
     - 建议您自行在目标端创建表结构。如果使用 OMS 创建，请在结构迁移步骤跳过部分失败对象。
 - 如果源端和目标端的表结构不完全一致，可能会出现数据不一致的情况。目前已知场景如下：

     - 用户手动创建表结构时，因超出 OMS 的支持范围，可能产生隐式的转换问题导致源端和目标端列的类型不一致。
     - 目标端的数据长度小于源端的数据长度时，可能出现数据截断的情况，导致源端和目标端的数据不一致。
 - 如果创建数据迁移项目时，您仅配置了 **增量同步**，OMS 要求源端数据库的归档日志保存 48 小时以上。

  ​如果创建数据迁移项目时，您配置了 **全量迁移** + **增量同步**，OMS 要求源端数据库的归档日志至少保留 7 天以上。否则数据迁移可能因为无法获取增量日志导致数据迁移项目失败，甚至导致源端和目标端数据不一致。
 - 如果源端或目标端存在仅大小写不同的表对象，可能会因为源端或目标端大小写不敏感导致数据迁移的结果不符合预期。

## 检查和修改 Oracle 实例的系统配置

您需要进行下述操作：

1. 在源端 Oracle 数据库开启归档模式
 2. 在源端 Oracle 数据库开启补偿日志
 3. （可选）设置 Oracle 数据库的系统参数

### 在源端 Oracle 数据库开启归档模式

```sql
SELECT log_mode FROM v$database;

```

`log_mode` 字段需要是 `archivelog`。否则，您需要根据下述方法进行修改。

1. 执行下述命令，开启归档模式。

   ```sql
   SHUTDOWN IMMEDIATE;
   STARTUP MOUNT;
   ALTER DATABASE ARCHIVELOG;
   ALTER DATABASE OPEN;

   ```
 2. 执行下述命令，查看归档日志的路径和配额。

   检查 `reovery file` 的路径和配额，建议 `db_recovery_file_dest_size` 的配置值尽量大一些。另外，开启归档后，需要用 RMAN 等方法定期清理归档日志。

   ```sql
   SHOW PARAMETER db_recovery_file_dest;

   ```
 3. 根据业务需求，更改归档日志的配额。

   ```sql
   ALTER SYSTEM SET db_recovery_file_dest_size =50G SCOPE = BOTH;

   ```

### 在源端 Oracle 数据库开启补偿日志

LogMiner Reader 支持 Oracle 系统配置仅开启表级别的补偿日志。如果在迁移过程中，源端 Oracle 数据库新创建了表并需要迁移，则您需要在执行 DML 操作前，打开 PK、UK 的补偿日志。否则，OMS 会报日志不全的异常。

#### 注意

补偿日志需要在 Oracle 主库开启。

对于源端和目标端索引不一致、ETL 不符合预期和分区表迁移性能降低等问题，您需要添加以下补偿日志：

- 添加 DataBase 级别或 Table 级别的 `supplemental_log_data_pk` 和 `supplemental_log_data_ui`。
 - 添加具体列到补偿日志

     - 添加源端和目标端中所有 PK 和 UK 涉及的列。解决源端和目标端索引不一致的问题。
     - 如果有 ETL，请添加 ETL 的列。解决 ETL 不符合预期的问题。
     - 如果目标端是分区表，请添加分区列。解决无法进行分区裁剪，导致降低写入性能的问题。

  您可以执行下述语句，检查添加结果。

  ```sql
  SELECT log_group_type FROM all_log_groups WHERE OWNER = '<schema_name>' AND table_name = '<table_name>';

  ```

  查询结果中包含 ALL COLUMN LOGGING，则检查通过。如果未包含，请查看 `ALL_LOG_GROUP_COLUMNS` 表中，是否包含上述并集的所有列。

  添加具体列至补偿日志的方式，示例如下：

  ```sql
  ALTER TABLE <table_name> ADD SUPPLEMENTAL LOG GROUP <table_name_group> (c1, c2) ALWAYS;

  ```

下表为数据迁移项目在运行过程中，如果进行 DDL 操作，可能会遇到的风险及解决方式。

| 操作 | 风险 | 解决方式 |
| --- | --- | --- |
| CREATE TABLE（且该表需要同步） | 如果该表存在目标端是分区表，源和目标端的索引不一致，需要进行 ETL 等情况，可能影响数据迁移性能，导致 ETL 不符合预期。 | 必须开启 DataBase 级别的 PK、UK 补偿日志。 手动添加涉及的列至补偿日志。 |
| 增加、删除和修改 PK/UK/分区列，或修改 ETL 列 | 会不满足启动时要求添加补偿日志的规则，可能导致数据不一致或数据迁移性能降低的问题。 | 根据上述补偿日志的规则进行相应的添加。 |

LogMiner Reader 根据以下两种方式进行检查。如果检查到补偿日志未打开，则退出。

- DataBase 级别打开 `supplemental_log_data_pk` 和 `supplemental_log_data_ui`。

  执行下述命令，检查是否已打开补偿日志。如果查询结果均为 `YES`，表示已打开补偿日志。

  ```sql
  SELECT supplemental_log_data_pk, supplemental_log_data_ui FROM v$database;

  ```

  如果未打开，请执行下述操作：

     1. 执行下述语句，打开补偿日志。

       ```sql
       ALTER DATABASE ADD supplemental log DATA(PRIMARY KEY, UNIQUE) columns;

       ```
     2. 打开后，切换 2 次归档日志，并且启动项目前需要等待 5 分钟以上。如果是 Oracle RAC，多个实例交替切换。

       ```sql
       ALTER SYSTEM SWITCH LOGFILE;

       ```

       开启补偿日志后，需要切换 2 次归档日志的原因：

       Store 组件定位起始拉取文件时，会根据指定的时间戳回退 0~2 个归档文件。开启补偿后，为了不拉取开启补偿日志前的日志，您需要切换 2 次归档。否则 Store 将异常退出。

       如果是 Oracle RAC，需要多个实例交替切换的原因：

       Oracle RAC 的情况下，如果一个实例切换多次后，再切换另外的实例，而非交替切换，则定位起始拉取文件时，后切换的实例将可能定位至开启补偿日志前的日志。
 - Table 级别打开 `supplemental_log_data_pk` 和 `supplemental_log_data_ui`。

     1. 执行下述语句，确认 DataBase 级别的 `supplemental_log_data_min` 是否打开。

       ```sql
       SELECT supplemental_log_data_min FROM v$database;

       ```

       查询结果为 `YES` 或 `IMPLICIT`，表示已打开。
     2. 执行下述语句，确认待同步表的表级别补偿日志是否打开。

       ```

       每种补偿日志返回一行，结果中需要包含 `ALL COLUMN LOGGING`，或者 `PRIMARY KEY LOGGING` 和 `UNIQUE KEY LOGGING` 都包含。

       如果未打开表级别的补偿日志，请执行下述语句。

       ```sql
       ALTER TABLE table_name ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE) COLUMNS;

       ```
     3. 打开后，切换 2 次归档日志，并且启动项目前需要等待 5 分钟以上。如果是 Oracle RAC，多个实例交替切换。

       ```

### 设置 Oracle 数据库的系统参数（可选）

建议您设置 Oracle 数据库的系统参数 `_log_parallelism_max` 为 1，通常该系统参数默认为 2。

1. 查询 `_log_parallelism_max` 的值。您可以通过以下两种方式进行查询：

      - 方式一

       ```sql
       SELECT NAM.KSPPINM,VAL.KSPPSTVL,NAM.KSPPDESC FROM SYS.X$KSPPI NAM,SYS.X$KSPPSV VAL WHERE NAM.INDX= VAL.INDX AND NAM.KSPPINM LIKE '_%' AND UPPER(NAM.KSPPINM) LIKE '%LOG_PARALLEL%';

       ```
      - 方式二

       ```sql
       SELECT VALUE FROM v$parameter WHERE name = '_log_parallelism_max';

       ```
 2. 修改 `_log_parallelism_max` 的值。进行修改时，分为以下两种情况：

      - Oracle RAC 修改

       ```sql
       ALTER SYSTEM SET "_log_parallelism_max" = 1 SID = '*' SCOPE = spfile;

       ```
      - 非 Oracle RAC 修改

       ```sql
       ALTER SYSTEM SET "_log_parallelism_max" = 1 SCOPE = spfile;

       ```

   Oracle 数据库 10G 版本修改 `_log_parallelism_max` 参数时，如果报错 `write to SPFILE requested but no SPFILE specified at startup`，请执行下述操作：

   ```sql
   CREATE SPFILE FROM PFILE;
   SHUTDOWN IMMEDIATE;
   STARTUP;
   SHOW PARAMETER SPFILE;

   ```
 3. 修改系统参数 `_log_parallelism_max` 后，请重启实例，切换 2 次归档日志，并且启动项目前需要等待 5 分钟以上。

## 数据类型映射

| Oracle 数据库 | OceanBase 数据库 MySQL 租户 |
| --- | --- |
| CHAR(n) | CHAR(n) |
| CHAR(n CHAR) | VARCHAR(n) |
| CHAR(n BYTE) | CHAR(n) |
| NCHAR(n) | VARCHAR(n) |
| VARCHAR2 | VARCHAR |
| NVARCHAR2 | VARCHAR |
| NUMBER (p, s) | DECIMAL(p, s)/NUMERIC(p, s)    NUMBER 未指定 (p,s) 的情况下，默认转换为 (65,30) |
| LONG | LONGTEXT |
| RAW | VARBINARY |
| CLOB | LONGTEXT |
| NCLOB | LONGTEXT |
| BLOB | LONGBLOB |
| FLOAT | DOUBLE |
| BINARY_FLOAT | DOUBLE |
| BINARY_DOUBLE | DOUBLE/DOUBLE PRECISION |
| DATE | DATETIME |
| TIMESTAMP(n) | DATETIME(n) |
| TIMESTAMP WITH TIME ZONE | VARCHAR(50) |
| TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP |
| INTERVAL YEAR(p) TO MONTH | VARCHAR(50) |
| INTERVAL DAY(p) TO SECOND | VARCHAR(50) |
| BFILE | BLOB |
| LONG RAW | LONGBLOB |

## 操作步骤

1. 新建数据迁移项目。

      1. 登录 OMS 控制台。
      2. 在左侧导航栏，单击 **数据迁移**。
      3. 在 **数据迁移** 页面，单击右上角的 **新建迁移项目**。
 2. 在 **选择源和目标** 页面，配置各项参数。

   | 参数 | 描述 |
   | --- | --- |
   | 迁移项目名称 | 建议使用中文、数字和字母的组合。名称中不能包含空格，长度不能超过 64 个字符。 |
   | 标签 | 单击文本框，在下拉列表中选择目标标签。您也可以单击 **管理标签**，进行新建、修改和删除。详情请参见 [通过标签管理数据迁移项目](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-10000000000827536)。 |
   | 源端 | 如果您已创建 Oracle 数据源，请从下拉列表中进行选择。如果未创建，请单击下拉列表中的 **新建数据源**，在右侧对话框进行新建。参数详情请参见 [新建 Oracle 数据源](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-10000000000827523)。 |
   | 目标端 | 如果您已创建 OceanBase 数据库 MySQL 租户数据源，请从下拉列表中进行选择。如果未创建，请单击下拉列表中的 **新建数据源**，在右侧对话框进行新建。参数详情请参见 [新建 OceanBase 物理数据源](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-0000000001043160)。 |
 3. 单击 **下一步**，在 **选择迁移类型** 页面，配置各项参数。

   **迁移类型** 包括 **结构迁移**、**全量迁移**、**增量同步**、**全量校验** 和 **反向增量**。

   | 迁移类型 | 描述 |
   | --- | --- |
   | 结构迁移 | 结构迁移任务开始后，OMS 会迁移源库中的数据对象定义（表、索引、约束、注释和视图等）至目标端数据库中，并自动过滤临时表。结构迁移的使用限制如下：    - OceanBase 数据库 MySQL 租户的 NUMERIC 类型不能作为分区键。分区无主键表结构迁移时，如果 Oracle 数据库的分区列为 NUMBER 或 INT 类型，结构迁移时会转为 NUMERIC 类型，导致报错。   - 结构迁移时，Oracle 数据库的 Timestamp 类型（精度为 9）将转换为 OceanBase 数据库 MySQL 租户的的 Datetime 类型（精度为 6），请注意精度丢失问题。   - 结构迁移时，Oracle 数据库的 Binary_float 类型将转换为 OceanBase 数据库 MySQL 租户的 Double 类型，请注意反向增量可能存在精度丢失问题。 |
   | 全量迁移 | 全量迁移任务开始后，OMS 会迁移源库表的存量数据至目标端数据库对应的表中。如果选择 **全量迁移**，建议您在迁移数据前，使用 `GATHER_SCHEMA_STATS` 或 `GATHER_TABLE_STATS` 语句收集 Oracle 数据库的统计信息。 |
   | 增量同步 | 增量同步任务开始后，OMS 会同步源库发生变化的数据（新增、修改或删除）至目标端数据库对应的表中。   **增量同步** 支持的 **同步 DML** 包括 `Insert`、`Delete` 和 `Update`，您可以根据需求进行选择。    - 如果 Oracle 数据库待迁移表中的全部列均为 LOB 类型（BLOB/CLOB/NCLOB），则不支持 **增量同步**。   - Oracle 数据库 12C 及之后版本在新增或变更列时，表名和列名不得超过 30 个字节。       如果需要支持超过 30 个字节的表名和列名，请使用 sys 用户开启并检查 Oracle 数据库的 `ENABLE_GOLDENGATE_REPLICATION` 参数。同时，请设置 Store 组件的参数 `deliver2store.logminer.need_check_object_length=false`。          - 设置 `ENABLE_GOLDENGATE_REPLICATION` 的方式如下。             设置该参数时，Oracle 数据库需要具备 OGG License（无需安装 OGG）。如果是 RAC 环境，每个节点都需要设置。如果是拉取 ADG 备库的数据，您需要在 ADG 源库设置。             `ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=true SCOPE=BOTH;`         - 查询 `ENABLE_GOLDENGATE_REPLICATION` 的方式如下。             `SELECT K.KSPPINM,V.KSPPSTVL FROM SYS.X$KSPPI K,SYS.X$KSPPSV V WHERE K.INDX=V.INDX AND UPPER(K.KSPPINM) = 'ENABLE_GOLDENGATE_REPLICATION';` |
   | 全量校验 | 在全量迁移完成、增量数据同步至目标端并与源端基本追平后，OMS 会自动发起一轮针对源库配置的数据表和目标表的全量数据校验任务。    - 如果选择 **全量校验**，建议您在全量校验开始前，分别收集 Oracle 数据库和 OceanBase 数据库 MySQL 租户的统计信息。OceanBase 数据库 MySQL 租户的收集详情请参见 [手动收集统计信息](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357540)。   - 如果您选择了 **增量同步**，但 **同步 DML** 选项中未选择所有的 DML，则 OMS 不支持本场景下的全量数据校验。 |
   | 反向增量 | 反向增量任务开始后，可以实时回流业务切换后在目标端数据库产生的变更数据至源端数据库。以下情况均不支持选择 **反向增量**：    - 存在多表汇聚的情况。   - 存在 Schema 多到一映射的情况。 |
 4. 单击 **下一步**，在 **选择迁移对象** 页面，选择迁移对象和迁移范围。

   您可以通过 **指定对象** 和 **匹配规则** 两个入口选择迁移对象。

      - 选择 **指定对象**，在左侧选中需要迁移的对象，单击 **>**，将其添加至右侧列表中。您可以选择一个或多个库的表、视图作为迁移对象。

       #### 注意

            - 待迁移的表名和其中的列名不能包含中文字符。
            - 当数据库的库名或表名存在 "$$" 字符时，会影响数据迁移项目的创建。  

       迁移 Oracle 数据库的数据至 OceanBase 数据库 MySQL 租户时，OMS 支持通过文本导入对象、重命名对象名称、设置行过滤、查看列信息，以及移除单个或全部迁移对象。

       | 操作 | 步骤 |
       | --- | --- |
       | 导入对象 | 1. 在 **选择迁移范围** 区域的右侧列表中，单击右上角的 **导入对象**。     2. 在对话框中，单击 **确定**。          **注意：** 导入会覆盖之前的操作选择，请谨慎操作。     3. 在 **导入迁移对象** 对话框中，导入需要迁移的对象。           您可以通过导入 CSV 文件的方式进行库表重命名、设置行过滤条件等操作。详情请参见 [下载和导入迁移对象配置](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-10000000000827535)。     4. 单击 **检验合法性**。     5. 通过合法性的检验后，单击 **确定**。 |
       | 重命名 | 1. 在 **选择迁移范围** 区域的右侧列表中，鼠标悬停至目标对象。     2. 单击显示的 **重命名**。     3. 输入修改后的名称，单击 **确定**。 |
       | 设置 | OMS 支持 `WHERE` 条件实现行过滤，以及查看列信息。      1. 在 **选择迁移范围** 区域的右侧列表中，鼠标悬停至目标对象。     2. 单击显示的 **设置**。     3. 在 **设置** 对话框中，输入标准的 SQL 语句中的 `WHERE` 子句，来配置行过滤。其作用范围为 **全量迁移** + **增量同步**。          **注意：**              - 请对列名添加转义符（`）。例如，`col`。              - 只有满足 `WHERE` 条件的数据才会被同步至目标数据源，以实现数据的行过滤。     4. 单击 **确定**。           您也可以在 **查看列** 区域，查看迁移对象的列信息。 |
       | 移除/全部移除 | OMS 支持在数据映射时，对暂时选中到目标端的单个或多个对象进行移除操作。      - 移除单个迁移对象          在 **选择迁移范围** 区域的右侧列表中，鼠标悬停至目标对象，单击显示的 **移除**，即可移除该迁移对象。     - 移除全部迁移对象          在 **选择迁移范围** 区域的右侧列表中，单击右上角的 **全部移除**。在对话框中，单击 **确定**，即可移除全部迁移对象。 |

       当 Oracle 数据库作为源端进行行过滤时，如果针对的是非 PK 或 UK，请开启对应列的补偿日志，或开启 ALL 级别的补偿日志。

       开启对应列的补偿日志的方式如下：

       ```sql
       ALTER TABLE table_name ADD SUPPLEMENTAL LOG GROUP log_group_name (column1, column2, column3) ALWAYS;

       ```

       开启 ALL 级别的补偿日志的方式如下：

       ```sql
       --方式一：开启 DataBase 级别
       ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
       --方式二：开启 Table 级别
       ALTER TABLE table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

       ```
      - 选择 **匹配规则**，详情请参见 [配置迁移对象的匹配规则](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-0000000002384126)。
 5. 单击 **下一步**，在 **迁移选项** 页面，配置各项参数。

   | 参数 | 描述 |
   | --- | --- |
   | 全量迁移并发速度 | 包括 **平稳**、**正常** 和 **快速**。全量迁移的性能不同，全量迁移任务所需要的资源也不同。    您也可以通过修改具体 Checker 组件的配置，实现自定义并发参数。    **注意**：    在 **选择迁移类型** 页面选中 **全量迁移**，才支持设置该选项。 |
   | 全量校验并发速度 | 包括 **平稳**、**正常** 和 **快速**。不同档位对源端和目标端的资源消耗不同。   您也可以通过修改具体 Checker 组件的配置，实现自定义并发参数。 |
   | 增量记录保存时间 | OMS 中增量解析文件缓存的时长。配置的保存时间越长，OMS Store 组件需要消耗的磁盘空间越大。 |
   | 全量迁移是否允许目标表非空 | 全量迁移允许目标表非空时，全量校验采用的是 `in` 模式进行数据校验。    **注意**：   在 **选择迁移类型** 页面选中 **全量迁移**，才支持设置该选项。 |
   | 是否允许索引后置 | 您可以设置是否允许全量数据迁移完成后再创建索引，索引后置功能能够缩短全量迁移耗时。   **注意**：    - 在 **选择迁移类型** 页面同时选中 **结构迁移** 和 **全量迁移**，才支持设置该选项。   - 仅非唯一键索引支持后置创建。 |
 6. 单击 **预检查**，系统对数据迁移项目进行预检查。

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

      - 您可以排查并处理问题后，重新执行预检查，直至预检查成功。
      - 您也可以单击失败预检查项操作列中的 **跳过**，会弹出对话框提示您跳过本操作的具体影响，确认可以跳过后，请单击对话框中的 **确定**。
 7. 单击 **启动项目**。如果您暂时无需启动项目，请单击 **保存**，跳转至数据迁移项目的详情页面，您可以根据需要进行手动启动。

   OMS 支持在数据迁移项目运行过程中修改迁移对象，详情请参见 [查看和修改迁移对象](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-10000000000827531)。数据迁移项目启动后，会根据选择的迁移类型依次执行，详情请参见 [查看数据迁移项目的详情](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-0000000001043132) 中《查看迁移详情》模块的内容。

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