全部产品
数据传输服务DTS

Oracle到PPAS不停机数据迁移

更新时间:2017-06-07 13:26:11   分享:   

适用场景

使用数据传输DTS可以将本地的Oracle的数据迁移至RDS For PostgreSQL Plus Advanced Server。同时,DTS提供的增量数据迁移功能,可以实现Oracle在提供服务的过程中,进行数据迁移,当Oracle跟PPAS两边数据达到动态同步过程,将业务切换到PPAS,使得依赖Oracle的应用停机时间最短。

本小节简单介绍使用DTS进行Oracle到RDS For PostgreSQL Plus Advanced Server不停机数据迁移的任务配置流程。

迁移类型

Oracle到RDS For PPAS的迁移,支持结构迁移、全量数据迁移及增量数据迁移。各个迁移阶段的支持范围如下:

  • 结构迁移

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

  • 全量数据迁移

    DTS将源数据库迁移对象的存量数据迁移到目标实例。

    如果未选择增量数据迁移,那么Oracle数据库有数据写入的话,新增增量数据不一定能够被迁移到PPAS中。所以,如果要保证迁移数据一致性,那么尽量选择在业务低峰期进行停机迁移。

  • 增量数据迁移

    增量数据迁移会将迁移过程中,源Oracle实例的增量变更数据同步到目标PPAS实例,增量数据迁移可以实现Oracle实例在迁移过程中产生的增量数据被实时同步到目标库,最终Oracle同目标RDS PPAS实例进入动态数据同步的过程。

迁移限制

  • 迁移过程中,不支持DDL操作。
  • 不支持物化视图的迁移。
  • 结构迁移时,reverse index迁移到RDS For PPAS中,存储成普通索引。
  • 结构迁移时,位图索引迁移到RDS For PPAS,存储成普通索引。
  • 结构迁移时,分区索引迁移到RDS For PPAS,在每个分区上创建独立的索引。
  • 增量数据迁移只支持有主键,或有非空唯一索引的表。
  • 增量数据迁移不支持long类型。

迁移权限要求

当使用DTS进行Oracle到RDS For PPAS迁移时,不同迁移类型,对源及目标数据库的迁移帐号权限要求如下:

迁移类型 结构迁移 全量迁移 增量数据迁移
本地Oracle实例 schema的owner schema的owner SYSDBA
目的RDS for PPAS实例 schema的owner schema的owner schema的owner

迁移前置条件

  • Oracle版本为10g,11g,12c。
  • Oracle 开启supplement log,且要求 supplemental_log_data_pk,supplemental_log_data_ui 开启。
  • Oracle要求开启archive log。

数据类型映射关系

由于Oracle跟RDS For PPAS的数据类型不是一一对应的,所以数据传输服务在进行结构迁移时,会根据两种数据库类型的数据类型定义,进行类型映射,下表为数据传输服务定义的数据类型映射关系。

Oracle数据类型 PPAS数据类型 数据传输服务是否支持
varchar2(n [char/byte]) varchar2[(n)] 支持
nvarchar2[(n)] nvarchar2[(n)] 支持
char[(n [byte/char])] char[(n)] 支持
nchar[(n)]] nchar[(n)] 支持
number[(p[,s])] number[(p[,s])] 支持
float(p)] double precision 支持
long long 支持
date date 支持
binary_float real 支持
binary_double double precision 支持
timestamp[(fractional_seconds_precision)] timestamp[(fractional_seconds_precision)] 支持
timestamp[(fractional_seconds_precision)]with time zone timestamp[(fractional_seconds_precision)]with time zone 支持
timestamp[(fractional_seconds_precision)]with local time zone timestamp[(fractional_seconds_precision)]with time zone 支持
clob clob 支持
nclob nclob 支持
blob blob 支持
raw raw(size) 支持
long raw long raw 支持
bfile 不支持
interval year(year_precision) to month interval year to month 不支持
interval day(day_precision) to second[(fractional_seconds_precision)] interval day to second[(fractional_seconds_precision)] 不支持

由于RDS For PPAS不支持数据类型timestamp[(fractional_seconds_precision)]with local time zone,所以数据传输服务在迁移这种类型的数据时,会将其转换成UTC时区后,存入RDS For PPAS的数据类型timestamp[(fractional_seconds_precision)]with time zone中。

环境准备

创建迁移帐号

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

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

RDS For PPAS 迁移账号的创建及授权操作如下:

  1. 通过PostgreSQL客户端,在RDS For PPAS中创建迁移账号,语法如下所示:

    1. create user username IDENTIFIDE BY password;

    参数说明:

    • username:要创建的账号。
    • password:该账号的登录密码。
  2. 在RDS FOR PPAS中给迁移账号授权,语法如下所示:

    1. GRANT privileges ON tablename TO username;

    参数说明:

    • privileges:该账号的操作权限,如SELECT、INSERT、UPDATE等。如果要授权账号所有权限,则使用ALL。
    • table:表名。如果要授权该账号所有的表权限则使用通配符*。
    • username:要授权的账号名。

操作步骤

  1. 以目标RDS实例所属阿里云账号登录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实例连接账号对应的密码。

      oracle_ppas_步骤1

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

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

    • 迁移类型

      • 结构迁移
      • 全量数据迁移
      • 增量数据迁移

      说明:

      • 如果需要进行不停机迁移,那么需要选择:结构迁移+全量数据迁移+增量数据迁移
      • 如果只进行全量迁移,那么需要选择:结构迁移+全量数据迁移
    • 迁移对象

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

      对象选择

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

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

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

    预检查失败

    当修复完成后,可以在任务列表中,选择这个任务,重新启动预检查。

  2. 购买实例并启动任务。

    当预检查通过后即进入迁移实例购买清单确认界面。请根据业务压力选择具体的规格并同意产品服务条款后,启动迁移任务。

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

    增量数据迁移是个动态同步的过程,所以建议在增量迁移达到无延迟状态时,在目标数据库上进行业务验证,如果验证成功,那么可以停掉迁移任务,然后将业务切换到目标数据库。

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

附:预检查内容

DTS在启动迁移之前,会进行前置预检查,本小节简单介绍Oracle->RDS For PPAS的预检查内容:

预检查项 检查内容 备注
源库连接性检查 检查DTS服务同Oracle实例的连通性 (1) 填写信息是否有误?如果填写信息有误,请修改后重新预检查
(2) 检查Oracle是否开启监听端口
目的库连接性检查 检查DTS服务同目的RDS For PPAS实例的连通性 检查填写信息是否有误,如果有误请先修改后重新预检查
源库版本检查 检查Oracle实例的版本,DTS是否支持 DTS目前只支持10g,11g,12c三个版本
源库权限检查 检查Oracle实例访问账号的权限是否满足要求 如果权限不足,请参照上面的权限要求一节授权后,重新预检查
目的库权限检查 检查RDS For PPAS实例访问账号的权限是否满足要求 如果权限不足,请参照上面的权限要求一节授权后,重新预检查
同名对象存在性检查 检查待迁移对象在目标RDS For PPAS是否已经存在 如果检查失败,请将目标库中这些已经存在的对象删除后,重新进行预检查
源端同名对象存在性检查 检查待迁移对象中,要迁入目标同一个schema的对象是否同名 如果检查失败,可以参考 库表列映射 将重名对象进行重命名
源库日志模式检查 检查源库是否开启archive log 如果未开启,请启用后,重新预检查
约束完整性检查 检查待迁移对象依赖的父对象是否迁移 如果检查失败,那么可以修改迁移对象,同时迁移依赖的父对象后,重新预检查
DBLINK存在性检查 检查源库是否存在DBLINK 如果存在,那么需要修改迁移对象,不选择DBLINK
增量拓扑冲突检查 检查同一个迁移对象是否已经存在迁移链路 如果存在冲突链路,那么需要删除掉冲突链路后,重新预检查
字段类型检查 检查待迁移表的是否存在数据类型为long类型的字段 如果存在那么对应的表只能进行全量数据迁移,不能选择增量数据迁移
表是否存在主键或者唯一性非空索引检查 检查待迁移表是否包含主键或非空唯一键 如果存在那么对应的表只能进行全量数据迁移,不能选择增量数据迁移
补偿日志开启检查 检查是否开启supplemental_log 如果未开启,请启用后,重新预检查
本文导读目录
本文导读目录
以上内容是否对您有帮助?