

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

# 使用并使用和，将 Amazon RDS for Oracle 迁移到适用于 PostgreSQL AWS SCT 的 Amazon RDS AWS DMS AWS CLI CloudFormation
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation"></a>

*Pinesh Singal，Amazon Web Services*

## Summary
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-summary"></a>

此模式显示如何使用 () 将[适用于 Oracle 数据库实例的多 TB 的亚马逊关系数据库服务 (Amazon RDS) 迁移到适用于](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) Postgre [SQL 的 Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) 数据库实例。 AWS Command Line Interface AWS CLI这种方法可以最大限度减少停机时间，并且不需要登录 AWS 管理控制台。

这种模式有助于使用 () 和 AWS Schema Conversion Tool AWS Database Migration Service (AWS SCTAWS DMS) 控制台避免手动配置和单独迁移。该解决方案为多个数据库设置一次性配置，并在 AWS DMS 中使用 AWS SCT 和执行迁移。 AWS CLI

该模式用于 AWS SCT 将数据库架构对象从 Amazon RDS for Oracle 转换为适用于 PostgreSQL 的 Amazon RDS，然后 AWS DMS 使用来迁移数据。使用中的 Python 脚本 AWS CLI，您可以使用 CloudFormation 模板创建 AWS SCT 对象和 AWS DMS 任务。

## 先决条件和限制
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的.
+ 现有 Amazon RDS for Oracle DB 实例。
+ 现有 Amazon RDS for PostgreSQL 数据库实例。 
+ 用于运行脚本的亚马逊弹性计算云 (Amazon EC2) 实例或装有 Windows 或 Linux 操作系统的本地计算机。
+ 了解以下 AWS DMS 迁移任务类型：`full-load`、`cdc`、`full-load-and-cdc`。 有关更多信息，请参阅 AWS DMS 文档中的[创建任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)。 
+ 使用适用于 Oracle 和 PostgreSQL 数据库引擎的 Java Database Connectivity（JDBC）驱动程序安装并配置了AWS SCT。有关更多信息，请参阅 AWS SCT 文档 AWS SCT中的[安装和配置](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html#CHAP_Installing.Procedure)。 
+ 已安装 AWS SCT 文件夹中的`AWSSchemaConversionToolBatch.jar`文件已复制到您的工作目录。
+ `cli-sct-dms-cft.zip` 文件（附后），已下载并解压缩到您的工作目录中。
+ 最新的 AWS DMS 复制实例引擎版本。有关更多信息，请参阅 AWS 支持 文档和[AWS DMS 发行说明](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReleaseNotes.html)中的[如何创建 AWS DMS 复制实例](https://aws.amazon.com/premiumsupport/knowledge-center/create-aws-dms-replication-instance/)。 
+ AWS CLI 版本 2，安装并配置了您的访问密钥 ID、私有访问密钥以及运行脚本的 EC2 实例或操作系统的默认 AWS 区域 名称。有关更多信息，请参阅 AWS CLI 文档 AWS CLI中的[安装或更新到最新版本 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)和[配置设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。 
+ 熟悉 CloudFormation 模板。有关更多信息，请参阅 CloudFormation 文档中的[CloudFormation 工作原理](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-overview.html)。 
+ Python 版本 3，在运行脚本的 EC2 实例或操作系统上安装和配置。有关更多信息，请参阅 [Python 文档](https://docs.python.org/3/)。 

**限制**
+ 您的源 Amazon RDS for Oracle 数据库实例的最低要求是： 
  + 适用于企业版、标准版、标准一版和标准二版的 Oracle 版本 12c（12.1.0.2、12.2.0.1）、18c（18.0.0.0）和 19c（19.0.0.0）。
  + 尽管 Amazon RDS 支持 Oracle 18c (18.0.0.0)，但此版本已处于弃用状态，因为在该日期之后，甲骨文不再提供 18c 的补丁。 end-of-support有关更多信息，请参阅 Amazon RDS 文档中的[Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html#Oracle.Concepts.Deprecate.11204)。
  + 不再支持 Amazon RDS for Oracle 11g。
+ 您的目标 Amazon RDS for PostgreSQL 数据库实例的最低要求是： 
  + PostgreSQL 版本 9（9.5 和 9.6）、10.x、11.x、12.x 和 13.x

**产品版本**
+ Amazon RDS for Oracle 数据库实例版本 12.1.0.2 及更高版本
+ Amazon RDS for PostgreSQL 数据库实例版本 11.5 及更高版本
+ AWS CLI 第 2 版 
+ 最新版本的 AWS SCT
+ Python 3 的最新版本。

## 架构
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-architecture"></a>

**源技术堆栈**
+ Amazon RDS for Oracle

**目标技术堆栈**
+ Amazon RDS for PostgreSQL

**源架构和目标架构**

下图显示了使用和 Python 脚本将 Amazon RDS for Oracle 数据库实例迁移到 Amazon RDS for PostgreSQL 数据库实例 AWS DMS 的情况。

![使用 AWS DMS 和 Python 将 RDS for Oracle 数据库实例迁移至 RDS for PostgreSQL 数据库实例。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5e041494-2e64-4f09-b6ec-0e0cba3a4972/images/77022e13-46fb-4aa8-ab49-85b0ca4c317a.png)


 

图表显示了以下迁移工作流：

1. Python 脚本 AWS SCT 用于连接源数据库实例和目标数据库实例。

1. 用户从 Python 脚本 AWS SCT 开始，将 Oracle 代码转换为 PostgreSQL 代码，然后在目标数据库实例上运行该代码。

1. Python 脚本为源数据库实例和目标数据库实例创建 AWS DMS 复制任务。

1. 用户部署 Python 脚本来启动 AWS DMS 任务，然后在数据迁移完成后停止任务。

**自动化和扩展**

您可以通过在 Python 脚本中添加参数以及与安全相关的更改，自动执行此迁移。 

## 工具
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-tools"></a>
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您通过命令行外壳中的命令与 AWS 服务进行交互。
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置这些资源，并在各个区域的整个生命周期中 AWS 账户 对其进行管理。此模式使用 Python 脚本将 `.csv` 输入文件转换为 `.json` 输入文件。该`.json`文件用于 AWS CLI 命令创建 CloudFormation 堆栈，该堆栈使用 Amazon 资源名称 (ARNs)、迁移类型、任务设置和表映射创建多个 AWS DMS 复制任务。
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到云和本地设置的组合之间 AWS Cloud 或迁移。此模式 AWS DMS 用于使用在命令行上运行的 Python 脚本创建、启动和停止任务，以及创建 CloudFormation 模板。
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。此模式需要已安装 AWS SCT 目录中的`AWSSchemaConversionToolBatch.jar`文件。

**代码**

该 `cli-sct-dms-cft.zip` 文件（附后）包含此模式的完整源代码。

## 操作说明
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-epics"></a>

### 在中配置 AWS SCT 和创建数据库对象 AWS CLI
<a name="configure-awssct-and-create-database-objects-in-the-cli"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 AWS SCT 为从中运行 AWS CLI。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.html) | 数据库管理员 | 
| 运行 `run_aws_sct.py` Python 脚本。 | 使用以下命令运行 `run_aws_sct.py` Python 脚本：<br />`$ python run_aws_sct.py database_migration.txt`<br />Python 脚本将数据库对象从 Oracle 转换为 PostgreSQL，并创建 PostgreSQL 格式 SQL 文件。该脚本还会创建 PDF 文件 `Database migration assessment report`，为您提供数据库对象的详细建议和转换统计信息。 | 数据库管理员 | 
| 在 Amazon RDS for PostgreSQL 中创建对象。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.html) | 数据库管理员 | 

### 使用和配置 AWS CLI 和创建 AWS DMS 任务 CloudFormation
<a name="configure-and-create-dms-tasks-by-using-the-cli-and-cfn"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS DMS 复制实例。 | 登录 AWS 管理控制台，打开[AWS DMS 控制台](https://console.aws.amazon.com/dms/v2/)，然后创建根据您的要求配置的复制实例。<br />有关更多信息，请参阅 AWS DMS 文档中的[创建复制实例](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Creating.html)和文档中的[如何创建 AWS DMS 复制实例](https://aws.amazon.com/premiumsupport/knowledge-center/create-aws-dms-replication-instance/)。 AWS 支持  | 数据库管理员 | 
| 创建源端点。 | 在 AWS DMS 控制台上，选择**终端节点**，然后根据需要为 Oracle 数据库创建源端点。 额外的连接属性必须为带有 `-2` 值的 `numberDataTypeScale`。<br />有关更多信息，请参阅 AWS DMS 文档中的[创建源端点和目标端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)。 | 数据库管理员 | 
| 创建目标端点。 | 在 AWS DMS 控制台上，选择**终端节点**，然后根据需要为 PostgreSQL 数据库创建目标终端节点。 <br />有关更多信息，请参阅 AWS DMS 文档中的[创建源端点和目标端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)。 | DevOps 工程师 | 
| 将 AWS DMS 复制详细信息配置为从中运行 AWS CLI。 | 使用以下格式使用 AWS DMS 源终端节点 ARN、目标终端节点 ARN 和复制实例 ARN 在`dms-arn-list.txt`文件中配置源和目标终端节点以及复制详细信息：<pre>#sourceARN,targetARN,repARN<br />arn:aws:dms:us-east-1:123456789012:endpoint:EH7AINRUDZ5GOYIY6HVMXECMCQ<br />arn:aws:dms:us-east-1:123456789012:endpoint:HHJVUV57N7O3CQF4PJZKGIOYY5<br />arn:aws:dms:us-east-1:123456789012:rep:LL57N77AQQAHHJF4PJFHNEDZ5G</pre> | 数据库管理员 | 
| 运行 `dms-create-task.py` Python 脚本来创建 AWS DMS 任务。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.html) | 数据库管理员 | 
| 确认 AWS DMS 任务已准备就绪。 | 在 AWS DMS 控制台上，在 “`Ready`状态” 部分检查您的 AWS DMS 任务是否**处于状态**。 | 数据库管理员 | 

### 使用启动和停止 AWS DMS 任务 AWS CLI
<a name="start-and-stop-the-dms-tasks-by-using-the-cli"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 开始 AWS DMS 任务。 | 使用以下命令运行 `dms-start-task.py` Python 脚本：<pre>$ python dms-start-task.py start '<cdc-start-datetime>'</pre>开始日期和时间必须采用 `'DD-MON-YYYY'` 或 `'YYYY-MM-DDTHH:MI:SS'` 时间戳数据类型格式（例如 `'01-Dec-2019'` 或 `'2018-03-08T12:12:12'`）。<br />您可以在 AWS DMS 控制台 AWS DMS 任务页面的**表格统计**选项卡中查看**任务**状态。 | 数据库管理员 | 
| 验证数据。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.html)有关更多信息，请参阅 AWS DMS 文档中的[AWS DMS 数据验证](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)。 | 数据库管理员 | 
| 停止 AWS DMS 任务。 | 使用以下命令运行 Python 脚本：<pre>$ python dms-start-task.py stop</pre>AWS DMS 任务可能会以`failed`状态停止，具体取决于验证状态。有关更多信息，请参阅下一部分。 | 数据库管理员 | 

## 问题排查
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| AWS SCT 源和目标测试连接失败。 | 配置 JDBC 驱动程序版本与 VPC 安全组入站规则以接受传入流量。 | 
| 源或者目标端点测试运行失败。 | 检查端点设置和复制实例是否处于 `Available` 状态。检查端点连接状态是否为 `Successful`。 <br />有关更多信息，请参阅 AWS 支持 文档中的[如何排除 AWS DMS 终端节点连接故障](https://aws.amazon.com/premiumsupport/knowledge-center/dms-endpoint-connectivity-failures/)。 | 
| 满载运行失败。 | 检查源数据库和目标数据库是否具有匹配的数据类型与大小。 <br />有关更多信息，请参阅 AWS DMS 文档[AWS DMS中的迁移任务疑难解答](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Troubleshooting.html)。 | 
| 您遇到验证运行错误。 | 检查该表是否有主键，因为非主键表未经验证。<br />如果表有主键和错误，请检查源端点中的额外连接属性是否有 `numberDataTypeScale=-2`。<br />有关更多信息，请参阅 AWS DMS 文档中的[使用 Oracle 作为来源时的端点设置](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.ConnectionAttrib)和[疑难解答](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html#CHAP_Validating.Troubleshooting)。 AWS DMS[OracleSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_OracleSettings.html) | 

## 相关资源
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-resources"></a>
+ [安装和配置 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html#CHAP_Installing.Procedure)
+ [AWS DMS简介](https://www.youtube.com/watch?v=ouia1Sc5QGo)（视频）
+ [和的 CloudFormation 堆栈操作命令示例 AWS CLI PowerShell](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-cli.html)
+ [浏览的用户界面 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html)
+ [使用 Oracle 数据库作为来源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [使用连接到 Oracle 数据库 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)
+ [使用 PostgreSQL 数据库作为目标 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) 
+ [数据迁移的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)
+ [数据迁移的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)
+ [云形成](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/index.html)（AWS CLI 文档）
+ [创建堆栈（文档](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/create-stack.html)）AWS CLI  
+ [dms](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/dms/index.html)（AWS CLI 文档） 

## 附件
<a name="attachments-5e041494-2e64-4f09-b6ec-0e0cba3a4972"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/5e041494-2e64-4f09-b6ec-0e0cba3a4972/attachments/attachment.zip)