

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

# 使用 Oracle 数据泵将本地 Oracle 数据库迁移到亚马逊 EC2
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump"></a>

*Navakanth Talluri，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-summary"></a>

迁移数据库时，必须考虑源数据库和目标数据库引擎与版本、迁移工具和服务以及可接受的停机时间等因素。如果您要将本地 Oracle 数据库迁移到亚马逊弹性计算云 (Amazon EC2)，则可以使用 Oracle 工具，例如 Oracle 数据泵和 Oracle Recovery Manager (RMAN)。有关策略的更多信息，请参阅[将 Oracle 数据库迁移至 AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)。

Oracle Data Pump 可帮助您提取数据库的逻辑、一致性备份并将其恢复到目标 EC2 实例。此模式描述了如何使用 Oracle Data Pump 和`NETWORK_LINK`参数将本地 Oracle 数据库迁移到 EC2 实例，同时最大限度地减少停机时间。`NETWORK_LINK` 参数通过数据库链接开始导入。目标 EC2 实例上的 Oracle Data Pump Import (impdp) 客户端连接到源数据库，从中检索数据，然后将数据直接写入目标实例上的数据库。此解决方案中没有使用备份或*转储*文件。

## 先决条件和限制
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 本地 Oracle 数据库可以：
  + 不是 Oracle Real Application Clusters (RAC) 数据库
  + 不是 Oracle Automatic Storage Management (Oracle ASM) 数据库
  + 处于读写模式。
+ 您已在本地数据中心和 AWS 间创建了 AWS Direct Connect 链接。有关更多信息，请参阅[创建连接](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-connection.html)（Direct Connect 文档）。

**产品版本**
+ Oracle Database 10g 版本 1 (10.1)和以上版本

## 架构
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-architecture"></a>

**源技术堆栈**
+ 本地数据中心中的独立（非 RAC 和非 ASM）Oracle 数据库服务器

**目标技术堆栈**
+ 在亚马逊上运行的 Oracle 数据库 EC2

**目标架构**

AWS Well-Architected Framework 的[可靠性支柱](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/welcome.html)建议创建数据备份，以帮助提供高可用性和弹性。有关更多信息，请参阅 *AWS 上运行 Oracle 数据库的最佳实践*中的[高可用性架构](https://docs.aws.amazon.com/whitepapers/latest/oracle-database-aws-best-practices/architecting-for-high-availability.html#amazon-ec2)。这种模式使用 Oracle Active Data Guard 在 EC2 实例上设置主数据库和备用数据库。为了获得高可用性， EC2 实例应位于不同的可用区。但是，可用区可位于同一 AWS 区域或其他 AWS 区域。

Active Data Guard 提供对物理备用数据库的只读访问权限，并从主数据库持续应用重做更改。根据您的恢复点目标（RPO）和恢复时间目标（RTO），您可在同步重做传输选项和异步重做传输选项之间进行选择。

下图显示了主实例和备用 EC2 实例位于不同的 AWS 区域时的目标架构。

![\[应用程序连接到主 EC2 实例上的新数据库\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/bdd49395-2f99-43e2-ad1d-a1d09d90fb58/images/37fcd4dc-5516-416b-a280-0c5f002880de.png)


**数据迁移架构**

设置完目标架构后，您可以使用 Oracle Data Pump 将本地数据和架构迁移到主 EC2 实例。在割接期间，应用程序无法访问本地数据库或目标数据库。您可以关闭这些应用程序，直到它们可以连接到主 EC2 实例上的新目标数据库。

下图展示了数据迁移过程中的架构。在此示例架构中，主实例和备用 EC2 实例位于不同的 AWS 区域。

![\[源数据库连接至目标数据库。应用程序已与源和目标断开连接 DBs\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/bdd49395-2f99-43e2-ad1d-a1d09d90fb58/images/c58b669b-b11f-4d78-8911-c07b81b7c6a0.png)


## 工具
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-tools"></a>

**Amazon Web Services**
+ [AWS Direct Connect](https://aws.amazon.com/directconnect/) 通过标准的以太网光纤电缆将内部网络链接到 Direct Connect 位置。通过此连接，您可以直接创建连接到公有 Amazon Web Services 的虚拟接口，同时绕过网络路径中的互联网服务提供商。
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。

**其他工具和服务**
+ [Oracle Active Data Guard](https://docs.oracle.com/en/database/oracle/oracle-database/21/sbydb/introduction-to-oracle-data-guard-concepts.html#GUID-5E73667D-4A56-445E-911F-1E99092DD8D7) 可帮助您创建、维护、管理和监控备用数据库。
+ [Oracle 数据泵](https://www.oracle.com/technetwork/documentation/data-pump-overview-084963.html)可帮助您将数据和元数据从一个数据库高速移动至另一个数据库。

## 最佳实践
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-best-practices"></a>
+ [在 AWS 上运行 Oracle 数据库的最佳实践](https://docs.aws.amazon.com/whitepapers/latest/oracle-database-aws-best-practices/architecting-for-security-and-performance.html)
+ [使用 NETWORK\$1LINK 导入数据](https://docs.oracle.com/database/121/SUTIL/GUID-23E58D59-A477-4A87-BD0E-C82447581D0A.htm#SUTIL856)

## 操作说明
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-epics"></a>

### 在 AWS 上设置 EC2 实例
<a name="set-up-the-ec2-instances-on-aws"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定本地主机的源硬件配置和内核参数。 | 验证本地配置，包括存储大小、每秒 input/output 操作数 (IOPS) 和 CPU。这对基于 CPU 内核的 Oracle 许可非常重要。 | 数据库管理员， SysAdmin | 
| 在 AWS 上创建基础设施。 | 创建虚拟私有云 (VPCs)、私有子网、安全组、网络访问控制列表 (ACLs)、路由表和 Internet 网关。有关更多信息，请参阅下列内容：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.html) | 数据库管理员、AWS 系统管理员 | 
| 使用 Active Data Guard 设置 EC2 实例。 | 按照 AWS W EC2 ell-Ar [chitected Framework 中所述，使用主动数据保护配置配置 AWS 实例。](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html) EC2 实例上的 Oracle 数据库版本可能与本地版本不同，因为这种模式使用逻辑备份。注意以下几点：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.html)有关更多信息，请参阅:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.html) | 数据库管理员、AWS 系统管理员 | 

### 将数据库迁移到 Amazon EC2
<a name="migrate-the-database-to-amazon-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 EC2 实例创建指向本地数据库的 dblink。 | 在 EC2 实例上的 Oracle 数据库和本地 Oracle 数据库之间创建数据库链接 (dblink)。有关更多信息，请参阅[使用网络链接导入移动数据](https://docs.oracle.com/database/121/SUTIL/GUID-3E1D4B46-E856-4ABE-ACC5-977A898BB0F1.htm#SUTIL806)（Oracle 文档）。 | 数据库管理员 | 
| 验证 EC2 实例与本地主机之间的连接。 | 使用 dblink 确认 EC2 实例和本地数据库之间的连接是否正常运行。有关说明，请参阅[创建数据库链接](https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm)（Oracle 文档）。 | 数据库管理员 | 
| 停止连接到本地数据库的所有应用程序。 | 批准数据库停机时间后，关闭连接至本地数据库的所有应用程序和相关作业。您可直接从应用程序执行此操作，也可以使用 cron 从数据库执行此操作。有关更多信息，请参阅[使用 Crontab 实用程序在 Oracle Linux 上计划任务](https://docs.oracle.com/en/learn/oracle-linux-crontab/index.html)。 | 数据库管理员，应用程序开发人员 | 
| 安排数据迁移任务。 | 在目标主机上，使用命令 `impdb` 安排 Data Pump 导入。这会将目标数据库连接至本地主机并开始数据迁移。有关更多信息，请参阅 [Data Pump 导入](https://docs.oracle.com/database/121/SUTIL/GUID-D11E340E-14C6-43B8-AB09-6335F0C1F71B.htm#SUTIL300)和 [NETWORK\$1LINK](https://docs.oracle.com/database/121/SUTIL/GUID-0871E56B-07EB-43B3-91DA-D1F457CF6182.htm#SUTIL919)（Oracle 文档）。 | 数据库管理员 | 
| 验证数据迁移。 | 数据验证是关键步骤。对于数据验证，您可使用自定义工具或 Oracle 工具，例如 dblink 和 SQL 查询的组合。 | 数据库管理员 | 

### 割接
<a name="cut-over"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将源数据库置于只读模式。 | 确认应用程序已关闭并且未对源数据库进行任何更改。以只读模式打开源数据库。这可帮助您避免任何未结事务。有关更多信息，请参阅 [SQL 语句](https://docs.oracle.com/database/121/SQLRF/statements_1006.htm#i2135540)中的`ALTER DATABASE`（Oracle 文档）。 | DBA、 DevOps 工程师、应用程序开发人员 | 
| 验证对象数量与数据。 | 若要验证数据和对象，请使用自定义工具或 Oracle 工具，例如 dblink 和 SQL 查询的组合。 | 数据库管理员，应用程序开发人员 | 
| 将应用程序连接到主 EC2 实例上的数据库。 | 更改应用程序的连接属性，使其指向您在主 EC2 实例上创建的新数据库。 | 数据库管理员，应用程序开发人员 | 
| 验证应用程序性能。 | 启动应用程序。使用[自动工作负载存储库](https://docs.oracle.com/database/121/RACAD/GUID-C3CD2DCE-38BD-46BA-BC32-7A28CAC9A7FD.htm#RACAD951)验证应用程序的功能和性能（Oracle 文档）。 | 应用程序开发人员、 DevOps 工程师、数据库管理员 | 

## 相关资源
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-resources"></a>

**AWS 参考**
+ [将 Oracle 数据库迁移至 AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)
+ [ EC2 适用于甲骨文的亚马逊](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html)
+ [将庞大的 Oracle 数据库迁移至 AWS 以适应跨平台环境](https://docs.aws.amazon.com/prescriptive-guidance/latest/migrate-bulky-oracle-databases/welcome.html)
+ [VPCs 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)
+ [教程：创建 VPC 以结合数据库实例使用](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html)

**Oracle 参考**
+ [Oracle Data Guard 配置](https://docs.oracle.com/en/database/oracle/oracle-database/21/sbydb/introduction-to-oracle-data-guard-concepts.html#GUID-AB9DF863-2C7E-4767-81F2-56AD0FA30B49)
+ [Data Pump 导入](https://docs.oracle.com/database/121/SUTIL/GUID-D11E340E-14C6-43B8-AB09-6335F0C1F71B.htm#SUTIL300)