Oracle数据库怎么不停机迁移到PPAS?

适用场景

使用数据传输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的ownerschema的ownerSYSDBA目的RDS for PPAS实例schema的ownerschema的ownerschema的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支持longlong支持datedate支持binary_floatreal支持binary_doubledouble precision支持timestamp[(fractional_seconds_precision)]timestamp[(fractional_seconds_precision)]支持timestamp[(fractional_seconds_precision)]with time zonetimestamp[(fractional_seconds_precision)]with time zone支持timestamp[(fractional_seconds_precision)]with local time zonetimestamp[(fractional_seconds_precision)]with time zone支持clobclob支持nclobnclob支持blobblob支持rawraw(size)支持long rawlong raw支持bfile—不支持interval year(year_precision) to monthinterval 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 迁移账号的创建及授权操作如下:

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

参数说明:username:要创建的账号。password:该账号的登录密码。create user username IDENTIFIDE BY password;在RDS FOR PPAS中给迁移账号授权,语法如下所示:

参数说明:privileges:该账号的操作权限,如SELECT、INSERT、UPDATE等。如果要授权账号所有权限,则使用ALL。table:表名。如果要授权该账号所有的表权限则使用通配符*。username:要授权的账号名。GRANT privileges ON tablename TO username;

操作步骤

以目标RDS实例所属阿里云账号登录DTS数据传输控制台,单击右上角的创建迁移任务,开始任务配置。设置实例连接信息。这个步骤主要配置 迁移任务名称,Oracle连接信息及目标RDS实例连接信息。其中:实例类型:选择 RDS实例。RDS实例ID: 配置迁移的目标RDS实例的实例ID。 DTS支持经典网络、VPC网络的RDS实例。账号:RDS实例的连接账号。密码:上面RDS实例连接账号对应的密码。实例类型:选择 有公网IP的自建数据库。数据库类型: 选择 Oracle。主机名或IP地址: 配置Oracle访问地址,这个地址必须为公网访问方式。端口:Oracle实例的监听端口。SID:Oracle实例的SID。数据库账号:Oracle实例的连接账号。数据库密码:上面Oracle连接账号对应的密码。任务名称DTS为每个任务自动生成一个任务名称,任务名称没有唯一性要求。您可以根据需要修改任务名称,建议为任务配置具有业务意义的名称,便于后续的任务识别。源实例信息目标实例信息Oracle数据库怎么不停机迁移到PPAS?当配置完连接信息后,单击右下角 授权白名单并进入下一步 进行白名单授权。这个步骤DTS会将DTS服务器的IP地址添加到目标RDS实例的白名单中,避免因为RDS实例设置了白名单,导致DTS服务器连接不上RDS实例导致迁移失败。迁移对象及迁移类型配置。结构迁移全量数据迁移增量数据迁移如果需要进行不停机迁移,那么需要选择:结构迁移+全量数据迁移+增量数据迁移。如果只进行全量迁移,那么需要选择:结构迁移+全量数据迁移。迁移类型说明:迁移对象迁移对象,需要选择您要迁移的对象。迁移对象选择的粒度可以为:库、表、列三个粒度。默认情况下,对象迁移到RDS For PPAS实例后,对象名跟本地Oracle实例一致。如果您迁移的对象在源实例跟目标实例上名称不同,那么需要使用DTS提供的对象名映射功能,详细使用方式可以参考库表列映射。Oracle数据库怎么不停机迁移到PPAS?

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

附:预检查内容

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

预检查项检查内容备注源库连接性检查检查DTS服务同Oracle实例的连通性(1) 填写信息是否有误?如果填写信息有误,请修改后重新预检查

目的库连接性检查检查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如果未开启,请启用后,重新预检查

文章转载自:http://yun.jinre.com/newsinfo/763547.html

上一篇:阿里云RDS for MySQL如何开通读写分离功能?
下一篇:怎么使用数据传输服务(DTS)将本地数据库迁移到 RDS for MySQL