

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

# 使用 Oracle SQL Developer 和 AWS SCT 以增量方式从 Amazon RDS for Oracle 迁移至 Amazon RDS for PostgreSQL
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct"></a>

*Pinesh Singal，Amazon Web Services*

## Summary
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-summary"></a>

许多迁移策略和方法都分为多个阶段，可能持续几周到几个月不等。在此期间，由于要迁移至 PostgreSQL 数据库实例的源 Oracle 数据库实例正在进行修补或升级，您可能会遇到延迟。为避免这种情况，我们建议您将剩余 Oracle 数据库代码增量地迁移到 PostgreSQL 数据库代码。

这种模式为在初始迁移后执行了大量事务且必须迁移至 PostgreSQL 数据库的多 TB 的 Oracle 数据库实例提供了一种不停机的增量迁移策略。您可以使用这种模式的 step-by-step方法将适用于 Oracle 数据库实例的亚马逊关系数据库服务 (Amazon RDS) 逐步迁移到适用于 PostgreSQL 的 Amazon RDS 数据库实例，而无需登录亚马逊网络服务 (AWS) 管理控制台。

该模式使用 [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) 查找源 Oracle 数据库中两个架构之间的区别。然后，您可以使用 AWS Schema Conversion Tool (AWS SCT) 将 Amazon RDS for Oracle 数据库架构对象转换为 Amazon RDS for PostgreSQL 数据库架构对象。然后，您可在 Windows 命令提示符中运行 Python 脚本，为源数据库对象的增量更改创建 AWS SCT 对象。

**注意**  
在迁移生产工作负载前，我们建议您在测试或非生产环境中针对此模式的方法运行概念验证（PoC）。

## 先决条件和限制
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 现有 Amazon RDS for Oracle DB 实例。 
+ 现有 Amazon RDS for PostgreSQL 数据库实例。
+ AWS SCT，安装并配置了适用于 Oracle 和 PostgreSQL 数据库引擎的 JDBC 驱动程序。有关更多信息，请参阅 AWS SCT 文档中的[安装 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html#CHAP_Installing.Procedure) 和[安装所需数据库驱动程序](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html#CHAP_Installing.JDBCDrivers)。 
+ Oracle SQL Developer，已安装并配置。有关更多信息，请参阅 [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) 文档。 
+ 将（附件）`incremental-migration-sct-sql.zip` 文件下载到本地计算机中。

**限制**
+ 您的源 Amazon RDS for Oracle DB 实例的最低要求是：
  + Oracle 10.2 和更高版本（对于版本 10.x）、11g（版本 11.2.0.3.v1 和更高版本）直至 12.2 以及 18c 版本（Enterprise、Standard、Standard One 和 Standard Two 版）。
+ 您的目标 Amazon RDS for PostgreSQL DB 实例的最低要求是： 
  + PostgreSQL 版本 9.4 和更高版本（对于版本 9.x）、10.x 和 11.x
+ 此模式使用 Oracle SQL Developer。如果您使用其他工具查找和导出架构差异，结果可能会有所不同。
+ Oracle SQL Developer 生成的 [SQL 脚本](https://docs.oracle.com/database/121/AEUTL/sql_rep.htm#AEUTL191)可能会引发转换错误，这意味着您需要执行手动迁移。
+ 如果 AWS SCT 源和目标测试连接失败，请确保为虚拟私有云（VPC）安全组配置 JDBC 驱动程序版本以及入站规则，以接受传入流量。

**产品版本**
+ Amazon RDS for Oracle 数据库实例版本 12.1.0.2（版本 10.2 和更高版本）
+ Amazon RDS for PostgreSQL 数据库实例版本 11.5（版本 9.4 和更高版本）
+ Oracle SQL 开发人员版本 19.1 及更高版本
+ AWS SCT 版本 1.0.632 及更高版本

## 架构
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-architecture"></a>

**源技术堆栈**
+ Amazon RDS for Oracle 数据库实例

**目标技术堆栈**
+ Amazon RDS for PostgreSQL 数据库实例

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

下图显示了将 Amazon RDS for Oracle 数据库实例迁移至 Amazon RDS for PostgreSQL 数据库实例的情况。

![从 Amazon RDS for Oracle 迁移至 Amazon RDS for PostgreSQL 的迁移工作流。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/c7eed517-e496-4e8e-a520-c1e43397419e/images/bfbbed5e-db13-4a22-99aa-1a17f00f5faf.png)


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

1. 打开 Oracle SQL Developer 并连接到源数据库和目标数据库。

1. 生成[差异报告](https://docs.oracle.com/cd/E93130_01/rules_palette/Content/Diff%20Reports/Detailed_Diff_Reports.htm)，然后为架构差异对象生成 SQL 脚本文件。有关差异报告的更多信息，请参阅 Oracle 文档中的[详细差异报告](https://docs.oracle.com/cd/E93130_01/rules_palette/Content/Diff%20Reports/Detailed_Diff_Reports.htm)。

1. 配置 AWS SCT 和运行 Python 代码。

1. SQL 脚本文件从 Oracle 转换至 PostgreSQL。

1. 在目标 PostgreSQL 数据库实例运行 SQL 脚本文件。 

**自动化和扩缩**

您可以通过在 Python 脚本中为单个程序的多个功能添加其他参数，和与安全相关的更改，来自动执行此迁移。

## 工具
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-tools"></a>
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) – AWS Schema Conversion Tool (AWS SCT) 将现有数据库架构从一个数据库引擎转换为另一个数据库引擎。
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) – Oracle SQL Developer 是一个集成式开发环境（IDE），可简化传统部署和基于云的部署中 Oracle 数据库的开发和管理。

**代码**

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

## 操作说明
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-epics"></a>

### 为源数据库架构差异创建 SQL 脚本文件
<a name="create-the-sql-scripts-file-for-the-source-database-schema-differences"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Oracle SQL Developer 中运行 Database Diff。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.html) | 数据库管理员 | 
| 生成 SQL 脚本文件。 | 选择**生成脚本**以在 SQL 文件中生成差异。 这将生成 SQL 脚本文件，AWS SCT 使用此文件将您的数据库从 Oracle 转换为 PostgreSQL。 | 数据库管理员 | 

### s使用 Python 脚本在 AWS SCT 中创建目标数据库对象
<a name="use-the-python-script-to-create-the-target-db-objects-in-aws-sct"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 通过 Windows 命令提示符配置 AWS SCT。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.html)<pre>#source_vendor,source_hostname,source_dbname,source_user,source_pwd,source_schema,source_port,source_sid,target_vendor,target_hostname,target_user,target_pwd,target_dbname,target_port<br /><br />ORACLE,myoracledb.cokmvis0v46q.us-east-1.rds.amazonaws.com,ORCL,orcl,orcl1234,orcl,1521,ORCL,POSTGRESQL,mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com,pguser,pgpassword,pgdb,5432</pre>4. 根据要求修改 AWS SCT 配置参数，然后将 SQL 脚本文件复制到工作目录的 `input` 子目录中。 | 数据库管理员 | 
| 运行 Python 脚本。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.html) | 数据库管理员 | 
|  在 Amazon RDS for PostgreSQL 中创建对象 | 运行 SQL 文件，并在您的 Amazon RDS for PostgreSQL DB 实例中创建对象。 | 数据库管理员 | 

## 相关的资源
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-resources"></a>
+ [Amazon RDS 上的 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS 上的 PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)
+ [使用 AWS SCT 用户界面](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html) 
+ [将 Oracle 作为 AWS SCT 的源](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)

## 附件
<a name="attachments-c7eed517-e496-4e8e-a520-c1e43397419e"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/c7eed517-e496-4e8e-a520-c1e43397419e/attachments/attachment.zip)