详细解答可以参考官方帮助文档
使用 数据传输服务 DTS 可以将本地的 Oracle 数据库中的数据迁移至 RDS for MySQL 实例。数据传输 DTS (以下简称 DTS)可以实现结构迁移、全量数据迁移以及增量数据迁移。通过三种迁移方式的结合,可以在保持源 Oracle 数据库实例正常对外提供服务的情况下,实现 Oracle 数据库的不停服迁移。
注:当前 DTS 已经可以支持将本地的 Oracle 数据库中的数据迁移至 RDS for MySQL 实例时,数据的反向回流,帮助用户在应用按模块切换过程中,将 RDS for MySQL 实例中产生的数据变化同步回本地的 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 和 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)] | — | 不支持 |
下面详细介绍下使用 DTS 将本地 Oracle 数据库中的数据迁移到 RDS for MySQL 实例的任务配置流程。
在数据迁移过程中,如果待迁移的数据库在目标 RDS for MySQL 实例中不存在,那么 DTS 会自动创建。但是对于如下两种情况,用户需要在配置迁移任务之前,手动创建数据库。
对于这两种情况,用户需要在配置迁移任务之前,先在 RDS 控制台完成数据库创建。具体参考 RDS 数据库创建流程 RDS 使用手册。
迁移任务配置,需要提供 Oracle 数据库及目标 RDS 实例的迁移账号。迁移账号所需权限详见上文的 迁移权限要求。
如果您的源 Oracle 实例的迁移账号尚未创建,那么您可以参考 Oracle Grant 语法说明,创建满足要求的迁移账号。
RDS for MySQL 迁移账号的创建及授权操作详见 RDS 使用手册。
当上面的所有前置条件都配置完成后,就可以开始迁移任务配置。下面详细介绍下具体的迁移步骤。
本地 Oracle 数据库实例及目标 RDS for MySQL 实例的连接信息配置。
这个步骤主要配置迁移任务名称,Oracle 数据库实例连接信息及目标 RDS for MySQL 实例连接信息。其中:
任务名称
DTS 为每个任务自动生成一个任务名称,任务名称没有唯一性要求。您可以根据需要修改任务名称,建议为任务配置具有业务意义的名称,便于后续的任务识别。
源实例信息
目标实例信息
当配置完连接信息后,单击右下角 授权白名单并进入下一步 进行白名单授权。这个步骤 DTS 会将 DTS 服务器的 IP 地址添加到目标 RDS for MySQL 实例的白名单中,避免因为 RDS 实例设置了白名单,导致 DTS 服务器连接不上 RDS for MySQL 实例导致迁移失败。
迁移对象及迁移类型配置。
迁移类型包括:结构迁移、全量数据迁移、增量数据迁移。默认选择 结构迁移+全量数据迁移。
迁移对象,需要选择您要迁移的对象。迁移对象选择的粒度可以为:库、表、列三个粒度。
默认情况下,对象迁移到 RDS for MySQL 实例后,对象名与源 Oracle 数据库中一致。如果您迁移的对象在源实例与目标实例上名称不同,那么需要使用 DTS 提供的对象名映射功能,详细使用方式可以参考 库表列映射。
当配置完迁移对象及迁移类型后,即进入任务启动前的预检查步骤。
任务预检查。
在迁移任务正式启动之前,会先进行前置预检查,只有预检查通过后,才能成功启动迁移。
如果预检查失败,那么可以点击具体检查项后的按钮,查看具体的失败详情,并根据失败原因修复后,重新进行预检查。
启动迁移任务。
当预检查通过后,我们可以启动迁移任务,任务启动后,可以到任务列表中查看任务具体的迁移状态及进度。
当任务进入增量数据迁移阶段,任务不会自动停止,且一旦源 Oracle 数据库实例有增量写入,增量数据就会自动同步到目标 RDS for MySQL 实例。增量数据迁移是个动态同步的过程,建议在增量迁移达到无延迟状态时,在目标数据库上进行业务验证。如果验证成功,那么可以停掉迁移任务,将业务切换到目标数据库。
至此,完成将本地 Oracle 数据库到 RDS for MySQL 实例的数据迁移任务配置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。