全部产品
Search
文档中心

从本地Oracle迁移到RDS for MySQL

更新时间: 2019-06-07

使用数据传输DTS可以将本地的Oracle的数据迁移至RDS MySQL实例。DTS可以实现结构定义及全量数据的迁移,为保证迁移数据一致性,建议迁移过程中,本地的Oracle停止写入。

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

迁移步骤

对于Oracle->RDS For MySQL的迁移,目前还不支持不停服迁移。只能支持结构定义及全量数据的迁移。结构迁移及全量数据迁移的限制如下。

  • 结构迁移

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

  • 全量迁移

    DTS会将源数据库迁移对象在的数据全部迁移到目标实例。如果迁移过程中,本地Oracle库有数据写入的话,那么这些增量数据不一定能够被迁移到MySQL中。所以,为保证迁移数据一致性,在迁移过程中,Oracle实例需停止写入。

迁移权限要求

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

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

迁移流程

数据传输服务在进行Oracle->RDS For MySQL的数据迁移时,为了解决对象间的依赖,提高迁移成功率。结构对象及数据的迁移顺序如下:

  1. 结构对象迁移:表的迁移
  2. 全量数据迁移
  3. 结构对象迁移:外键迁移

当全量数据迁移完成后,任务列表中的迁移进度为: 结构迁移100%,全量迁移100%,但迁移状态为“迁移中”。此时迁移任务正在进行步骤(3)外键的迁移,请勿手动结束任务,否则会造成迁移数据不一致。

数据类型映射关系

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

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 不支持
long raw 不支持
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 [local] time zone带时区,所以DTS在迁移这两种类型的数据时,会将其转换成UTC时区后,存入MySQL。

迁移步骤

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

RDS实例数据库创建

在数据迁移过程中,如果待迁移的数据库在目标RDS实例中不存在,那么DTS自动会创建。但当数据库名称不符合:RDS定义规范(由小写字母、数字、下划线、中划线组成,字母开头,字母或数字结尾,最长64个字符)时,用户需要在配置迁移任务之前,手动创建数据库。

迁移帐号创建

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

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

RDS For MySQL 迁移账号的创建及授权操作详见 创建账号

迁移任务配置

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

1.功能入口

进入数据传输DTS控制台,点击右上角的创建迁移任务,正式开始任务配置。

2. 实例连接信息

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

  • 任务名称

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

  • 源实例信息

  • 实例类型:选择 有公网IP的自建数据库

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

  • 目标实例信息

  • 实例类型:选择 RDS实例

  • RDS实例ID: 配置迁移的目标RDS实例的实例ID。 DTS支持经典网 络、VPC网络的RDS实例
  • 账号:RDS实例的连接账号
  • 密码:上面RDS实例连接账号对应的密码

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

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

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

迁移对象,需要选择您要迁移的对象。迁移对象选择的粒度可以为:库、表、列三个粒度。
默认情况下,对象迁移到RDS实例后,对象名跟Oracle一致。如果您迁移的对象在源实例跟目标实例上名称不同,那么需要使用DTS提供的对象名映射功能,详细使用方式可以参考 库表列映射 一节。
当配置完迁移对象及迁移类型后,即进入任务启动前的预检查步骤。

4. 任务预检查

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

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

预检查失败

5. 启动迁移任务

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

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