使用 AWS DMS 在 SSL 模式下将 Amazon RDS for Oracle 迁移到 Amazon RDS for PostgreSQL - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS DMS 在 SSL 模式下将 Amazon RDS for Oracle 迁移到 Amazon RDS for PostgreSQL

由 Pinesh Singal (AWS) 编写

环境:PoC 或试点

源:Amazon RDS for Oracle

目标:Amazon RDS PostgreSQL

R 类型:重构

工作负载:Oracle;开源

技术:迁移;安全性、标识性、合规性;数据库

Amazon Web Services:AWS DMS;Amazon RDS

总结

此模式提供了将 Amazon Relational Database Service (Amazon RDS)for Oracle 数据库实例迁移到 Amazon Web Services (AWS)云上的 Amazon RDS for PostgreSQL 数据库的指导。为了加密数据库之间的连接,该模式在 Amazon RDS 和 AWS Database Migration Service (AWS DMS)中使用证书颁发机构(CA)和 SSL 模式。

该模式描述了一种在线迁移策略,对于具有大量事务的多 TB Oracle 源数据库,停机时间很少或没有停机时间。为了数据安全,该模式在传输数据时使用 SSL。

此模式使用 AWS Schema Conversion Tool(AWS SCT)将 Amazon RDS for Oracle 数据库架构转换为 Amazon RDS for PostgreSQL 架构。然后,该模式使用 AWS DMS 将数据从 Amazon RDS for Oracle 数据库迁移到 Amazon RDS for PostgreSQL 数据库。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account 

  • 仅配置了 rds-ca-2019 的 Amazon RDS 数据库证书颁发机构 (CA)(rds-ca-2015 证书已于 2020 年 3 月 5 日过期)

  • AWS SCT

  • AWS DMS

  • pgAdmin

  • SQL 工具(例如 SQL Developer 或 SQL*Plus)

限制

  • Amazon RDS for Oracle 数据库 – 企业版和标准版两个版本的最低要求是 Oracle 版本 19c。

  • Amazon RDS for PostgreSQL 数据库 – 最低要求是 PostgreSQL 版本 12 及更高版本(适用于版本 9.x 及更高版本)。

产品版本

  • Amazon RDS for Oracle 数据库版本 12.1.0.2 实例

  • Amazon RDS for PostgreSQL 数据库版本 11.5 实例

架构

源技术堆栈

  • 版本 12.1.0.2.v18 的 Amazon RDS for Oracle 数据库实例。

目标技术堆栈

  • AWS DMS

  • 版本 11.5 的 Amazon RDS for PostgreSQL 数据库实例。

目标架构

下图显示了 Oracle(源)和 PostgreSQL(目标)数据库之间的数据迁移体系结构。该架构包括以下内容:

  • 虚拟私有云(VPC)

  • 可用区

  • 私有子网

  • Amazon RDS for Oracle 数据库

  • AWS DMS 复制实例

  • RDS for PostgreSQL 数据库

要加密源数据库和目标数据库的连接,必须在 Amazon RDS 和 AWS DMS 中启用 CA 和 SSL 模式。

在私有子网中,数据在 Amazon RDS for Oracle 和 AWS DMS 之间以及 AWS DMS 和 Amazon RDS for PostgreSQL 之间移动。

工具

Amazon Web Services

其他服务

  • pgAdmin 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面,可帮助您创建、维护和使用数据库对象。

操作说明

任务描述所需技能

创建 Oracle 数据库实例。

登录您的 Amazon Web Services account,打开 Amazon Web Services Management Console,然后导航到 Amazon RDS 控制台。在控制台上,选择 创建数据库,然后选择 Oracle

常规 AWS、数据库管理员

配置安全组。

配置入站和出站安全组。

常规 AWS

创建选项组。

在与 Amazon RDS for Oracle 数据库相同的 VPC 和安全组中创建选项组。对于 选项,选择 SSL。对于端口,选择 2484 (对于 SSL 连接)。

常规 AWS

配置选项设置。

使用以下设置:

  • SQLNET.CIPHER_SUITE: SSL_RSA_WITH_AES_256_CBC_SHA

  • SQLNET.SSL_VERSION: 1.2 or 1.0

常规 AWS

修改 Oracle 数据库实例的 RDS。

将 CA 证书设置为 rds-ca-2019。在选项组下,附加之前创建的选项组。

数据库管理员、常规 AWS

确认 RDS for Oracle 数据库实例可用。

确保 Amazon RDS for Oracle 数据库实例已启动并正在运行,并且数据库架构可访问。

要连接到 RDS for Oracle DB,请从命令行使用 sqlplus命令。

$ sqlplus orcl/****@myoracledb.cokmvis0v46q.us-east-1.rds.amazonaws.com:1521/ORCL SQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 15 18:11:07 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. Last Successful login time: Mon Dec 16 2019 23:17:31 +05:30 Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL>
数据库管理员

在 RDS for Oracle 数据库中创建对象和数据。

创建对象并在架构中插入数据。

数据库管理员
任务描述所需技能

创建 RDS for PostgreSQL 数据库。

在 Amazon RDS 控制台 创建数据库 页面上,选择 PostgreSQL 以创建 Amazon RDS for PostgreSQL 数据库实例。

数据库管理员、常规 AWS

配置安全组。

配置入站和出站安全组。

常规 AWS

创建参数组。

如果您使用的是 PostgreSQL 版本 11.x,请创建一个参数组来设置 SSL 参数。在 PostgreSQL 版本 12 中,默认情况下启用 SSL 参数组。

常规 AWS

编辑参数。

rds.force_ssl参数更改为 1(on)。

默认情况下,ssl 参数设置为 1(on)。通过将 rds.force_ssl参数设置为 1,可以强制所有连接仅通过 SSL 模式进行连接。

常规 AWS

修改 RDS for PostgreSQL 数据库实例。

将 CA 证书设置为 rds-ca-2019。附加默认参数组或之前创建的参数组,具体取决于您的 PostgreSQL 版本。

数据库管理员、常规 AWS

确认 RDS for PostgreSQL 数据库实例可用。

确保 Amazon RDS for PostgreSQL 数据库已启动并正在运行。

psql 命令通过命令行设置了 sslmode建立 SSL 连接。

一种选择是在参数组中设置 sslmode=1并使用 psql连接,而不在命令中包含 sslmode参数。

以下输出显示 SSL 连接已建立。

$ psql -h mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com -p 5432 "dbname=pgdb user=pguser" Password for user pguser: psql (11.3, server 11.5) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help. pgdb=>

第二个选项是在参数组中设置 sslmode=1,并在 psql命令中包含 sslmode参数。

以下输出显示 SSL 连接已建立。

$ psql -h mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com -p 5432 "dbname=pgdb user=pguser sslmode=require" Password for user pguser: psql (11.3, server 11.5) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help. pgdb=>
数据库管理员
任务描述所需技能

安装 AWS SCT。

安装最新版本的 AWS SCT 应用程序。

常规 AWS

使用 JDBC 驱动程序配置 AWS SCT。

下载适用于 Oracle(ojdbc8.jar)和 PostgreSQL(postgresql-42.2.5.jar)的 Java 数据库连接(JDBC)驱动程序。

要在 AWS SCT 中配置驱动程序,请依次选择 设置全局设置驱动程序

常规 AWS

创建 AWS SCT 项目。

使用 Oracle 作为源数据库引擎,使用 Amazon RDS for PostgreSQL 作为目标数据库引擎,创建 AWS SCT 项目和报告:

  1. 通过提供连接详细信息来测试与源 Oracle 数据库和目标 Amazon RDS for PostgreSQL 数据库的连接。

    对于源 Oracle 数据库,需要以下权限或特权:

    • CONNECT

    • SELECT_CATALOG_ROLE

    • SELECT ANY DICTIONARY

    • SELECT on SYS.USER$ TO <sct_user>

    有关更多信息,请参阅将 Oracle 数据库作为 AWS SCT 的源

    源连接和目标连接必须成功,AWS SCT 才能启动迁移报告。

  2. 报告后,输入要转换的架构,然后选择 完成

常规 AWS

验证数据库对象。

  1. 选择 加载架构

    AWS SCT 显示源对象和转换后的目标对象,包括有错误的对象。更新目标数据库上任何不正确的对象。

  2. 查看错误,然后使用手动干预将其清除。

  3. 清除所有错误后,再次选择 加载架构

  4. 选择 应用于数据库

  5. 连接到 pgAdmin 或任何支持 PostgreSQL 数据库连接的工具,并检查架构和对象。

数据库管理员、常规 AWS
任务描述所需技能

创建复制实例。

  1. 登录您的账户,打开 Amazon Web Services Management Console,然后导航到 AWS DMS 控制台。

  2. 使用 VPC、安全组、可用区和额外连接属性的有效设置创建复制实例。

常规 AWS

导入证书。

  1. 下载 rds-ca-2019-root.pem 证书。

  2. 证书 页上,将证书导入为 rds-ca-2019-root

常规 AWS

创建源端点。

  1. 通过选择 选择 RDS 数据库实例,然后选择您创建的 RDS for Oracle 数据库实例,为 Amazon RDS for Oracle 创建源端点。端点配置详细信息将自动填充。

  2. 选择 手动提供访问信息。对于端口,请确保输入 2484

  3. 安全套接字层(SSL)模式下,选择 verify-ca,,然后选择您之前创建的 CA 证书。

  4. 端点设置下,添加额外的连接属性 NumberDataTypeScale=-2以支持无大小的 NUMBER数据类型。

有关更多信息,请参阅使用 Oracle 数据库作为 AWS Database Migration Service 的源

常规 AWS

创建目标端点。

  1. 通过选择选择 RDS数据库实例,然后选择您的 RDS for PostgreSQL 数据库实例,为 Amazon RDS for PostgreSQL 创建目标端点。端点配置详细信息将自动填充。

  2. 选择 手动提供访问信息。对于端口,请确保输入 2484

有关更多信息,请参阅使用 PostgreSQL 数据库作为 AWS Database Migration Service 的目标

常规 AWS

测试端点。

  1. 测试源端点和目标端点以确认两者均成功且可用。

  2. 如果测试失败,请确保安全组入站规则有效。

常规 AWS

创建迁移任务。

要创建用于完全加载和更改数据捕获 (CDC) 或数据验证的迁移任务,请执行以下操作:

  1. 要创建数据库迁移任务,请选择复制实例、源数据库端点、目标数据库端点。将迁移类型指定为以下类型之一:

    • 迁移现有数据(满载)

    • 仅复制数据更改(CDC)

    • 迁移现有数据并复制持续更改(满载和 CDC)

  2. 表映射下,您可以配置 GUI 或 JSON 格式的选择规则和转换规则:

    • 选择规则下,选择架构,输入表名,选择要配置的操作(“包含”或“排除”);例如,Schema ORCL、Table name %、Action Include。

    • 转换规则下,执行下列操作之一:

      • 选择架构并选择操作(大小写、前缀、后缀);例如,Target Schema ORCL、Action Make 小写。

      • 选择架构,输入表名,然后选择操作(大小写、前缀、后缀);例如,Target Schema ORCL, Table %, Action Make 小写。

  3. 开启 Amazon CloudWatch 日志监控。

  4. 对于映射规则,请添加以下 JSON 代码。

    { "rules": [ { "rule-type": "transformation", "rule-id": "1", "rule-name": "1", "rule-target": "table", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "convert-lowercase", "value": null, "old-value": null }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "schema", "object-locator": { "schema-name": "ORCL", "table-name": "%" }, "rule-action": "convert-lowercase", "value": null, "old-value": null }, { "rule-type": "selection", "rule-id": "3", "rule-name": "3", "object-locator": { "schema-name": "ORCL", "table-name": "DEPT" }, "rule-action": "include", "filters": [] } ] }
常规 AWS

计划生产运行。

与应用程序所有者等利益相关者确认停机时间,以便在生产系统中运行 AWS DMS。

迁移主管

运行迁移任务。

  1. 启动状态为 “就绪” 的 AWS DMS 任务,并监控 Amazon CloudWatch 中的迁移任务日志中是否存在任何错误。

    如果选择迁移现有数据并复制正在进行的更改作为迁移类型,并且状态为加载完成正在进行的复制,则 CDC 数据迁移的完全加载已完成,并且验证正在进行中。

  2. 开始迁移后,可以在中获取其他 SSL 连接信息。 CloudWatch对于 Oracle, CloudWatch 显示以下连接字符串。

    2019-12-17T09:15:11 [SOURCE_UNLOAD ]I: Connecting to Oracle: Beginning session (oracle_endpoint_conn.c:834)

    PostgreSQL 连接字符串将类似于以下示例。

    2019-12-17T09:15:11 [TARGET_LOAD ]I: Going to connect to ODBC connection string: PROTOCOL=7.4-0;DRIVER={PostgreSQL};SERVER=mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com;DATABASE=pgdb;PORT=5432;sslmode=require;UID=pguser; (odbc_endpoint_imp.c:2218)

常规 AWS

验证数据。

查看源 Oracle 和目标 PostgreSQL 数据库中的迁移任务结果和数据:

  1. 连接到 pgAdmin 并使用架构 ORCL检查 PostgreSQL 数据库中的数据。

  2. 对于 CDC,通过在源 Oracle 数据库中插入或更新数据来检查正在进行的更改。

数据库管理员

停止迁移任务。

成功完成数据验证后,停止迁移任务。

常规 AWS
任务描述所需技能

删除 AWS DMS 任务。

  1. 在 AWS DMS 控制台上,导航到数据库迁移任务,然后停止任何正在进行或正在运行的 AWS DMS 任务。

  2. 选择一个或多个任务,选择操作,然后选择删除

常规 AWS

删除 AWS DMS 端点。

选择您创建的源端点和目标端点,选择操作,然后选择删除

常规 AWS

删除 AWS DMS 复制实例。

选择复制实例,选择操作,然后选择删除

常规 AWS

删除 PostgreSQL 数据库。

  1. 在 Amazon RDS 控制台中,选择数据库

  2. 选择您创建的 PostgreSQL 数据库实例,选择操作,然后选择删除

常规 AWS

删除 Oracle 数据库。

在 Amazon RDS 控制台上,选择 Oracle 数据库实例,选择操作,然后选择删除

常规 AWS

排查问题

问题解决方案

AWS SCT 源和目标测试连接失败。

配置 JDBC 驱动程序版本和 VPC 安全组入站规则以接受传入流量。

Oracle 源端点测试运行失败。

检查端点设置以及复制实例是否可用。

AWS DMS 任务满载运行失败。

检查源数据库和目标数据库的数据类型和大小是否匹配。

AWS DMS 验证迁移任务返回错误。

  1. 检查表是否有主键。没有主键的表不会被验证。

  2. 如果表具有主键但返回错误,请检查源端点中的额外连接属性。额外的连接属性必须具有 numberDataTypeScale=-2才能支持 NUMBER数据类型,并且不会根据表中可用的数据动态调整大小。

相关资源

数据库

SSL DB 连接

AWS SCT

AWS DMS

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip