

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

# 从 Amazon RDS for Oracle 迁移到 Amazon RDS for MySQL
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql"></a>

*Jitender Kumar、Srini Ramaswamy 和 Neha Sharma，Amazon Web Services*

## Summary
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-summary"></a>

此模式说明如何将 Amazon Relational Database Service（Amazon RDS）for Oracle 数据库实例迁移到 Amazon Web Services（AWS）上的 Amazon RDS for MySQL 数据库实例。此模式使用 AWS Database Migration Service（AWS DMS）和 AWS Schema Conversion Tool（AWS SCT）。 

此模式提供了处理存储过程迁移的最佳实践。其中还涵盖支持应用程序层的代码变更。

## 先决条件和限制
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ Amazon RDS for Oracle 源数据库
+ Amazon RDS for MySQL 目标数据库。源数据库和目标数据库应位于同一虚拟私有云（VPC）中。如果您使用多个 VPCs，或者您必须拥有所需的访问权限。
+ 允许在源数据库和目标数据库、AWS SCT、Application Server和 AWS DMS 之间建立连接的安全组。
+ 具有源数据库运行 AWS SCT 所需权限的用户账户。
+ 启用了补充日志记录，可在源数据库上运行 AWS DMS。

**限制**
+ 源和目标 Amazon RDS 数据库大小限制为 64 TB。有关 Amazon RDS 规格的信息，请参阅 [Amazon 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)。
+ Oracle 对于数据库对象不区分大小写，但 MySQL 则不然。AWS SCT 可以在创建对象时处理此问题。然而，要实现完全不区分大小写，仍需进行一些手动操作。
+ 此迁移不使用 MySQL 扩展来启用 Oracle 原生功能。AWS SCT 处理大部分转换，但需要进行一些工作来手动更改代码。
+ 应用程序中需要更改 Java Database Connectivity (JDBC) 驱动程序。

**产品版本**
+ Amazon RDS for Oracle 12.2.0.1 及更高版本。有关当前支持的 RDS for Oracle 版本，请参阅 [AWS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Concepts.database-versions.html)。
+ Amazon RDS for MySQL 8.0.15 及更高版本。有关当前支持的 RDS for MySQL 版本，请参阅 [AWS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Concepts.VersionMgmt.html)。
+ AWS DMS 版本 3.3.0 及更高版本。请参阅 AWS 文档，进一步了解 AWS DMS 支持的[源端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html)和[目标端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)。
+ AWS SCT 版本 1.0.628 及更高版本。 请参阅 AWS 文档中的 [AWS SCT 源端点和目标端点支持矩阵](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。

## 架构
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-architecture"></a>

**源技术堆栈**
+ Amazon RDS for Oracle。有关更多信息，请参阅[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。 

**目标技术堆栈**
+ Amazon RDS for MySQL。有关更多信息，请参阅[使用 MySQL 兼容版数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)。

**迁移架构**

下图中，AWS SCT 从 Amazon RDS for Oracle 源数据库复制和转换架构对象，并将这些对象发送至 Amazon RDS for MySQL 目标数据库。AWS DMS 会复制源数据库中的数据并将其发送至 Amazon RDS for MySQL 实例。

![\[AWS SCT、AWS DMS 及 Amazon RDS 部署在私有子网中。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/e1efa7c2-47c1-4677-80bc-6b19250fc0d6/images/b54a8442-9ab9-4074-b8f6-a08f87fa2f52.jpeg)


## 工具
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-tools"></a>
+ [AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储库迁移到 AWS 云，或者在云和本地设置的组合之间迁移。
+ [Amazon Relational Database Service（Amazon RDS）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)可帮助您在 AWS 云端设置、操作和扩展关系数据库。这种模式使用 [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 和 [Amazon RDS for MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html)。
+ [AWS Schema Conversion Tool（AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/Welcome.html)通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。

## 操作说明
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-epics"></a>

### 准备迁移
<a name="prepare-for-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库的版本和引擎。 |  | 数据库管理员 | 
|  确定目标服务器实例的硬件要求。 |  | 数据库管理员， SysAdmin | 
| 识别存储需求（存储类型和容量）。 |  | 数据库管理员， SysAdmin | 
| 选择适当的实例类型（容量、存储功能、网络功能）。 |  | 数据库管理员， SysAdmin | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员， SysAdmin  | 
| 选择应用程序迁移策略。 | 考虑割接活动是要完全停机还是部分停机。 | DBA、 SysAdmin、应用程序所有者 | 

### 配置基础设施
<a name="configure-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 VPC 和子网。 |  | SysAdmin | 
| 创建安全组和网络访问控制列表 (ACLs)。 |  | SysAdmin | 
| 配置和启动 Amazon RDS for Oracle 实例。 |  | 数据库管理员， SysAdmin | 
| 配置和启动 Amazon RDS for MySQL 实例。 |  | 数据库管理员， SysAdmin | 
| 准备一个测试用例来验证代码转换。 | 这将有助于对转换后的代码执行单元测试。 | 数据库管理员、开发人员 | 
| 配置 AWS DMS 实例。 |  |  | 
| 在 AWS DMS 中配置源和目标端点。 |  |  | 

### 迁移数据
<a name="migrate-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 通过 AWS SCT 生成目标数据库脚本。 | 检查 AWS SCT 转换代码的准确性。将需要一些手动操作。 | 数据库管理员、开发人员 | 
| 在 AWS SCT 中，选择不区分大小写设置。 | 在 AWS SCT 中选择项目设置、目标区分大小写、不区分大小写。 | 数据库管理员、开发人员 | 
| 在 AWS SCT 中选择不使用 Oracle 原生函数。 | 在 “项目设置” 中，选中 TO\$1 CHAR/TO\$1NUMBER/TO \$1DATE 的功能。 | 数据库管理员、开发人员 | 
| 对“sql%notfound”代码进行更改。 | 您可能需要手动转换代码。 |  | 
| 在存储过程中查询表和对象(使用小写查询)。 |  | 数据库管理员、开发人员 | 
| 完成所有更改后创建主脚本，然后将主脚本部署到目标数据库上。 |  | 数据库管理员、开发人员 | 
| 使用示例数据对存储过程和应用程序调用执行单元测试。 |  |  | 
| 清理单元测试期间所创建的数据。 |  | 数据库管理员、开发人员 | 
| 删除目标数据库上的外键约束。 | 需要执行此步骤来加载初始数据。如果您不想删除外键约束，则必须为特定于主表和辅助表的数据创建迁移任务。 | 数据库管理员、开发人员 | 
| 删除目标数据库的主键与唯一键。 | 此步骤可提高初始加载性能。 | 数据库管理员、开发人员 | 
| 在源数据库上启用补充日志记录。 |  | 数据库管理员 | 
| 在 AWS DMS 中为初始加载创建迁移任务，然后运行该任务。 | 选择该选项以迁移现有数据。 | 数据库管理员 | 
| 向目标数据库添加主键和外键。 | 初始加载后需要添加约束。 | 数据库管理员、开发人员 | 
| 创建用于持续复制的迁移任务。 | 持续复制使目标数据库与源数据库保持同步。 | 数据库管理员 | 

### 迁移应用程序
<a name="migrate-applications"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 Oracle 原生函数替换为 MySQL 原生函数。 |  | 应用程序所有者 | 
| 确保 SQL 查询中的数据库对象仅使用小写名称。 |  | DBA、 SysAdmin、应用程序所有者 | 

### 割接至目标数据库
<a name="cut-over-to-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭Application Server。 |  | 应用程序所有者 | 
| 验证源数据库和目标数据库是否同步。 |  | 数据库管理员、应用程序所有者 | 
| 停止 Amazon RDS for Oracle 数据库实例。 |  | 数据库管理员 | 
| 停止迁移任务。 | 完成上一步后，该进程将自动停止。 | 数据库管理员 | 
| 将 JDBC 连接从 Oracle 更改至 MySQL。 |  | 应用程序所有者，数据库管理员 | 
| 启动应用程序。 |  | DBA、 SysAdmin、应用程序所有者 | 

### 关闭项目
<a name="close-the-project"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看和验证项目文档。 |  | 数据库管理员， SysAdmin | 
| 收集与迁移时间、手动任务与工具任务的百分比、成本节约等相关的指标。 |  | 数据库管理员， SysAdmin | 
| 停止和删除 AWS DMS 实例。 |  | 数据库管理员 | 
| 移除源和目标数据库端点 |  | 数据库管理员 | 
| 移除迁移任务。 |  | 数据库管理员 | 
| 拍摄 Amazon RDS for Oracle 数据库实例的快照。 |  | 数据库管理员 | 
| 删除 Amazon RDS for Oracle 数据库实例。 |  | 数据库管理员 | 
| 关闭并删除您所用的任何其他临时 AWS 资源。 |  | 数据库管理员， SysAdmin | 
| 关闭项目并提供任何反馈。 |  | 数据库管理员 | 

## 相关的资源
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-resources"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/Welcome.html)
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)