全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
数据传输服务DTS

从本地 Oracle 迁移到 RDS for MySQL

更新时间:2017-11-07 14:00:45

使用 数据传输 DTS 可以将本地的 Oracle 数据库中的数据迁移至 RDS for MySQL 实例。数据传输 DTS (以下简称 DTS)可以实现结构迁移、全量数据迁移以及增量数据迁移。通过三种迁移方式的结合,可以在保持源 Oracle 数据库实例正常对外提供服务的情况下,实现 Oracle 数据库的不停服迁移。

本小节简单介绍使用 DTS 进行 Oracle->RDS for MySQL 数据迁移的任务配置流程。

迁移步骤

对于 Oracle->RDS for MySQL 的迁移,支持结构迁移、全量数据迁移以及增量数据迁移。各迁移类型的限制如下:

  • 结构迁移
    DTS 会将迁移对象的结构定义迁移到目标实例。目前 DTS 支持结构迁移的对象包括:表。其他对象如视图、同义词、触发器、存储过程、存储函数、包、自定义类型等暂不支持。

  • 全量数据迁移
    DTS 会将源数据库迁移对象的存量数据全部迁移到目标 RDS for MySQL 实例。如果仅做全量数据迁移,不做增量数据迁移,迁移过程中,如果源 Oracle 数据库有数据更新的话,那么这部分数据增量变化不一定能够被迁移到目标 RDS for MySQL 中。所以,如果仅做全量数据迁移,不做增量数据迁移,为保证迁移数据一致性,在数据迁移过程中,源端的 Oracle 实例需停止写入。

  • 增量数据迁移

    增量迁移过程中,DTS 会轮询并捕获源 Oracle 实例由于数据变化产生的重做日志 redo log,然后将数据变化的增量实时同步到目标 RDS for MySQL 实例,通过增量数据迁移可以实现目标 RDS for MySQL 实例同源 Oracle 数据库实例的实时数据同步。

迁移权限要求

当使用 DTS 进行 Oracle->RDS for MySQL 迁移时,在不同迁移类型情况下,对源和目标数据库的迁移帐号权限要求如下:

迁移类型 结构迁移 全量迁移 增量数据迁移
本地 Oracle 实例 schema 的 owner schema 的 owner SYSDBA
目的 RDS for MySQL 实例 待迁入 db 的读写权限 待迁入 db 的读写权限 待迁入 db 的读写权限

迁移前置条件

  • Oracle 数据库实例的版本为 10g,11g,12c。
  • Oracle 开启 supplemental log,且要求 supplemental_log_data_pk,supplemental_log_data_ui 开启。
  • Oracle 实例要求开启 archive log 归档模式,保证归档日志能够被访问并有一定的保存周期。

数据类型映射关系

由于 Oracle 和 MySQL 的数据类型并不是一一对应的,所以 DTS 在进行结构迁移时,会根据两种数据库类型的数据类型定义,进行类型映射,下面是数据类型映射关系。

Oracle 数据类型 MySQL 数据类型 DTS 是否支持
varchar2(n [char/byte]) varchar(n) 支持
nvarchar2[(n)] national varchar[(n)] 支持
char[(n [byte/char])] char[(n)] 支持
nchar[(n)]] national char[(n)] 支持
number[(p[,s])] decimal[(p[,s])] 支持
float(p)] double 支持
long longtext 支持
date datetime 支持
binary_float decimal(65,8) 支持
binary_double double 支持
timestamp[(fractional_seconds_precision)] datetime[(fractional_seconds_precision)] 支持
timestamp[(fractional_seconds_precision)]with local time zone datetime[(fractional_seconds_precision)] 支持
timestamp[(fractional_seconds_precision)]with local time zone datetime[(fractional_seconds_precision)] 支持
clob longtext 支持
nclob longtext 支持
blob longblob 支持
raw varbinary(2000) 支持
long raw longblob 支持
bfile 不支持
interval year(year_precision) to mongth 不支持
interval day(day_precision) to second[(fractional_seconds_precision)] 不支持
  • 对于 char 类型,当 char(n) 的定义长度 n 超过 255 时,DTS 会自动将类型转换为 varchar(n)。
  • 由于 MySQL 本身不支持类似 Oracle 中的 bfile、interval year to month、interval day to second 这三种数据类型,所以 DTS 在进行结构迁移时,无法在 MySQL 中找到合适的数据类型进行映射,因此这三种类型不会进行转化。迁移时如果表中含有这三种类型,会导致结构迁移失败,用户可以在指定迁移对象的时候,对需要迁移的对象中这三种类型的列进行排除。
  • 由于 MySQL 的 timestamp 类型不包含时区,而 Oracle 的 timestamp with time zone 和 timestamp with local time zone 两种类型默认带有时区信息,所以 DTS 在迁移这两种类型的数据时,会将其转换成 UTC 时区后存入目标 RDS for MySQL 实例。

迁移步骤

下面详细介绍下使用 DTS 将本地 Oracle 数据库中的数据迁移到 RDS for MySQL 实例的任务配置流程。

创建RDS实例数据库

在数据迁移过程中,如果待迁移的数据库在目标 RDS for MySQL 实例中不存在,那么 DTS 自动会创建。但是对于如下两种情况,用户需要在配置迁移任务之前,手动创建数据库。

  1. 数据库名称不符合:RDS 定义规范(由小写字母、数字、下划线、中划线组成,字母开头,字母或数字结尾,最长 64 个字符)。
  2. 待迁移数据库,在源 Oracle 与目标 RDS for MySQL 实例中名称不同。

对于这两种情况,用户需要在配置迁移任务之前,先在 RDS 控制台完成数据库创建。具体参考 RDS 数据库创建流程 RDS 使用手册

创建迁移帐号

迁移任务配置,需要提供 Oracle 数据库及目标 RDS 实例的迁移账号。迁移账号所需权限详见上文的 迁移权限要求

如果您的源 Oracle 实例的迁移账号尚未创建,那么您可以参考 Oracle Grant 语法说明,创建满足要求的迁移账号。

RDS for MySQL 迁移账号的创建及授权操作详见RDS使用手册 RDS 使用手册

迁移任务配置

当上面的所有前置条件都配置完成后,就可以开始迁移任务配置。下面详细介绍下具体的迁移步骤。

  1. 进入数据传输 DTS 控制台,单击右上角的创建迁移任务,正式开始任务配置。
  2. 本地 Oracle 数据库实例及目标 RDS for MySQL 实例的连接信息配置。

    这个步骤主要配置迁移任务名称,Oracle 数据库实例连接信息及目标 RDS for MySQL 实例连接信息。其中:

    • 任务名称

      DTS 为每个任务自动生成一个任务名称,任务名称没有唯一性要求。您可以根据需要修改任务名称,建议为任务配置具有业务意义的名称,便于后续的任务识别。

    • 源实例信息

      • 实例类型:选择 有公网 IP 的自建数据库
      • 数据库类型: 选择 Oracle
      • 主机名或IP地址: 配置 Oracle 访问地址,这个地址必须为公网访问方式
      • 端口:Oracle 数据库实例的监听端口
      • SID:Oracle 数据库实例的 SID
      • 账号:Oracle 数据库实例的连接账号
      • 密码:上面指定的 Oracle 数据库实例的连接账号对应的密码
    • 目标实例信息

      • 实例类型:选择 RDS 实例
      • RDS 实例 ID: 配置迁移的目标 RDS for MySQL 实例的实例 ID。 DTS 支持经典网络和 VPC 网络的 RDS实例
      • 账号:RDS for MySQL 实例的连接账号
      • 密码:上面指定的 RDS for MySQL 实例连接账号对应的密码

      当配置完连接信息后,单击右下角 授权白名单并进入下一步 进行白名单授权。这个步骤 DTS 会将 DTS 服务器的 IP 地址添加到目标 RDS 实例的白名单中,避免因为 RDS 实例设置了白名单,导致 DTS 服务器连接不上 RDS for MySQL 实例导致迁移失败。

  3. 迁移对象及迁移类型配置。

    迁移类型包括:结构迁移、全量数据迁移、增量数据迁移。默认选择 结构迁移+全量数据迁移

    迁移对象,需要选择您要迁移的对象。迁移对象选择的粒度可以为:库、表、列三个粒度。
    默认情况下,对象迁移到 RDS for MySQL 实例后,对象名与源 Oracle 数据库中一致。如果您迁移的对象在源实例与目标实例上名称不同,那么需要使用 DTS 提供的对象名映射功能,详细使用方式可以参考 库表列映射

    当配置完迁移对象及迁移类型后,即进入任务启动前的预检查步骤。

  4. 任务预检查。

    在迁移任务正式启动之前,会先进行前置预检查,只有预检查通过后,才能成功启动迁移。

    如果预检查失败,那么可以点击具体检查项后的按钮,查看具体的失败详情,并根据失败原因修复后,重新进行预检查。

    预检查失败

  5. 启动迁移任务。

    当预检查通过后,我们可以启动迁移任务,任务启动后,可以到任务列表中查看任务具体的迁移状态及进度。

    当任务进入增量数据迁移阶段,任务不会自动停止,且一旦源 Oracle 数据库实例有增量写入,增量数据就会自动同步到目标 RDS for MySQL 实例。增量数据迁移是个动态同步的过程,建议在增量迁移达到无延迟状态时,在目标数据库上进行业务验证。如果验证成功,那么可以停掉迁移任务,将业务切换到目标数据库。

    至此,完成将本地 Oracle 数据库到 RDS for MySQL 实例的数据迁移任务配置。

本文导读目录