亚马逊AWS官方博客

使用DMT工具迁移北京区域的数据库

在前面的blog《将Oracle数据库迁移到AWS云的方案》中谈到了多种将Oracle数据库从数据中心迁移到AWS云中的方法。其中 使用DMS服务迁移的方法简单实用,也支持异构数据库的迁移,很多朋友都想使用这种方法完成迁移。但是在北京区域不支持DMS服务,如何实现类似的迁移工作呢?其实在北京区域支持使用Database Migration Tool(DMT)来迁移数据库,DMT工具是DMS服务的前身,它是安装在Windows上的一个软件,迁移前只需要获取DMT工具的AMI,然后简单的配置后,就可以进行数据迁移了。本文主要讨论如何使用DMT将Oracle迁移到Amazon RDS数据库,示例的场景如下图所示:

在建立客户本地数据中心与AWS连接的时候,考虑到安全性问题,我们建议您通过VPN或者企业专线来建立数据库之间的连接,您只需确保您本地数据库端口(例如Oracle端口1521)对外可访问。如果您的业务对安全性要求较高,需要传输的数据量较大,同时,要求以较快速度传输的时候,可以采用专线迁移,但是这种方法成本较高,您需要根据您的业务需求来选择是通过VPN还是企业专线迁移。

在介绍DMT数据库迁移之前,我们首先介绍一下DMT迁移工具支持的数据库类型以及对源和目标数据库的限制:DMT目前支持将Oracle、SQL Server、MySQL、SAP Sybase以及PostgreSQL作为源或目标数据库,您也可以将Amazon Redshift作为您的目标数据库。同时,DMT也支持异构数据库的迁移,例如将Oracle迁移到MySQL。

DMT工具为我们迁移数据库提供了巨大的便利,然而,它也有一些限制条件,下表主要介绍DMT支持的三种常用关系型数据库版本以及相关限制条件。如果您需要了解更多有关DMT迁移数据库信息,请参考DMT用户手册:

https://s3.cn-north-1.amazonaws.com.cn/rdmt/RDS+Migration+Tool+User+Guide.pdf

使用DMT迁移主要有下面几个步骤:

(1)获取DMT的AMI

(2)启动DMT的AMI

(3)登陆DMT服务器

(4)配置服务器

(5)访问DMT工具

(6)迁移数据

1.获取DMT的AMI

如果您有数据库数据需要导出或者导入到AWS 北京区域中,首先您需要获取DMT的AMI镜像,然后根据镜像启动EC2服务器。获取DMT的镜像有两种方式:

(1)和支持您当前AWS账号的商务人员联系,他能帮您在后台申请访问DMT AMI的权限。

(2)您也可以自己在Support Center 中开case。在AWS Console中访问Support Center的方式如下图所示:

2.启动DMT的AMI

当您有能访问DMT的AMI以后,登陆您的AWS账号,进入Services->EC2->AMI的界面,选择“Private images”列表,就可以看到有一个Amazon_RDS_Migration_Tool的记录,这就是最新的迁移工具,如下图所示:

选择DMT点击上方的“Lunch”按钮,启动一个已经安装好DMT工具的服务器。接下来您需要配置您实例的类型、大小、实例所在VPC以及安全组和密钥等信息。具体配置步骤请参考官方文档:http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/EC2_GetStarted.html

需要注意的是:

(1)在选择DMT服务器所在VPC的时候,尽量选择源或者目标数据库所在的VPC创建DMT服务器,这样可以加快迁移的速度。

(2)在配置安全组的时候,您的安全组应该允许RDP协议和https协议。由于DMT服务器是Windows Server服务器,因此您需要使用Windows远程桌面连接访问,此时需要RDP协议,source指定当前需要连接客户端的IP或者IP段。DMT工具可以通过浏览器来访问,因此需要设置https协议的安全组,如下图所示:

3.登陆DMT服务器

启动DMT服务器,并下载私钥后,就可以登陆DMT服务器了,如下图所示,当您的服务器状态显示为running,并且通过健康检查后,您的服务器就可以正常访问了。如下图所示:

选择您的DMT服务器,然后点击Connect,显示如下界面:

在此步骤中,您需要根据下载的私钥获取登陆Windows的密码。点击 get Password,显示如下图所示界面:

输入您前面下载的私钥的文件全部内容,点击 Decrypt Password后,您在界面上可以看到Administrator的密码,请记录下这个密码。下面就可以登陆服务器了。

本例中是使用MAC的Windows远程终端软件来访问DMT服务器,如果您使用Windows客户端,访问过程类似,输入远程DMT服务器的DNS名称,输入用户名和密码并连接。

连接上DMT终端后,您会看到Windows Server 2012的桌面如下图所示,桌面上有DMT工具。

连接到远程终端后,您可以根据需要修改访问Windows的密码,修改密码可以在控制面板中完成,界面如下:

4. 配置服务器

登陆到DMT服务器后,在界面上有Database Migration Tool Documentation的目录,进入目录并下载QuickStart Guide.下载过程中如果出现如下错误,请添加授信站点或者配置服务器解决错误。

下载Quick Start Guide和PDF阅读软件。

打开QuickStart Guide如下图所示,您可以按照您数据库的类型(Oracle, MySQL等)选择相应的驱动程序。

本例中由于迁移的是Oracle数据库,安装Oracle的驱动和客户端相对复杂,下面会详细解释如何安装Oracle驱动,其他驱动的安装请参考文档。点击Quick Start Guide中的Oracle Instant Client后面的链接后,出现如下界面(需要您有Oracle账号才能下载软件):

下载Instant Client Package-Basic: All files required to run OCI….的文件,也就是上图第一个黄色方框中的文件。

下载Instant Client Package-ODBC驱动,如上图第二个黄色方框。由于DMT安装在Windows Server上,因此有很多安全的限制,如果遇到禁止下载的错误,可以参照下图:

选择Internet,然后点击Customer level。

选择Downloads,然后Enable下载,就可以正常下载Oracle的软件了。

下载完成后,basic和odbc的包如上图所示。

创建 c:\oracle目录,将目录作为解压的目录,选中 basic-windows的文件,然后解压到oracle目录,如下图示:

选中odbc的压缩包,然后解压到c:\oracle

解压后的文件目录结构大致如下:

选中 odbc_install.exe并运行,如下图:

选择run,默认没有反应是正常状态 。

将变量 C:\oracle\instantclient_12_1添加到Path变量中,如下图所示:

增加TNS_ADMIN变量如下图所示:

在本例中,增加的变量TNS_ADMIN和变量Path的值相同。

5.访问DMT工具

先使用界面上的工具Stop Amazon RDS Migration Service停止DMT服务。这样避免刚才设置的环境变量没有应用DMT工具中。

在点击在桌面点击下面图标启动DMT服务。

启动后,如果见到下面的窗口:

表示启动成功。

选择图标就可以启动DMT的Web访问客户端,如下图所示:

见到Console的界面,表示DMT服务启动成功。DMT的console可以在服务器上访问,也可以在客户端访问,在外网访问只需要获取到DMT服务器的Public DNS,使用下面格式URL从外网访问DMT console。

https://your-public-dns/AmazonRDSMigrationConsole

访问console后,会弹出如下界面,输入访问windows的用户名和密码。

输入登陆系统的用户名和密码并登陆,显示如下界面:

在界面中使用Manage Database创建Source和Target数据库,创建Task就可以开始迁移您的数据库了。

6.使用DMT迁移数据

当您通过前面的步骤能够正确地访问DMT工具,说明配置基本成功,下面就可以通过DMT迁移您的数据库了。

Step1: 配置源数据库连接信息

点击上图中的Manage Databases->Add Database,输入数据库类型为Oracle,填好具体URL及数据库的Role信息,示例信息如下:

参数说明:

Name:给需要迁移的数据库定义一个名称,可以根据需要定义。

Description:给需要迁移的数据库一个详细的描述。

Role:需要迁移数据库的角色,如果是迁移中的源数据库,则选择SOURCE,如果是迁移中的目标数据库,则选择TARGET.

Connection String:对于传统Oracle数据库的格式为 ip:port/sid

User name:数据库连接的用户名

Password:数据库连接的密码

Step2: 配置目标RDS数据库连接信息

配置目标RDS数据库信息如下:

RDS的Connection String的格式为:

<database-name>.<rds-endpoint>:<port>/<sid>

Step 3:检查Source和Target数据库的归档模式和Supplemental Log

由于DMT工具可以捕捉数据库日志,将源数据库的变化复制到目标数据库,这种复制方式要求源和目标数据库都是归档的数据库,并且需要Supplemental Log的设置。

使用SQL PLUS连接源数据库,如果数据库处于非归档模式,则将数据库改为归档模式。

运行下面语句,修改Supplemental Log设置:

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

Database altered.

使用Oracle SQL Developer或者其他客户端工具连接RDS目标数据库,运行下面的语句:

exec rdsadmin.rdsadmin_util.alter_supplemental_logging(‘ADD’);

Step 4:创建Task

在主界面上点击“New Task”,如下图所示:

Task options: 定义复制的类型,Full Load表示将当前的表和数据拷贝到目标数据库。Apply Changes表示将当前时刻到停止复制前的日志变化同步到目标数据库。如果两个都选择,表示同步数据,并将捕捉到的数据库变化复制到目标数据库。

Step 5:定义Task

将Source和Target数据库的图标,拖入到左边的流程图中,如下图所示,我们定义了将OracleSourceDB复制到RDSDatabase中。

定义好流程后,点击Table Selection选择需要复制哪些表。如下图所示:

在此图中,我们复制的是TEST.T_USERS表。您也可以使用Patterns的方式匹配表名。

点击Task中的Run按钮,很快数据库就开始迁移了。

7. 错误诊断

(1)如果在测试数据库时出现oci.dll无法加载的错误,如下图所示:

这个错误一般说明你没有将instance client的路径配置到path变量中去。此时只需要配置好变量,然后停止并启动DMT服务就可以了。

(2)ORA-12170: TNS: Connect timeout occurred [122307] OCI error.

如果出现此错误,说明DMT工具连接数据库超时,此时请检查RDS数据库的Security Group是否开启了DMT服务器的1521端口的访问,或者检查数据库的防火墙等网络设置,确保DMT服务器能够正常访问Oracle服务器。

作者介绍:

蓝勇

AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广,在DR解决方案、数据仓库、RDS服务、企业应用、自动化运维等方面有着广泛的设计和实践经验。在加入AWS之前,在甲骨文中国担任资深售前工程师,负责售前方案咨询和架构设计,在数据库,中间件,大数据及企业应用方面有丰富经验。

杨婉洁

亚马逊AWS解决方案架构师实习生,喜欢编程,熟悉Java、C++、JSP、HTML以及关系型数据库。曾在学校和企业参与数据分析项目,熟悉各类数据分析的算法。热爱大数据、云计算。