---
title: "迁移 Oracle 数据库的数据至 OceanBase 数据库 Oracle 兼容模式 - OB Cloud 云数据库 master | OceanBase 文档中心"
description: 迁移 Oracle 数据库的数据至 OceanBase 数据库 Oracle 兼容模式 您可以新建从 Oracle 数据库迁移数据至 OceanBase 数据库 Oracle 兼容模式的数据迁移任务，您可以通过结构迁移、全量迁移和增量同步，无缝迁移源端数据库中的存量业务数据和增量数据至 OceanBase 数据库 O…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*qbZXRo_94ZEAAAAAAAAAAAAADiGDAQ/original) OB Cloud 云数据库

# 迁移 Oracle 数据库的数据至 OceanBase 数据库 Oracle 兼容模式

更新时间：2026-07-01 10:27:24

您可以新建从 Oracle 数据库迁移数据至 OceanBase 数据库 Oracle 兼容模式的数据迁移任务，您可以通过结构迁移、全量迁移和增量同步，无缝迁移源端数据库中的存量业务数据和增量数据至 OceanBase 数据库 Oracle 兼容模式。

#### 注意

如果数据迁移任务长期处于非活跃状态（任务状态为 **失败**、**已暂停** 或 **已完成**），受增量日志保留时长等影响，任务可能无法恢复。数据迁移将主动释放处于非活跃状态超过 7 天的任务，以回收相关资源，建议您为任务配置告警并及时处理任务相关异常。

## 前提条件

- 已在目标端 OceanBase 数据库 Oracle 兼容模式租户创建对应的 Schema。
 - Oracle 源实例必须开启 Archive Log，并且在数据迁移增量复制前已经切换过 LogFile。
 - Oracle 源实例必须已经安装并可正常使用 LogMiner 工具。

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

## 使用限制

- 仅项目角色为 **项目所有者**、**项目管理员** 或 **数据服务管理员** 的用户支持新建数据迁移任务。
 - **源端数据库的操作限制**

  **请勿在结构迁移和全量迁移阶段执行库或表结构变更的 DDL 操作，否则可能造成数据迁移任务中断。**
 - 目前数据迁移支持 Oracle 数据库 10G/11G/12C/18C/19C 版本，12C 及之后版本包含数据库容器（Container Database，CDB）和可插拔数据库（Pluggable Database，PDB）。同时支持 OceanBase 数据库 Oracle 兼容模式 V2.x、V3.x 和 V4.x。
 - 数据迁移仅支持迁移普通表和视图。
 - 数据迁移仅支持迁移库名、表名和列名为 ASCII 码且不包含特殊字符（包括换行、空格，以及 .|"'`()=;/&）的对象。
 - 目标端是数据库的情况下，数据迁移不支持目标端存在触发器（Trigger）。如果存在，可能导致数据迁移失败。
 - 数据迁移不支持表中全部列均为 LOB 类型（BLOB/CLOB/NCLOB）的增量数据迁移。
 - 数据源标识和用户账号等，在数据迁移系统内全局唯一。
 - Oracle 数据库的增量日志解析最大支持 5T/天。
 - 数据迁移不支持源端 Oracle 数据库执行某些 `UPDATE` 命令。以下示例为一个不支持的 `UPDATE` 命令。

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

  ```

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

## 注意事项

- **当需要进行 Oracle 数据库的增量同步时，Oracle 数据库单个归档文件的大小建议小于 2GB。**
 - **Oracle 数据库的归档文件保存 2 天以上，否则由于某个时间段归档量陡增等情况，准备恢复时没有了归档文件，将无法恢复。**
 - 如果源端 Oracle 数据库存在交换主键的 DML 语句，将导致数据迁移解析日志异常，迁移至目标端时存在数据丢失的问题。交换主键的 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 等），避免产生因字符集不兼容导致目标端出现乱码等问题。
 - 迁移 Oracle 数据库的无主键表至 OceanBase 数据库 Oracle 兼容模式租户时，禁止所有表进行导入、导出、Alter Table、FlashBack Table、分区分裂或合并等会导致 ROWID 变更的操作。
 - 节点之间的时钟不同步，或者电脑终端和服务器之间的时钟不同步，均可能导致增量同步延迟时间不准确。

  例如，如果时钟早于标准时间，可能导致延迟时间为负数。如果时钟晚于标准时间，可能导致延迟。
 - 由于中国曾经实行夏令时的历史原因，导致 Oracle 数据库至 OceanBase 数据库 Oracle 兼容模式租户的增量同步中，1986 年~1991 年的夏令时开始和结束的日期，以及 1988 年 4 月 10 日~ 4 月 17 日，`TIMESTAMP(6) WITH TIME ZONE` 类型，源端和目标端可能存在 1 小时的时间差。
 - 在未开启 DDL 同步的情况下，如果您变更目标端的唯一索引，需要重启数据迁移任务，否则可能存在数据不一致的问题。
 - 当源端和目标端的字符编码配置不同时，结构迁移会提供字段长度定义扩大的策略。例如字段长度 1.5 倍扩大，长度单位从 BYTE 转为 CHAR 等。
 - ​如果源端存在包含时区信息的数据类型（例如 TIMESTAMP WITH TIME ZONE），请您确保目标端数据库支持并存在源端对应的时区，否则将导致数据迁移过程中产生数据不一致的问题。
 - 库表汇聚场景下：

     - 建议您使用匹配规则的方式映射源端和目标端的关系。
     - 建议您自行在目标端创建表结构。如果使用数据迁移创建，请在结构迁移步骤跳过部分失败对象。
 - 请检查 Oracle 数据库回收站内的对象。当对象大于 100 时，容易造成内部表查询超时，请进行回收站的对象清理工作。

     - 检查回收站是否打开。

      ```sql
      SELECT Value FROM V$parameter WHERE Name = 'recyclebin';

      ```
     - 检查回收站内对象的数量。

      ```sql
      SELECT COUNT(*) FROM RECYCLEBIN;

      ```
 - 如果新建数据迁移任务时，您仅配置了 **增量同步**，数据迁移要求源端数据库的归档日志保存 48 小时以上。

  如果新建数据迁移任务时，您配置了 **全量迁移** + **增量同步**，数据迁移要求源端数据库的归档日志至少保留 7 天以上。否则数据迁移可能因为无法获取增量日志导致数据迁移任务失败，甚至导致源端和目标端数据不一致。
 - 源端为 Oracle 数据库的增量同步任务（通过 Kafka 获取增量数据除外），如果单个事务跨归档，LogMiner 在跨归档的事务中无法正确返回完整的数据信息，便可能存在丢失数据的问题。建议您配置全量数据校验和数据订正，以确保数据一致性。

## 数据类型映射

#### 注意

- CLOB 和 BLOB 类型的数据必须小于 48 MB。
 - 不支持迁移 ROWID、BFILE、XMLType、UROWID、UNDEFINED 和 UDT 类型的数据。
 - 不支持 LONG 或 LONG RAW 类型的表进行增量同步。

| Oracle 数据库 | OceanBase 数据库 Oracle 兼容模式租户 |
| --- | --- |
| CHAR(n CHAR) | CHAR(n CHAR) |
| CHAR(n BYTE) | CHAR(n BYTE) |
| NCHAR(n) | NCHAR(n) |
| VARCHAR2(n) | VARCHAR2(n) |
| NVARCHAR2(n) | NVARCHAR2(n) |
| NUMBER(n) | NUMBER(n) |
| NUMBER (p, s) | NUMBER(p,s) |
| RAW | RAW |
| CLOB | CLOB |
| NCLOB | NVARCHAR2    **说明**   OceanBase 数据库 Oracle 兼容模式租户中，NVARCHAR2 类型的字段不支持空值。如果源端存在空值，则以字符串 NULL 表示。 |
| BLOB | BLOB |
| REAL | FLOAT |
| FLOAT(n) | FLOAT |
| BINARY_FLOAT | BINARY_FLOAT |
| BINARY_DOUBLE | BINARY_DOUBLE |
| DATE | DATE |
| TIMESTAMP | TIMESTAMP |
| TIMESTAMP WITH TIME ZONE | TIMESTAMP WITH TIME ZONE |
| TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP WITH LOCAL TIME ZONE |
| INTERVAL YEAR(p) TO MONTH | INTERVAL YEAR(p) TO MONTH |
| INTERVAL DAY(p) TO SECOND | INTERVAL DAY(p) TO SECOND |
| LONG | CLOB    **注意**：该类型不支持增量同步。 |
| LONG RAW | BLOB    **注意**：该类型不支持增量同步。 |

## Oracle 表分区转换

迁移 Oracle 数据库时，数据迁移服务会对业务 SQL 用法进行适配转换。

#### 说明

本文的分区转换规则适用于所有分区类型。

| 原表定义 | 转换输出 |
| --- | --- |
| `CREATE TABLE T_RANGE_0 (`   `A INT,`   `B INT,`   `PRIMARY KEY (B)`   `)PARTITION BY RANGE(A)(`   `....`   `);` | `CREATE TABLE "T_RANGE_0" (`   `"A" NUMBER,`   `"B" NUMBER NOT NULL,`   `CONSTRAINT "T_RANGE_10_UK" UNIQUE ("B")`   `)PARTITION BY RANGE ("A")(`   `....`   `);` |
| `CREATE TABLE T_RANGE_10 (`   `"A" INT,`   `"B" INT,`   `"C" DATE,`   `"D" NUMBER GENERATED ALWAYS AS (TO_NUMBER(TO_CHAR("C",'dd'))) VIRTUAL,`   `CONSTRAINT "T_RANGE_10_PK" PRIMARY KEY (A)`   `)PARTITION BY RANGE(D)(`   `....`   `);` | `CREATE TABLE T_RANGE_10 (`   `"A" INT NOT NULL,`   `"B" INT,`   `"C" DATE,`   `"D" NUMBER GENERATED ALWAYS AS (TO_NUMBER(TO_CHAR("C",'dd'))) VIRTUAL,`   `CONSTRAINT "T_RANGE_10_PK" UNIQUE (A)`   `)PARTITION BY RANGE(D)(`   `....`   `);` |
| `CREATE TABLE T_RANGE_1 (`   `A INT,`   `B INT,`   `UNIQUE (B)`   `)PARTITION BY RANGE(A)(`   `partition P_MAX values less than (10)`   `);` | 支持原表定义 |
| `CREATE TABLE T_RANGE_2 (`   `A INT,`   `B INT NOT NULL,`   `UNIQUE (B)`   `)PARTITION BY RANGE(A)(`   `partition P_MAX values less than (10)`   `);` | 支持原表定义 |
| `CREATE TABLE T_RANGE_3 (`   `A INT,`   `B INT,`   `UNIQUE (A)`   `)PARTITION BY RANGE(A)(`   `....`   `);` | 支持原表定义 |
| `CREATE TABLE T_RANGE_4 (`   `A INT NOT NULL,`   `B INT,`   `UNIQUE (A)`   `)PARTITION BY RANGE(A)(`   `....`   `);` | `CREATE TABLE "T_RANGE_4" (`   `"A" NUMBER NOT NULL,`   `"B" NUMBER,`   `PRIMARY KEY ("A")`   `)PARTITION BY RANGE ("A")(`   `....`   `);` |
| `CREATE TABLE T_RANGE_5 (`   `A INT,`   `B INT,`   `UNIQUE (A, B)`   `)PARTITION BY RANGE(A)(`   `partition P_MAX values less than (10)`   `);` | 支持原表定义 |
| `CREATE TABLE T_RANGE_6 (`   `A INT NOT NULL,`   `B INT,`   `UNIQUE (A, B)`   `)PARTITION BY RANGE(A)(`   `partition P_MAX values less than (10)`   `);` | 支持原表定义 |
| `CREATE TABLE T_RANGE_7 (`   `A INT NOT NULL,`   `B INT NOT NULL,`   `UNIQUE (A, B)`   `)PARTITION BY RANGE(A)(`   `partition P_MAX values less than (10)`   `);` | `CREATE TABLE "T_RANGE_7" (`   `"A" NUMBER NOT NULL,`   `"B" NUMBER NOT NULL,`   `PRIMARY KEY ("A", "B")`   `)PARTITION BY RANGE ("A")(`   `....`   `);` |
| `CREATE TABLE T_RANGE_8 (`   `"A" INT,`   `"B" INT,`   `"C" INT NOT NULL,`   `UNIQUE (A),`   `UNIQUE (B),`   `UNIQUE (C)`   `)PARTITION BY RANGE(B)(`   `partition P_MAX values less than (10)`   `);` | 支持原表定义 |
| `CREATE TABLE T_RANGE_9 (`   `"A" INT,`   `"B" INT,`   `"C" INT NOT NULL,`   `UNIQUE(A),`   `UNIQUE(B),`   `UNIQUE (C)`   `)PARTITION BY RANGE(C)(`   `partition P_MAX values less than (10)`   `);` | `CREATE TABLE "T_RANGE_9" (`   `"A" NUMBER,`   `"B" NUMBER,`   `"C" NUMBER NOT NULL,`   `PRIMARY KEY ("C"),`   `UNIQUE ("A"),`   `UNIQUE ("B")`   `)PARTITION BY RANGE ("C")(`   `....`   `);` |

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

您需要进行下述操作：

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

   #### 说明

   选择 **实例类型** 为 **自建 Oracle** 时，您可以设置系统参数 `_log_parallelism_max`。

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

```sql
SELECT log_mode FROM v$database;

```

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

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

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

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

   检查 `recovery 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 的补偿日志。否则，数据迁移会报日志不全的异常。

#### 注意

补偿日志需要在 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;

       ```

       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 数据库时，建议您设置 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;

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

## 支持的源端和目标端实例类型

| 云厂商 | 源端 | 目标端 |
| --- | --- | --- |
| AWS | RDS Oracle | OceanBase Oracle Compatible（事务型） |
| AWS | 自建 Oracle | OceanBase Oracle Compatible（事务型） |
| 华为云 | 自建 Oracle | OceanBase Oracle Compatible（事务型） |
| 腾讯云 | 自建 Oracle | OceanBase Oracle Compatible（事务型） |
| 阿里云 | 自建 Oracle | OceanBase Oracle Compatible（事务型） |

## 操作步骤

1. 新建数据迁移任务。

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

      1. 登录 [OB Cloud 云数据库控制台](https://console-cn.oceanbase.com/)。
      2. 在左侧导航栏，单击 **数据服务** > **数据迁移**。
      3. 在 **数据迁移** 页面，单击 **数据迁移** 页签。
      4. 在 **数据迁移** 页签，单击右上角的 **新建迁移任务**。
 2. 在编辑任务名称文本框中，输入自定义的迁移任务名称。

   建议使用中文、数字和字母的组合。名称中不能包含空格，长度不能超过 64 个字符。
 3. 在 **配置源和目标端** 页面，配置各项参数。

      1. 在 **源端** 区域，配置各项参数。

        如果您需要引用已创建且保存的数据源，可以单击 **源端** 右侧的 **引用数据源**，从下拉列表中选择目标数据源。选择完成后，源端区域的各项配置会自动填充。如果您需要将当前配置保存为新数据源，请单击 **源端** 区域右上角的 **保存** 图标。

        您也可以在 **引用数据源** 下拉列表中单击 **管理数据源**，进入 **数据源** 页面查看、管理数据源。该页面将不同类型的数据源进行统一管理，详情请参见 [数据源](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000001048865) 模块的文档。

        | 参数 | 描述 |
        | --- | --- |
        | 云厂商 | 目前支持 **华为云**、**腾讯云** 和 **阿里云**。 |
        | 数据库类型 | 选择源端为 **Oracle**。 |
        | 实例类型 | 目前仅支持 **自建 Oracle**。 |
        | 地域 | 选择源端数据库所在地域。 |
        | 连接类型 | 包括 **终端节点** 和 **公网连接**。      - 如果您选择 **终端节点** 的连接方式，需要先将页面显示被授权的账号 ID 添加至您的终端节点服务的白名单中，以允许该账号的终端节点连接终端节点服务。详情请参见 [添加私网白名单](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000001048867)。     - 如果您选择 **公网连接** 的连接方式，需要先将页面显示的数据源 IP 地址添加至 Oracle 数据库实例的白名单中，以确保连通性。详情请参见 [添加公网白名单](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000001048868)。         #### 说明          您需要选择源端和目标端的地域后，页面才会显示需要添加至白名单的数据源 IP 地址。 |
        | 连接信息 | - 选择 **连接类型** 为 **终端节点** 时，请输入终端节点服务名称。     - 选择 **连接类型** 为 **公网连接** 时，请输入数据库宿主机的 IP 和端口号。 |
        | Service Name | Oracle 数据库的 Service 名称。 |
        | 数据库账号 | 用于数据迁移的 Oracle 数据库的用户名称。 |
        | 密码 | 数据库用户的密码。 |
      2. 在 **目标端** 区域，配置各项参数。

        如果您需要引用已创建且保存的数据源，可以单击 **目标端** 右侧的 **引用数据源**，从下拉列表中选择目标数据源。选择完成后，目标端区域的各项配置会自动填充。如果您需要将当前配置保存为新数据源，请单击 **目标端** 区域右上角的 **保存** 图标。

        | 参数 | 描述 |
        | --- | --- |
        | 云厂商 | 目前支持 **AWS**、**华为云**、**阿里云** 和 **腾讯云**。您可以选择和源端相同的云厂商，也可以跨云厂商进行数据迁移。   #### 说明    目前默认不开放跨云厂商数据迁移功能。如需使用该功能，请联系 OB Cloud 技术支持人员。 |
        | 数据库类型 | 目前目标端仅支持 **OceanBase Oracle Compatible**。 |
        | 实例类型 | 目前仅支持 **集群实例（事务型）**。 |
        | 地域 | 选择目标端数据库所在地域。 |
        | 实例 | OceanBase 数据库 Oracle 兼容模式租户所在实例的 ID 或名称。您可以在 **实例列表** 页面，查看目标实例的 ID 或名称。   #### 说明    云厂商为阿里云时，还支持选择跨账号授权的阿里云主账号实例，详情请参见[阿里云账号授权](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000001760342)。 |
        | 租户 | OceanBase 数据库 Oracle 兼容模式租户的 ID 或名称。您可以在 **实例列表** 页面，展开目标实例，查看该实例下目标租户的 ID 或名称。 |
        | 数据库账号 | 用于数据迁移的 OceanBase 数据库 Oracle 兼容模式租户的用户名称。 |
        | 密码 | 数据库用户的密码。 |
 4. 单击 **测试连接并进入下一步**。

   数据迁移首次接入终端节点时，如果测试连接失败，请根据弹出框的提示进行操作。

      - 选择 **云厂商** 为 **AWS** 时：

       如果您在创建终端节点服务时，参数 **需要接受以使用终端节点** 选择了 **需要接受**，则数据迁移首次接入私有连接时，会提示您进入 AWS 控制台对收到的终端节点连接请求进行 **接受终端节点连接请求** 操作。
      - 选择 **云厂商** 为 **华为云** 时：

       如果您创建终端节点服务时，开启了连接审批功能，则终端节点连接该终端节点服务需要进行审批。详情请参见 [管理终端节点服务的连接审批](https://support.huaweicloud.com/usermanual-vpcep/vpcep_03_0104.html)。
      - 选择 **云厂商** 为 **腾讯云** 时：

       如果您在创建终端节点服务时，设置了不接受自动连接，则需要终端节点服务手动执行接受连接。详情请参见 [管理终端节点连接](https://cloud.tencent.com/document/product/1451/57410)。
 5. 在 **选择类型和对象** 页面，配置各项参数。

      1. 在 **同步拓扑** 区域，选择 **单向同步**。

        数据迁移支持 **单向同步** 和 **双向同步**。本文为您介绍单向同步的操作，双向同步的详情请参见 [配置双向同步任务](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000002399052)。
      2. 在 **迁移类型** 区域，选择当前数据迁移任务的迁移类型。

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

        | 参数 | 描述 |
        | --- | --- |
        | 结构迁移 | 结构迁移需要自行定义字符集的映射关系，数据迁移只会将源库的数据（结构）复制一份至目标数据库，不会对源数据（结构）造成影响。 |
        | 全量迁移 | 全量迁移任务开始后，数据迁移服务会迁移源库表的存量数据至目标端数据库对应的表中。 |
        | 增量同步 | 增量同步任务开始后，数据迁移会同步源端数据库发生变化的数据（新增、修改或删除）至目标端数据库对应的表中。**增量同步** 包括 **DML 同步** 和 **DDL 同步**，您可以根据需求进行自定义配置。详情请参见 [自定义配置 DML/DDL](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000000700021)。 |
      3. 在 **选择迁移对象** 区域，配置选择迁移对象的方式。

        您可以通过 **指定对象** 和 **匹配规则** 两种方式选择迁移对象。

        ![migration112-zh](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oceanbase-cloud/migration112-zh.png)
      4. 在 **选择迁移范围** 区域，选择需要迁移的对象。

             - 选择 **指定对象** 时，数据迁移支持 **库表迁移** 和 **整库迁移**。库表迁移支持选择一个或多个库中的表、视图作为迁移对象，整库迁移支持选择整个数据库作为迁移对象。如果某个库选择了库表迁移，则该库不再支持整库迁移。如果某个库选择了整库迁移，则该库不再支持库表迁移。

        选择 **库表迁移** 或 **整库迁移** 方式后，在左侧选中需要迁移的对象，单击 **>**，将其添加至右侧列表中。

        数据迁移支持通过文本导入对象，并支持对目标端对象进行重命名、设置行过滤、查看列信息，以及移除单个或全部迁移对象等操作。

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

        #### 说明

        当您选择 **整库迁移** 时：

             - 右侧列表仅展示库名，不支持展示具体的对象。
             - 如果您选择了 **增量同步**-**DDL 同步** 迁移类型，则源端新增表支持同步至目标端。  

        | 操作 | 描述 |
        | --- | --- |
        | 导入对象 | 在选择区域的右侧列表中，单击右上角的 **导入对象**。详情请参见 [导入迁移对象](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000002399053)。 |
        | 重命名 | 数据迁移支持重命名迁移对象的名称，详情请参见 [数据库库表重命名](https://www.oceanbase.com/docs/common-oceanbase-cloud-0000000002416056)。 |
        | 行过滤 | 数据迁移支持 `WHERE` 条件实现行过滤，详情请参见 [SQL 条件过滤数据](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000000564065)。您还可以在 **查看列** 区域，查看迁移对象的列信息。 |
        | 移除/清除全部 | 数据迁移支持在数据映射时，对暂时选中至目标端的单个或多个对象进行移除操作。      - 移除单个迁移对象         在选择区域的右侧列表中，单击目标对象后的 **移除** 图标，即可移除该迁移对象。     - 移除全部迁移对象         在选择区域的右侧列表中，单击右上角的 **清除全部**。在对话框中，单击 **确定**，即可移除全部迁移对象。 |

             - 选择 **匹配规则**，详情请参见 [配置库到库的匹配规则](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000001760340)。
 6. 单击 **下一步**。在 **迁移选项** 页面，配置各项参数。

      - 结构迁移

       在 **选择类型和对象** 页面，选中 **结构迁移**，并且源端和目标端的字符集不一致时，才会显示下述参数。

       ![oms-domestic-104](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/oms/oceanbase-cloud/oms-domestic-104.png)

       源端和目标端的字符集不一致（例如，源端为 GBK，目标端为 UTF-8）时，可能会发生字段截断，数据不一致的情况。您可以通过配置 **字符类型长度放大倍数** 来增加字符类型字段长度。

       #### 注意

       扩展后的长度不能超过目标端最大限制。
      - 全量迁移

       在 **选择类型和对象** 页面，选中 **单向同步** > **全量迁移**，才会显示下述参数。

       | 参数 | 描述 |
       | --- | --- |
       | 读取并发配置 | 该参数用于配置全量迁移阶段从源端读取数据的并发数，最大限制为 512 并发数过高可能会造成源端压力过大，影响业务。 |
       | 写入并发配置 | 该参数用于配置全量迁移阶段往目标端写入数据的并发数，最大限制为 512。并发数过高可能会造成目标端压力过大，影响业务。 |
       | 是否限制全量迁移速率 | 您可以根据实际需求决定是否开启全量迁移速率限制。如果开启，请设置源端读取 RPS（全量迁移阶段每秒最多可以从源端读取行数的最大限制）、源端读取 BPS（全量迁移阶段每秒最多可以从源端读取流量的最大限制）、目标端写入 RPS（全量迁移阶段每秒最多可以往目标端写入行数的最大限制）和目标端写入 BPS（全量迁移阶段每秒最多可以往目标端写入流量的最大限制）。   #### 说明    此处设置的 RPS 和 BPS 仅作为限速限流能力，全量迁移实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。 |
       | 目标端表对象存在记录时处理策略 | 处理策略包括 **停止迁移** 和 **忽略**：      - 选择 **停止迁移**，当目标端表对象存在数据时，全量迁移会报错不允许迁移，请处理好目标端数据后再继续迁移。         #### 注意          如果出错后单击恢复，数据迁移将忽略该配置选项，继续迁移表数据，请谨慎操作。     - 选择 **忽略**，当目标端表对象存在数据时，如果原数据与写入数据冲突，数据迁移采用将冲突数据记录日志，保留原数据不变的策略进行数据写入。 |
       | 是否允许索引后置 | 索引后置功能能够缩短全量迁移耗时，您可以在此处设置是否允许全量数据迁移完成后再创建索引。选择索引后置的注意事项，请参见表格下方的说明。   #### 注意       - 在 **选择迁移类型** 页面同时选中 **结构迁移** 和 **全量迁移**，才支持设置该选项。     - 仅非唯一键索引支持后置创建。 |

       允许索引后置的情况下，建议您根据 OceanBase 数据库的硬件条件和当前业务流量情况，通过黑屏客户端工具调整以下业务租户参数。

       ```SQL
       // 文件内存缓冲区限制
       ALTER SYSTEM SET _temporary_file_io_area_size = '10' tenant = 'xxx';
       // OceanBase 数据库 V4.x 关闭限流
       ALTER SYSTEM SET sys_bkgd_net_percentage = 100;  

       ```
      - 增量同步

       在 **选择类型和对象** 页面，选中 **单向同步** > **增量同步**，才会显示下述参数。

       | 参数 | 描述 |
       | --- | --- |
       | 写入并发配置 | 该参数用于配置增量同步阶段往目标端写入数据的并发数，最大限制为 512。并发数过高可能会造成目标端压力过大，影响业务。 |
       | 是否限制增量迁移速率 | 您可以根据实际需求决定是否开启增量同步速率限制。如果开启，请设置目标端写入 RPS（增量同步阶段每秒最多可以同步至目标端的数据行数的最大值限制）和目标端写入 BPS（增量同步阶段每秒最多可以同步至目标端的流量的最大值限制）。   #### 说明    此处设置的 RPS 和 BPS 仅作为限速限流能力，增量同步实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。 |
       | 增量同步起始位点 | - 如果选择迁移类型时已选择 **全量迁移**，则不显示该参数。     - 如果选择迁移类型时未选择 **全量迁移**，但选择了 **增量同步**，请在此处指定迁移某个时间节点之后的数据，默认为当前系统时间。详情请参见 [设置增量同步位点](https://www.oceanbase.com/docs/common-oceanbase-cloud-0000000002416057)。 |
      - 高级选项

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

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

       目标端表对象存储类型包括 **默认**、**行存**、**列存** 和 **行列混存**，该配置用于确定结构迁移或增量同步时目标端表对象的存储类型。

       #### 说明

       **默认** 选项是根据目标端参数配置自适应其他选项，是结构迁移的表对象或增量 DDL 的新增表对象根据设置的存储类型写对应的结构。
 7. 单击 **下一步**，系统对数据迁移任务进行预检查。

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

      - 您可以排查并处理问题后，重新执行预检查，直至预检查成功。
      - 您也可以单击失败预检查项操作列中的 **跳过**，会弹出对话框提示您跳过本操作的具体影响，确认可以跳过后，请单击对话框中的 **确定**。
 8. 预检查成功后，单击 **购买**，前往 **购买数据迁移实例** 页面进行购买。

   购买成功后，即可启动数据迁移任务。购买详情请参见 [购买数据迁移实例](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000002399051)。如果您暂时无需购买数据迁移实例，请单击 **保存**，跳转至数据迁移任务的详情页面，您后续可以根据需要进行手动购买。

   您可以单击数据迁移详情页面右上角的 **配置校验任务**，对比源端数据库和目标端数据库之间的数据差异。详情请参见 [新建数据校验任务](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000004996032)。

   数据迁移服务支持在数据迁移任务运行过程中修改迁移对象，详情请参见 [查看和修改迁移对象](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000000941611)。数据迁移任务启动后，会根据选择的迁移类型依次执行，详情请参见 [查看数据迁移任务的详情](https://www.oceanbase.com/docs/common-oceanbase-cloud-0000000002418241) 中《查看迁移详情》模块的内容。

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