

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

# 迁移
<a name="migration-pattern-list"></a>

**Topics**
+ [使用微软 Excel 和 Python 为 AWS DMS 任务创建 AWS CloudFormation 模板](create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python.md)
+ [开始使用自动发现产品组合](get-started-with-automated-portfolio-discovery.md)
+ [将本地 Cloudera 工作负载迁移到 Cloudera Data Platform on AWS](migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws.md)
+ [解决将 Microsoft SQL Server 迁移至 Amazon Web Services Cloud 后出现的连接错误](resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.md)
+ [重启 RHEL 源服务器 SELinux 后，无需禁用 AWS 复制代理即可自动重启 AWS 复制代理](restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server.md)
+ [重构](migration-rearchitect-pattern-list.md)
+ [更换主机](migration-rehost-pattern-list.md)
+ [重新定位](migration-relocate-pattern-list.md)
+ [更换平台](migration-replatform-pattern-list.md)
+ [按照工作负载分类的迁移模式](migration-migration-patterns-by-workload-pattern-list.md)
+ [更多模式](migration-more-patterns-pattern-list.md)

# 使用微软 Excel 和 Python 为 AWS DMS 任务创建 AWS CloudFormation 模板
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python"></a>

*Venkata Naveen Koppula，Amazon Web Services*

## Summary
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-summary"></a>

此模式概述了使用微软 Excel 和 Python 自动为 [AWS 数据库迁移服务](https://aws.amazon.com/dms/) (AWS DMS) 创建 AWS CloudFormation 模板的步骤。

使用 AWS DMS 迁移数据库通常涉及创建 AWS CloudFormation 模板来配置 AWS DMS 任务。以前，创建 AWS CloudFormation 模板需要了解 JSON 或 YAML 编程语言。借助这一工具，您只需要了解 Excel 的基本知识以及如何使用终端或命令窗口运行 Python 脚本即可。

作为输入，该工具采用一个 Excel 工作簿，其中包括要迁移的表的名称、AWS DMS 终端节点的 Amazon 资源名称 (ARNs) 以及 AWS DMS 复制实例。然后，该工具会为所需的 AWS DMS 任务生成 AWS CloudFormation 模板。

有关详细步骤和背景信息，请参阅 [AWS 数据库博客中的博客文章使用 Microsoft Excel 为 AWS DMS 任务创建 AWS CloudFormation 模板](https://aws.amazon.com/blogs/database/create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel/)。

## 先决条件和限制
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ Microsoft Excel 版本 2016 或更高版本。
+ Python（2.7 或更高版本）
+ **xlrd** Python 模块(在命令提示符下安装，命令为：**pip install xlrd**)
+ AWS DMS 源端点和目标端点以及 AWS DMS 复制实例

**限制**
+ 架构、表和关联列的名称将在目标端点处转换为小写字符。
+ 此工具不涉及 AWS DMS 端点和复制实例的创建。
+ 目前，该工具仅支持每个 AWS DMS 任务使用一个架构。

## 架构
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-architecture"></a>

**源技术堆栈**
+ 本地数据库
+ Microsoft Excel

**目标技术堆栈**
+ AWS CloudFormation 模板
+ Amazon Web Services Cloud 中的数据库 

**架构**

![\[使用 Excel 和 Python 自动为 AWS DMS 创建 CloudFormation 模板的工作流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/778c7c1e-2647-496f-8afd-52ff1ef02489/images/8fe1550d-8966-41aa-a480-5f7bef20629f.png)


## 工具
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-tools"></a>
+ [Pycharm IDE](https://aws.amazon.com/pycharm/) 或任何支持 Python 版本 3.6 的集成式开发环境(IDE)
+ Microsoft Office 2016（适用于 Microsoft Excel）

## 操作说明
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-epics"></a>

### 配置网络、AWS DMS 复制实例和端点
<a name="configure-the-network-aws-dms-replication-instance-and-endpoints"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 如有必要，可请求增加服务配额。 | 如有需要，可请求增加 AWS DMS 任务的服务限额。 | 常规 AWS | 
| 配置 AWS 区域、虚拟私有云 (VPCs)、CIDR 范围、可用区和子网。 |  | 常规 AWS | 
| 配置 AWS DMS 复制实例。 | AWS DMS 复制实例可以连接到本地数据库和 AWS 数据库。 | 常规 AWS | 
| 配置 AWS DMS 端点。 | 为源数据库和目标数据库配置端点。 | 常规 AWS | 

### 为 AWS DMS 任务和标签准备工作表
<a name="prepare-the-worksheets-for-aws-dms-tasks-and-tags"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置表列表。 | 列出迁移中涉及的所有表。 | 数据库 | 
| 准备任务工作表。 | 使用您配置的表列表准备 Excel 工作表。 | 常规 AWS、Microsoft Excel | 
| 准备标签工作表。 | 详述附加到 AWS DMS 任务的 AWS 资源标签。 | 常规 AWS、Microsoft Excel | 

### 下载并运行工具
<a name="download-and-run-the-tool"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 GitHub 存储库下载并提取模板生成工具。 | GitHub 存储库: https://github.com/aws-samples/dms-cloudformation-templates-generator/ |  | 
| 运行工具。 | 请按照“参考和帮助”下列出的博客文章中的详细说明进行操作。 |  | 

## 相关资源
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-resources"></a>
+ [使用微软 Excel 为 AWS DMS 任务创建 AWS CloudFormation 模板（博客文章）](https://aws.amazon.com/blogs/database/create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel/)
+ [DMS CloudFormation 模板生成器（GitHub 存储库）](https://github.com/aws-samples/dms-cloudformation-templates-generator/tree/v1.0)
+ [Python 文档](https://www.python.org/)
+ [XLRD 说明和下载](https://pypi.org/project/xlrd/)
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/)
+ [AWS CloudFormation 文档](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)

# 开始使用自动发现产品组合
<a name="get-started-with-automated-portfolio-discovery"></a>

*Pratik Chunawala 和 Rodolfo Jr. Cerrada，Amazon Web Services*

## Summary
<a name="get-started-with-automated-portfolio-discovery-summary"></a>

在将应用程序和服务器迁移到 Amazon Web Services（AWS）云时，评测产品组合和收集元数据是一项关键挑战，特别是对于服务器超过 300 台的大型迁移。使用自动产品组合发现工具可以帮助您收集有关应用程序的信息，例如用户数量、使用频率、依赖项以及有关应用程序基础设施的信息。在规划迁移浪潮时，这些信息是必不可少的，这样您就可以对具有相似特征的应用程序进行适当的优先级排序和分组。使用发现工具可以简化产品组合团队与应用程序所有者之间的沟通，因为产品组合团队可以验证发现工具的结果，而不必手动收集元数据。此模式讨论了选择自动发现工具的关键注意事项，以及有关如何在环境中部署和测试自动发现工具的信息。

此模式包括构建您自己的高级活动清单的起点模板。清单旁边是负责人、负责制者、协商参与者、知情人 (RACI) 矩阵的模板。您可以使用此 RACI 矩阵来确定谁负责清单中的每项任务。

## 操作说明
<a name="get-started-with-automated-portfolio-discovery-epics"></a>

### 选择发现工具
<a name="select-a-discovery-tool"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定发现工具是否适合您的用例。 | 发现工具可能不是用例的最佳解决方案。考虑选择、采购、准备和部署发现工具所需时间。在环境中为无代理发现工具设置扫描设备或为所有范围内的工作负载安装代理可能需要 4–8 周的时间。部署完成后，发现工具必须等待 4–12 周才能通过扫描应用程序工作负载和执行应用程序堆栈分析来收集元数据。如果您迁移的服务器少于 100 台，则手动收集元数据和分析依赖项的速度可能快于使用自动发现工具部署和收集元数据所需时间。 | 迁移主管，迁移工程师 | 
| 选择发现工具。 | 在[其他信息](#get-started-with-automated-portfolio-discovery-additional)部分中查看**选择自动发现工具的注意事项**。确定为用例选择发现工具的适当标准，然后根据这些标准评估每个工具。有关自动发现工具的完整列表，请参阅[发现、规划和建议迁移工具](https://aws.amazon.com/prescriptive-guidance/migration-tools/migration-discovery-tools/)。 | 迁移主管，迁移工程师 | 

### 准备安装
<a name="prepare-for-installation"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备部署前清单。 | 创建一份在部署工具之前必须完成的任务清单。有关示例，请参阅 Flexera 文档网站上的[部署前清单](https://docs.flexera.com/foundationcloudscape/ug/Content/helplibrary/FCGS_Predeployment.htm)。 | 构建主管，迁移工程师，迁移主管，网络管理员 | 
| 准备网络要求。 | 预调配工具运行和访问目标服务器所需端口、协议、IP 地址和路由。有关更多信息，请参阅发现工具的安装指南。有关示例，请参阅 Flexera 文档网站上的[部署要求](https://docs.flexera.com/foundationcloudscape/help/RCDeployReq.htm)。 | 迁移工程师、网络管理员、云架构师 | 
| 准备账户和凭证要求。 | 确定访问目标服务器和安装该工具的所有组件所需凭证。 | 云管理员，常规 AWS，迁移工程师，迁移主管，网络管理员，AWS 管理员 | 
| 准备好要安装该工具的设备。 | 确保要安装工具组件的设备符合该工具的规格和平台要求。 | 迁移工程师，迁移主管，网络管理员 | 
| 准备变更单。 | 根据贵组织中的变更管理流程，准备所需所有变更单，并确保这些变更单获得批准。 | 构建主管，迁移主管 | 
| 向利益相关者发送要求。 | 将部署前清单和网络要求发送给利益相关者。利益相关者应在继续部署之前审查、评估和准备必要的要求。 | 构建主管，迁移主管 | 

### 部署工具
<a name="deploy-the-tool"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载安装程序。 | 下载安装程序或虚拟机映像。虚拟机映像通常采用开放虚拟化格式 (OVF)。 | 构建主管，迁移主管 | 
| 提取文件。 | 如果您使用的是安装程序，则必须在本地服务器上下载并运行该安装程序。 | 构建主管，迁移主管 | 
| 在服务器上部署该工具。 | 在目标本地服务器上部署发现工具，如下所示：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/get-started-with-automated-portfolio-discovery.html) | 构建主管，迁移主管，网络管理员 | 
| 登录发现工具。 | 按照屏幕上的提示进行操作，然后登录以开始使用该工具。 | 迁移主管，构建主管 | 
| 激活产品。 | 输入许可证密钥。 | 构建主管，迁移主管 | 
| 配置工具。 | 输入访问目标服务器所需的所有凭据，例如 Windows VMware、简单网络管理协议 (SNMP) 和安全外壳协议 (SSH) 或数据库的凭据。 | 构建主管，迁移主管 | 

### 测试工具
<a name="test-the-tool"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 选择测试服务器。 | 识别可用于测试发现工具的非生产子网或 IP 地址的小子集。这可以帮助您快速验证扫描，快速识别和排除任何错误，并将测试与生产环境隔离开来。 | 构建主管，迁移主管，网络管理员 | 
| 开始扫描选定的测试服务器。 | 对于无代理发现工具，请在发现工具控制台中输入所选测试服务器的子网或 IP 地址，然后开始扫描。对于基于代理的发现工具，请在选定的测试服务器上安装代理。 | 构建主管，迁移主管，网络管理员 | 
| 查看扫描结果。 | 查看测试服务器的扫描结果。如果发现任何错误，请进行故障排除并修复错误。记录错误和解决方案。您将来会参考这些信息，并且可以将这些信息添加到产品组合运行手册中。 | 构建主管，迁移主管，网络管理员 | 
| 重新扫描测试服务器。 | 重新扫描完成后，重复扫描，直到没有错误。 | 构建主管，迁移主管，网络管理员 | 

## 相关资源
<a name="get-started-with-automated-portfolio-discovery-resources"></a>

**AWS resources**
+ [AWS 云 迁移应用程序组合评估指南](https://docs.aws.amazon.com/prescriptive-guidance/latest/application-portfolio-assessment-guide/introduction.html)
+ [发现、规划和推荐迁移工具](https://aws.amazon.com/prescriptive-guidance/migration-tools/migration-discovery-tools/)

**常用发现工具的部署指南**
+ [部署 RN15 0 虚拟设备](https://docs.flexera.com/foundationcloudscape/ug/Content/helplibrary/FCGS_QSG_DeployRN150.htm)（Flexera 文档）
+ [Gatherer 安装](https://www.modelizeit.com/documentation/ADC-Gatherer-Install.html)（ModelizeIT 文档）
+ [本地分析服务器安装](https://www.modelizeit.com/documentation/RejuvenApptor-Install.html)（ModelizeIT 文档）

## 附加信息
<a name="get-started-with-automated-portfolio-discovery-additional"></a>

**选择自动发现工具的注意事项**

每种发现工具都有其优点和局限性。在为用例选择合适的工具时，请注意以下方面：
+ 选择一种发现工具，该工具可以收集实现产品组合评测目标所需大部分（如果不是全部）元数据。
+ 找出由于该工具不支持所以您需要手动收集的所有元数据。
+ 向利益相关者提供发现工具要求，以便他们可以根据其内部安全和合规性要求（例如服务器、网络和凭证要求）查看和评测该工具。
  + 该工具是否要求您在范围内的工作负载中安装代理？
  + 该工具是否要求您在自己的环境中设置虚拟设备？
+ 确定数据驻留要求。有些组织不想将其数据存储在环境之外。要解决这个问题，您可能需要在本地环境中安装该工具的某些组件。
+ 确保该工具支持范围内工作负载的操作系统 (OS) 和操作系统版本。
+ 确定产品组合是否包括大型机、中端服务器和传统服务器。大多数发现工具可以将这些工作负载检测为依赖项，但有些工具可能无法获取设备详细信息，例如使用率和服务器依赖项。Device42 和 ModernizeIT 发现工具都支持大型机和中端服务器。

## 附件
<a name="attachments-8c9d84de-e84a-4b0c-bcaa-389cd90be1f0"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/8c9d84de-e84a-4b0c-bcaa-389cd90be1f0/attachments/attachment.zip)

# 将本地 Cloudera 工作负载迁移到 Cloudera Data Platform on AWS
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws"></a>

*Battulga Purevragchaa 和 Nidhi Gupta，Amazon Web Services*

*Nijjwol Lamsal，Cloudera, Inc.*

## Summary
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-summary"></a>

此模式描述了将本地 Cloudera 分布式 Hadoop (CDH)、Hortonworks 数据平台 (HDP) 和 Cloudera 数据平台 (CDP) 工作负载迁移到 CDP Public Cloud on AWS 的高级步骤。我们建议您与 Cloudera Professional Services 和系统集成商 (SI) 合作来实施这些步骤。

Cloudera 客户希望将其本地 CDH、HDP 和 CDP 工作负载迁移到云端的原因有很多。部分常见原因包括：
+ 简化新数据平台范例（例如数据湖屋或数据网格）的采用
+ 提高业务敏捷性，实现现有数据资产的访问和推理民主化
+ 降低总拥有成本（TCO）
+ 增强工作负载弹性
+ 实现更大的可扩展性；与遗留的本地安装基础相比，大大减少了预调配数据服务的时间
+ 停用遗留硬件；大大减少了硬件刷新周期
+ 利用定价优势，该 pay-as-you-go定价已扩展到采用 Cloudera 许可模式 (CCU) 的 AWS 上的 Cloudera 工作负载
+ 利用持续集成和持续交付 (CI/CD) 平台，实现更快的部署和改进的集成
+ 使用单个统一平台 (CDP) 处理多工作负载

Cloudera 支持所有主要工作负载，包括机器学习、数据工程、数据仓库、操作数据库、流处理 (CSP) 及数据安全和治理。Cloudera 多年来一直在本地提供这些工作负载，您可以通过将 CDP 公共云与Workload Manager和Replication Manager结合使用，将这些工作负载迁移到 Amazon Web Services Cloud。 

Cloudera Shared Data Experience (SDX) 提供跨这些工作负载的共享元数据目录，以促进一致的数据管理和操作。SDX 还包括全面、精细的安全性，以防范威胁，以及审计和搜索功能的统一治理，以符合支付卡行业数据安全标准 (PCI DSS) 和 GDPR 等标准。 

**CDP 迁移一览**


|  |  | 
| --- |--- |
|    工作负载 | 源工作负载 | CDH、HDP 和 CDP Private Cloud | 
| --- |--- |--- |
| 源环境 | Windows、Linux本地、主机托管或任何非 AWS 环境 | 
| 目标工作负载 | CDP Public Cloud on AWS | 
| 目标环境 | 部署模式：客户账户操作模式： customer/Cloudera 控制平面 | 
| ** **** ****迁移** | 迁移策略 (7R) | 更换主机、更换平台或重构 | 
| 这是工作负载版本的升级吗？ | 是 | 
| 迁移持续时间 | 部署：创建客户账户、虚拟私有云（VPC）和 CDP 公有云客户管理的环境大约需要 1 周。迁移时间：1-4 个月，具体取决于工作负载的复杂性与规模。 | 
| **成本** | 在 AWS 上运行工作负载的成本 | 在较高层面上，CDH 工作负载迁移到 AWS 的成本的前提条件是您将在 AWS 上建立一个新环境。它包括对人员时间和精力的核算，以及为新环境预调配计算资源和许可软件。Cloudera 基于云消费定价模型使您能够灵活地利用突发和自动扩缩功能。有关更多信息，请参阅 Cloudera 网站上的 [CDP 公有云服务费率](https://www.cloudera.com/products/pricing/cdp-public-cloud-service-rates.html)。Cloudera Enterprise [Data Hub](https://www.cloudera.com/products/enterprise-data-hub.html) 基于亚马逊弹性计算云 (Amazon EC2)，与传统集群非常接近。Data Hub 可[自定义](https://docs.cloudera.com/data-hub/cloud/create-cluster-aws/topics/mc-creating-a-cluster.html)，但这会影响成本。[CDP Public Cloud Data Warehouse](https://docs.cloudera.com/data-warehouse/cloud/index.html)、[Cloudera Machine Learning](https://docs.cloudera.com/machine-learning/cloud/product/topics/ml-product-overview.html) 和 [Cloudera Data Engineering (CDE)](https://docs.cloudera.com/data-engineering/cloud/index.html) 基于容器，可以配置为自动扩缩。 | 
| ** **** ****基础设施协议与框架** | 系统要求 | 请参阅[先决条件](#migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-prereqs)部分。 | 
| SLA | 请参阅 [CDP 公共云的 Cloudera 服务级别协议](https://www.cloudera.com/legal/terms-and-conditions/cdp-public-cloud-sla.html)。 | 
| DR | 请参阅 Cloudera 文档中的[灾难恢复](https://docs.cloudera.com/cdp-reference-architectures/latest/cdp-ra-operations/topics/cdp-ra-abstract.html)。 | 
| （目标 Amazon Web Services account 的）许可和运营模式 | 自带许可（BYOL）模式 | 
| ** ****合规** | 安全要求 | 请参阅 Cloudera 文档中的 [Cloudera 安全概述](https://docs.cloudera.com/cdp-private-cloud-base/7.1.6/security-overview/topics/cm-security-overview.html)。 | 
| 其他[合规性认证](https://aws.amazon.com/compliance/programs) | 在 Cloudera 网站查看关于[通用数据保护条例 (GDPR)](https://www.cloudera.com/solutions/lower-business-risks/general-data-protection-regulation.html) 合规和 [CDP Trust Center](https://www.cloudera.com/products/trust-center.html) 的信息。 | 

## 先决条件和限制
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-prereqs"></a>

**先决条件**
+ [Amazon Web Services account 要求](https://docs.cloudera.com/cdp-public-cloud/cloud/requirements-aws/topics/mc-requirements-aws.html)，包括账户、资源、服务和权限，如 AWS Identity and Access Management (IAM) 角色和策略设置
+ 在 Cloudera 网站[部署 CDP 的先决条件](https://docs.cloudera.com/cdp-public-cloud/cloud/getting-started/topics/cdp-set_up_cdp_prerequisites.html)

迁移需要以下角色和专长：


| 
| 
|  角色 | 技能和责任 | 
| --- |--- |
| 迁移主管 | 确保执行支持、团队协作、规划、实施和评测 | 
| Cloudera SME | CDH、HDP 以及 CDP 管理、系统管理和架构方面的专业技能 | 
| AWS 架构师 | Amazon Web Services、联网、安全和架构方面的技能 | 

## 架构
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-architecture"></a>

构建适当的架构是确保迁移和性能满足用户期望的关键步骤。为了使您的迁移工作满足本行动手册的假设，您在 Amazon Web Services Cloud 中的目标数据环境，无论是在虚拟私有云（VPC）托管的实例上还是在 CDP 上，都必须在操作系统和软件版本以及主要机器规范方面与您的源环境完全匹配。

下图（经许可转载自 [Cloudera Shared Data Experience 数据表](https://www.cloudera.com/content/dam/www/marketing/resources/datasheets/cloudera-sdx-datasheet.pdf?daqp=true)）显示 CDP 环境的基础设施组件以及各层或基础设施组件如何交互。

![\[CDP 环境组件\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/bb47435e-2638-425c-ac37-7d55053452ac/images/91d62277-7fde-4ec6-8e2b-86a446e2f6ee.png)


该架构包括以下 CDP 组件：
+ Data Hub 是一项用于启动和管理由 Cloudera 运行时系统支持的工作负载集群的服务。您可使用 Data Hub 中的集群定义为自定义用例预调配和访问工作负载集群，并定义自定义集群配置。有关更多信息，请参阅 [Cloudera 网站](https://docs.cloudera.com/data-hub/cloud/index.html)。
+ 数据流和流处理解决了企业在动态数据方面面临的主要挑战。它将管理以下内容：
  + 处理大容量、高规模的实时数据流
  + 跟踪流数据的数据来源和沿袭
  + 管理和监控边缘应用程序与流媒体源

  欲了解更多信息，请参阅 [Cloudera 网站上的 Cloudera DataFlow](https://www.cloudera.com/products/dataflow.html) 和 [CSP](https://www.cloudera.com/products/stream-processing.html)。
+ 数据工程包括数据集成、数据质量和数据治理，帮助组织构建和维护数据管线和工作流。有关更多信息，请参阅 [Cloudera 网站](https://docs.cloudera.com/data-engineering/cloud/index.html)。了解[对竞价型实例的支持，以便于在 AWS 上](https://docs.cloudera.com/data-engineering/cloud/cost-management/topics/cde-spot-instances.html)为 Cloudera Data Engineering 工作负载节省成本。
+ Data Warehouse** **使您能够创建独立的数据仓库和数据集市，这些数据仓库和数据集市可以自动扩缩以满足工作负载需求。该服务为每个数据仓库和数据集市提供隔离的计算实例和自动优化，可帮助您在开会时节省成本 SLAs。有关更多信息，请参阅 [Cloudera 网站](https://docs.cloudera.com/data-warehouse/cloud/index.html)。了解如何对 Cloudera Data Warehouse on AWS [管理成本](https://docs.cloudera.com/data-warehouse/cloud/planning/topics/dw-manage-cloud-costs.html)和[自动扩缩](https://docs.cloudera.com/data-warehouse/cloud/auto-scaling/topics/dw-public-cloud-autoscaling-overview.html)。
+ CDP 中的操作数据库为可扩展、高性能应用程序提供了可靠而灵活的基础。它提供实时、始终可用、可扩展的数据库，在统一的运营和仓储平台内提供传统的结构化数据以及新的非结构化数据。有关更多信息，请参阅 [Cloudera 网站](https://www.cloudera.com/products/operational-db.html)。
+ 机器学习是一个云原生机器学习平台，它将自助数据科学和数据工程功能合并到企业数据云中的单一便携式服务中。它支持在任何地方的数据上可扩展地部署机器学习和人工智能（AI）。有关更多信息，请参阅 [Cloudera 网站](https://docs.cloudera.com/machine-learning/cloud/index.html)。

**CDP on AWS**

下图（经 Cloudera 网站许可改编）显示了 CDP on AWS 的高级架构。CDP 实施[自有安全模型](https://docs.cloudera.com/runtime/7.1.0/cdp-security-overview/topics/security-management-console-security.html)来管理账户和数据流。这些通过使用[跨账户角色](https://docs.cloudera.com/cdp-public-cloud/cloud/requirements-aws/topics/mc-aws-req-credential.html)与 [IAM](https://aws.amazon.com/iam/) 集成。 

![\[CDP on AWS 高级架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/bb47435e-2638-425c-ac37-7d55053452ac/images/54420517-38b4-4e82-bd19-9ded50ed009c.png)


CDP 控制面板位于自己的 VPC 中的 Cloudera 主账户中。每个客户账户都有自己的子账户和唯一 VPC。跨账户 IAM 角色和 SSL 技术将控制面板之间的管理流量路由到位于每个客户 VPC 内可通过互联网路由的公有子网上的客户服务。在客户的 VPC 上，Cloudera Shared Data Experience (SDX) 通过统一的治理和合规性提供企业级安全性，因此您可以更快地从数据中获得见解。SDX 是融入所有 Cloudera 产品的设计理念。有关 [SDX](https://docs.cloudera.com/cdp-public-cloud/cloud/overview/topics/cdp-services.html) 和 [AWS 的 CDP 公有云网络架构](https://docs.cloudera.com/cdp-public-cloud/cloud/aws-refarch/topics/cdp-pc-aws-refarch-overview.html)的更多信息，请参阅 Cloudera 文档。

## 工具
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-tools"></a>

**AWS 服务**
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) 可帮助您在 AWS 上运行 Kubernetes，而无需安装或维护您自己的 Kubernetes 控制面板或节点。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。
+ [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**自动化和工具**
+ 要获得其他工具，您可以使用 [Cloudera Backup Data Recovery (BDR)](https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cm_bdr_tutorials.html)、[AWS Snowball](https://aws.amazon.com/snowball/) 和 [AWS Snowmobile](https://aws.amazon.com/snowmobile/)，帮助将数据从本地 CDH、HDP 和 CDP 迁移到 AWS 托管的 CDP。
+ 对于新的部署，我们建议您使用[适用于 CDP 的 AWS 合作伙伴解决方案](https://aws.amazon.com/solutions/partners/terraform-modules/cdp-public-cloud/)。

## 操作说明
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 与 Cloudera 团队合作。 | Cloudera 追求与客户的标准化参与模式，并可以与您的系统集成商 (SI) 合作推广相同的方法。联系 Cloudera 客户团队，以便他们可以提供指导和必要的技术资源来启动项目。联系 Cloudera 团队，以确保所有必要的团队能够在迁移日期临近时为迁移做好准备。 您可联系 Cloudera 专业服务部门，以更低的成本快速将您的 Cloudera 部署从试点转移到生产环境，同时保持最佳性能。有关产品的完整列表，请参阅 [Cloudera 网站](https://www.cloudera.com/about/services-and-support/professional-services.html)。 | 迁移主管 | 
| 在 AWS 上为您的 VPC 创建 CDP 公有云环境。 | 与 Cloudera Professional Services 或您的 SI 合作，规划 CDP 公共云并将其部署到 AWS 上的 VPC 中。 | 云架构师、Cloudera SME | 
| 确定要迁移的工作负载的优先级，并对其进行评测。 | 评估所有本地工作负载，以确定最容易迁移的工作负载。非关键任务的应用程序最好首先移动，因为它们对客户的影响最小。成功迁移其他工作负载后，将任务关键型工作负载保存至最后。瞬态（CDP 数据工程）工作负载比持久（CDP 数据仓库）工作负载更容易迁移。迁移时考虑数据量与位置也很重要。挑战可能包括将数据从本地环境连续复制到云，以及更改数据摄取管线以将数据直接导入到云。 | 迁移主管 | 
| 讨论 CDH、HDP、CDP 以及遗留应用程序迁移活动。 | 考虑和开始使用 Cloudera Workload Manager 计划以下活动：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws.html) | 迁移主管 | 
| 完成 Cloudera Replication Manager 的要求和建议。 | 与 Cloudera Professional Services 和您的 SI 合作，准备将工作负载迁移到 AWS 上的 CDP Public Cloud 环境。了解以下要求和建议可以帮助您避免安装 Replication Manager 服务期间和之后的常见问题。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws.html) | 迁移主管 | 

### 将 CDP 迁移到 AWS
<a name="migrate-cdp-to-aws"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 Cloudera 工作负载管理器迁移 dev/test 环境的第一个工作负载。 | 您的 SI 可以帮助您将第一个工作负载迁移到 AWS Cloud。这应该是一个不面向客户或任务关键型作业的应用程序。理想的 dev/test 迁移对象是具有云端可以轻松摄取的数据的应用程序，例如 CDP 数据工程工作负载。这是一种瞬态工作负载，访问它的用户通常较少，而持久工作负载（例如 CDP 数据仓库工作负载）可能有许多需要不间断访问的用户。数据工程工作负载不是持久的，这可以最大限度地减少出现问题时对业务的影响。然而，这些工作对于生产报告可能至关重要，因此首先优先考虑影响较小的数据工程工作负载。 | 迁移主管 | 
| 根据需要重复迁移的步骤。 | Cloudera Workload Manager 可以帮助识别最适合云端的工作负载。它提供诸如云性能评级、目标环境 sizing/capacity 计划和复制计划等指标。迁移的最佳选择是季节性工作负载、临时报告和不消耗大量资源的间歇性工作。Cloudera Replication Manager 将数据从本地移动至云端，以及从云端移动到本地。使用工作负载管理器主动优化数据仓库、数据工程和机器学习的工作负载、应用程序、性能和基础设施容量。有关如何实现数据仓库现代化的完整指南，请参阅 [Cloudera 网站](https://www.cloudera.com/content/dam/www/marketing/resources/webinars/modern-data-warehouse-fundamentals.png.landing.html)。 | Cloudera SME | 

## 相关资源
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-resources"></a>

Cloudera 文档：
+ [通过 CDP、Cloudera Manager 和 Replication Manager 注册经典集群：](https://docs.cloudera.com/replication-manager/cloud/operations/topics/rm-requirements-for-bdr-cdh-clusters.html)
  + [管理控制台](https://docs.cloudera.com/management-console/cloud/overview/topics/mc-management-console.html)
  + [Replication Manager Hive 复制](https://docs.cloudera.com/replication-manager/cloud/core-concepts/topics/rm-replication-of-data-using-hive.html)
+ [Sentry 复制](https://docs.cloudera.com/replication-manager/cloud/core-concepts/topics/rm-sentry-policy-replication.html) 
+ [Sentry 权限](https://docs.cloudera.com/replication-manager/cloud/core-concepts/topics/rm-sentry-ranger-permissions.html)
+ [Data Hub 集群规划清单](https://docs.cloudera.com/data-hub/cloud/cluster-planning/topics/dh-cluster-checklist.html)
+ [Workload Manager 架构](https://docs.cloudera.com/workload-manager/cloud/configuration/topics/wm-public-architecture-wm.html)
+ [Replication Manager 要求](https://docs.cloudera.com/replication-manager/cloud/index.html)
+ [Cloudera 数据平台可观测性](https://www.cloudera.com/products/observability.html)
+ [AWS 要求](https://docs.cloudera.com/cdp-public-cloud/cloud/requirements-aws/topics/mc-requirements-aws.html)

AWS 文档：
+ [云数据迁移](https://aws.amazon.com/cloud-data-migration/)

# 解决将 Microsoft SQL Server 迁移至 Amazon Web Services Cloud 后出现的连接错误
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud"></a>

*Premkumar Chelladurai，Amazon Web Services*

## Summary
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-summary"></a>

将在 Windows Server 2008 R2、2012 或 2012 R2 上运行的微软 SQL Server 迁移到亚马逊网络服务 (AWS EC2) 云上的亚马逊弹性计算云 (亚马逊) 实例后，与 SQL Server 的连接失败并出现以下错误： 
+ `[Microsoft][ODBC SQL Server Driver][DBNETLIB] General Network error`
+ `ERROR [08S01] [Microsoft][SQL Native Client]Communication link failure. System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)`
+ `TCP Provider: The semaphore timeout period has expired`

此模式描述了如何通过在 Windows Server 2008 R2、2012 或 2012 R2 上运行的 SQL Server 的操作系统 (OS) 和网络接口级别关闭 Windows 可扩展网络包 (SNP) 功能来解决这些错误。

## 先决条件和限制
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-prereqs"></a>

**先决条件**
+ Windows 服务器管理员权限。
+ 如果您使用 AWS Application Migration Service 作为迁移工具，则需要以下 Windows Server 版本之一：
  + Windows Server 2008 R2 Service Pack 1、2012 或者 2012 R2
+ 如果您使用 CloudEndure 迁移作为迁移工具，则需要以下 Windows 服务器版本之一：
  + Windows Server 2003 R2 Service Pack 3、2008、2008 R2 Service Pack 1、2012 或者 2012 R2

## 工具
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-tools"></a>
+ [亚马逊 EC2](https://docs.aws.amazon.com/ec2/index.html) — 亚马逊弹性计算云 (Amazon EC2) 在 AWS 云中提供可扩展的计算容量。您可以根据需要使用 Amazon EC2 启动任意数量或数量的虚拟服务器，也可以进行横向扩展或扩展。 
+ [Windows Server](https://docs.microsoft.com/en-us/windows-server/) – Windows Server 是一个用于构建由互联应用程序、网络和 Web 服务组成的基础设施的平台。

## 操作说明
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-epics"></a>

### 在操作系统和弹性网络接口级别关闭 SNP 功能
<a name="turn-off-snp-features-at-the-os-and-elastic-network-interface-levels"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在操作系统级关闭 SNP 功能。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.html) | AWS 管理员、AWS 系统管理员、迁移工程师、云管理员 | 
| 在弹性网络接口级别关闭 SNP 功能。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.html) | AWS 管理员、云管理员、AWS 系统管理员 | 

## 相关资源
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-resources"></a>
+ [如何对 RSS 和 NetDMA 等高级网络性能功能进行故障排除](https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/troubleshoot-network-performance-features-rss-netdma)

# 重启 RHEL 源服务器 SELinux 后，无需禁用 AWS 复制代理即可自动重启 AWS 复制代理
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server"></a>

*Anil Kunapareddy、Venkatramana Chintha 和 Shanmugam Shanker，Amazon Web Services*

## Summary
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-summary"></a>

AWS Application Migration Service 可帮助简化、加快和自动将您的 Red Hat Enterprise Linux (RHEL) 工作负载迁移至 Amazon Web Services (AWS) Cloud。要将源服务器添加到 Application Migration Service，您可以在服务器上安装 AWS Replication Agent。

Application Migration Service 提供实时、异步、块级复制。这意味着您可以在整个复制过程中继续正常的 IT 操作。 这些 IT 操作可能需要您在迁移期间重新引导或重新启动 RHEL 源服务器。如果发生这种情况，AWS Replication Agent 将不会自动重启，您的数据复制也将停止。通常，您可以将安全增强型 Linux (SELinux) 设置为**禁用**或**允许**模式以自动重启 AWS Replication Agent。但是，贵组织的安全策略可能禁止禁用 SELinux，您可能还必须[重新标记文件](https://access.redhat.com/solutions/3176)。

此模式描述了如何在迁移期间 RHEL 源服务器重启或重新启动 SELinux 时自动重启 AWS Replication Agent 而无需关闭。 

## 先决条件和限制
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 您想要迁移到 Amazon Web Services Cloud 的本地 RHEL 工作负载。 
+ Application Migration Service 已从 Application Migration Service 控制台初始化。仅首次使用此服务时才需要初始化。有关说明，请参阅 [Application Migration Service 文档](https://docs.aws.amazon.com/mgn/latest/ug/mandatory-setup.html)。
+ 适用于 Application Migration Service 的现有 [AWS Identity and Access Management (IAM) policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。有关更多信息，请参阅 [Application Migration Service 文档](https://docs.aws.amazon.com/mgn/latest/ug/mgn-policies.html)。

**版本**
+ RHEL 版本 7 或更高版本

## 工具
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-tools"></a>

**AWS 服务**
+ [AWS 应用程序迁移服务](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)是一种高度自动化 lift-and-shift（重新托管）的解决方案，可简化、加快应用程序迁移到 AWS 并降低其成本。

**Linux 命令**

下表列出了您将在 RHEL 源服务器上运行的 Linux 命令。在此模式的操作说明和场景中也有描述。 


| 
| 
| 命令 | 说明 | 
| --- |--- |
| `#systemctl –version` | 标识系统版本。 | 
| `#systemctl list-units --type=service` | 列出 RHEL 服务器上所有可用的活动服务。 | 
| `#systemctl list-units --type=service \| grep running` | 列出当前在 RHEL 服务器上运行的所有服务。 | 
| `#systemctl list-units --type=service \| grep failed` | 列出 RHEL 服务器重新引导或重新启动后加载失败的所有服务。 | 
| `restorecon -Rv /etc/rc.d/init.d/aws-replication-service` | 将上下文更改为 `aws-replication-service`。 | 
| `yum install policycoreutils*` | 安装 SELinux 系统运行所需的策略核心实用程序。 | 
| `ausearch -c "insmod" --raw \| audit2allow -M my-modprobe` | 搜索审核日志并创建策略模块。 | 
| `semodule -i my-modprobe.pp` | 激活策略。 | 
| `cat my-modprobe.te` | 显示 `my-modprobe.te` 文件的内容。 | 
| `semodule -l \| grep my-modprobe` | 检查策略是否已加载到 SELinux 模块。 | 

## 操作说明
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-epics"></a>

### 安装 AWS Replication Agent 并重启 RHEL 源服务器
<a name="install-the-aws-replication-agent-and-reboot-the-rhel-source-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建具有访问密钥与秘密访问密钥的 Application Service 用户。 | 要安装 AWS Replication Agent，您必须使用所需 AWS 凭证创建 Application Migration Service 用户。有关说明，请参阅 [Application Migration Service 文档](https://docs.aws.amazon.com/mgn/latest/ug/credentials.html)。 | 迁移工程师 | 
| 安装 AWS Replication Agent。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server.html) | 迁移工程师 | 
| 重启 RHEL 源服务器。 | 当 RHEL 源服务器的**数据复制状态**在[迁移控制面板](https://docs.aws.amazon.com/mgn/latest/ug/migration-dashboard.html)上显示**已停滞**时，请重启或重新引导 RHEL 源服务器。 | 迁移工程师 | 
| 检查数据复制状态。 | 等待一小时，然后在迁移控制面板上再次检查**数据复制状态**。它应该处于**健康**状态。 | 迁移工程师 | 

### 检查 RHEL 源服务器上的 AWS Replication Agent 状态
<a name="check-aws-replication-agent-status-on-the-rhel-source-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定系统版本。 | 打开 RHEL 源服务器命令行界面，然后运行以下命令来识别系统版本：`#systemctl –version` | 迁移工程师 | 
| 列出所有活跃服务。 | 要列出 RHEL 服务器上可用的所有活动服务，请运行以下命令：`#systemctl list-units --type=service` | 迁移工程师 | 
| 列出所有正在运行的服务。 | 要列出 RHEL 服务器上当前运行的所有服务，请使用以下命令：`#systemctl list-units --type=service \| grep running` | 迁移工程师 | 
| 列出所有加载失败服务。 | 要列出 RHEL 服务器重新引导或重新启动后加载失败的所有服务，请运行以下命令：`#systemctl list-units --type=service \| grep failed` | 迁移工程师 | 

### 创建并运行 SELinux 模块
<a name="create-and-run-the-selinux-module"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 更改安全上下文。 | 在 RHEL 源服务器的命令行界面中，运行以下命令以将安全上下文更改为 AWS 复制服务：`restorecon -Rv /etc/rc.d/init.d/aws-replication-service` | 迁移工程师 | 
| 安装核心实用程序。 | 要安装 SELinux 系统及其策略运行所需的核心实用程序，请运行以下命令：`yum install policycoreutils*` | 迁移工程师 | 
| 搜索审核日志并创建策略模块。 | 运行命令：`ausearch -c "insmod" --raw \| audit2allow -M my-modprobe` | 迁移工程师 | 
| 显示 my-modprobe-te文件内容。 | 该 `my-modprobe.te` 文件由 **audit2allow** 命令生成。它包括 SELinux 域、策略源目录和子目录，并指定与这些域相关的访问向量规则和过渡。运行以下命令以显示文件的内容：`cat my modprobe.te` | 迁移工程师 | 
| 激活策略。 | 若要插入模块并激活策略包，请运行以下命令：`semodule -i my-modprobe.pp` | 迁移工程师 | 
| 检查模块是否已加载。 | 运行如下命令：`semodule -l \| grep my-modprobe`加载 SELinux 模块后，迁移期间无需再设置 SELinux 为**禁用**模式**或允许**模式。 | 迁移工程师 | 
| 重启 RHEL 源服务器并验证数据复制状态。 | 打开 AWS Migration Service 控制台，导航至**数据复制进度**，然后重启您的 RHEL 源服务器。现在，数据复制应在 RHEL 源服务器重新启动后自动恢复。 | 迁移工程师 | 

## 相关资源
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-resources"></a>
+ [Application Migration Service 文档](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)
+ [技术培训材料](https://docs.aws.amazon.com/mgn/latest/ug/mgn-training.html)
+ [对 AWS Replication Agent 问题进行故障排除](https://docs.aws.amazon.com/mgn/latest/ug/Troubleshooting-Agent-Issues.html)
+ [Application Migration Service 策略](https://docs.aws.amazon.com/mgn/latest/ug/mgn-policies.html)

# 重构
<a name="migration-rearchitect-pattern-list"></a>

**Topics**
+ [将 Oracle 的 VARCHAR2 (1) 种数据类型转换为亚马逊 Aurora PostgreSQL 的布尔数据类型](convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.md)
+ [在 Aurora PostgreSQL 兼容中创建应用程序用户和角色](create-application-users-and-roles-in-aurora-postgresql-compatible.md)
+ [通过使用兼容 PostgreSQL 的 Aurora 全局数据库来模拟 Oracle 灾难恢复](emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.md)
+ [从 SQL Server 迁移到 PostgreSQL 时，对 PII 数据实施 SHA1 哈希处理](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [使用 Oracle SQL Developer 和 AWS SCT 以增量方式从 Amazon RDS for Oracle 迁移至 Amazon RDS for PostgreSQL](incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.md)
+ [使用兼容 Aurora PostgreSQL 的文件编码将 BLOB 文件加载至文本中](load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.md)
+ [使用并使用和，将 Amazon RDS for Oracle 迁移到适用于 PostgreSQL AWS SCT 的 Amazon RDS AWS DMS AWS CLI CloudFormation](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.md)
+ [使用 AWS DMS 在 SSL 模式下将 Amazon RDS for Oracle 迁移到 Amazon RDS for PostgreSQL](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.md)
+ [将 Oracle SERIALLY\$1REUSABLE pragma 包迁移至 PostgreSQL](migrate-oracle-serially-reusable-pragma-packages-into-postgresql.md)
+ [将 Oracle 外部表迁移到 Amazon Aurora PostgreSQL-Compatible](migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible.md)
+ [将基于函数的索引从 Oracle 迁移到 PostgreSQL](migrate-function-based-indexes-from-oracle-to-postgresql.md)
+ [使用扩展将 Oracle 原生函数迁移到 PostgreSQL](migrate-oracle-native-functions-to-postgresql-using-extensions.md)
+ [使用 AWS DMS 将 Db2 数据库从亚马逊迁移 EC2 到兼容 Aurora MySQL](migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.md)
+ [使用 AWS DMS 将微软 SQL Server 数据库从亚马逊迁移 EC2 到亚马逊 DocumentDB](migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms.md)
+ [将本地 ThoughtSpot Falcon 数据库迁移到亚马逊 Redshift](migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift.md)
+ [使用 Oracle 从 Oracle 数据库迁移到 Amazon RDS for PostgreSQL GoldenGate](migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.md)
+ [使用 AWS DMS 将 Oracle 分区表迁移到 PostgreSQL](migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms.md)
+ [从 Amazon RDS for Oracle 迁移到 Amazon RDS for MySQL](migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql.md)
+ [使用 AWS DMS 和 AWS SCT 从亚马逊上的 IBM Db2 迁移 EC2 到兼容 Aurora PostgreSQL](migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.md)
+ [使用和 AWS DMS 从 Oracle 8i 或 9i 迁移到适用于 SharePlex PostgreSQL 的亚马逊 RDS](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms.md)
+ [使用实体化视图和 AWS DMS 从 Oracle 8i 或 9i 迁移至 Amazon RDS for PostgreSQL](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms.md)
+ [使用 AWS DMS 和 AWS SCT 从 Amazon EC2 上的 Oracle 迁移至 Amazon RDS for MySQL](migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [使用 AWS DMS 和 AWS SCT 将 Oracle 数据库从亚马逊迁移 EC2 到适用于 MariaDB 的亚马逊 RDS](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct.md)
+ [使用 AWS DMS 和 AWS SCT 将本地 Oracle 数据库迁移至 Amazon RDS for MySQL](migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [使用 Oracle Bystander 和 AWS DMS 将本地 Oracle 数据库迁移到 Amazon RDS for PostgreSQL](migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.md)
+ [使用 AWS DMS 和 AWS SCT 将 Oracle 数据库迁移至 Amazon Redshift](migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct.md)
+ [使用 AWS DMS 和 AWS SCT 将 Oracle 数据库迁移至 Aurora PostgreSQL](migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.md)
+ [将数据从本地 Oracle 数据库迁移到 Aurora PostgreSQL](migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql.md)
+ [使用 AWS DMS 从 SAP ASE 迁移至 Amazon RDS for SQL Server](migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms.md)
+ [使用 AWS DMS 将本地 Microsoft SQL Server 数据库迁移至 Amazon Redshift](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms.md)
+ [使用 AWS SCT 数据提取代理将本地 Microsoft SQL Server 数据库迁移至 Amazon Redshift](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.md)
+ [将遗留应用程序从 Oracle Pro\$1C 迁移到 ECPG](migrate-legacy-applications-from-oracle-pro-c-to-ecpg.md)
+ [将虚拟生成的列从 Oracle 迁移至 PostgreSQL](migrate-virtual-generated-columns-from-oracle-to-postgresql.md)
+ [在 Aurora PostgreSQL-Compatible 上设置 Oracle UTL\$1FILE 功能](set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.md)
+ [从 Oracle 迁移至 Amazon Aurora PostgreSQL 后验证数据库对象](validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql.md)

# 将 Oracle 的 VARCHAR2 (1) 种数据类型转换为亚马逊 Aurora PostgreSQL 的布尔数据类型
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql"></a>

*Naresh Damera，Amazon Web Services*

## Summary
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-summary"></a>

在从适用于 Oracle 的亚马逊关系数据库服务 (Amazon RDS) 迁移到兼容 Amazon Aurora PostgreSQL 的版本期间，在 () 中验证迁移时可能会遇到数据不匹配的问题。 AWS Database Migration Service AWS DMS为防止这种不匹配，可以将 VARCHAR2 (1) 数据类型转换为布尔数据类型。

VARCHAR2 数据类型存储可变长度的文本字符串， VARCHAR2(1) 表示该字符串的长度为 1 个字符或 1 个字节。有关更多信息 VARCHAR2，请参阅 [Oracle 内置数据类型](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020)（Oracle 文档）。

在此模式中，在样本源数据表列中， VARCHAR2(1) 数据要么是 **Y**（表示 “是”），要么*是* **N**（表示 “*否*”）。 此模式包括使用 AWS DMS 和 AWS Schema Conversion Tool (AWS SCT) 将此数据类型从 VARCHAR2 (1) 中的 **Y** 和 **N** 值转换为布尔值中的**真**值或**假**值的说明。

**目标受众**

建议那些有使用 AWS DMS将 Oracle 数据库迁移至 Aurora PostgreSQL 兼容版经验的人使用此模式。完成迁移后，请遵守[将 Oracle 转换为 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.ToPostgreSQL.html)（文档）中的建议。AWS SCT 

## 先决条件和限制
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的.
+ 确认您的环境已为 Aurora 做好准备，包括设置凭证、权限和安全组。有关更多信息，请参阅[设置 Amazon Aurora 环境](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html)（Aurora 文档）。
+ 一个源 Amazon RDS for Oracle 数据库，其中包含一个包含 VARCHAR2 (1) 个数据的表列。
+ 目标 Amazon Aurora PostgreSQL-Compatible 数据库实例。有关更多信息，请参阅 [创建数据库集群并连接到 Aurora PostgreSQL 数据库集群上的数据库](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html#CHAP_GettingStarted.AuroraPostgreSQL.CreateDBCluster)（Aurora 文档）。

**产品版本**
+ Amazon RDS for Oracle 版本 12.1.0.2 或更高版本。
+ AWS DMS 版本 3.1.4 或更高版本。有关更多信息，请参阅[使用 Oracle 数据库作为源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)和[使用 PostgreSQL 数据库作为目标 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)（文档）。AWS DMS 我们建议您使用最新版本的， AWS DMS 以获得最全面的版本和功能支持。
+ AWS Schema Conversion Tool (AWS SCT) 版本 1.0.632 或更高版本。我们建议您使用最新版本的， AWS SCT 以获得最全面的版本和功能支持。
+ Aurora 支持 [PostgreSQL-Compatibl 的数据库引擎版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html) 列出的 PostgreSQL 版本（Aurora 文档）。

## 架构
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-architecture"></a>

**源技术堆栈**

Amazon RDS for Oracle 数据库实例

**目标技术堆栈**

Amazon Aurora PostgreSQL-Compatible 数据库实例

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

![\[将数据类型从 VARCHAR2 (1) 更改为布尔值\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5d4dc568-20d8-4883-a942-21c81039d8e6/images/9fd82ae2-56e6-439c-b4cd-9e74fe77b480.png)


## 工具
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-tools"></a>

**AWS 服务**
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到云和本地设置的组合中， AWS 云 或者迁移到云端和本地设置的组合之间。
+ [Amazon Relational Database Service（Amazon RDS）for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 可帮助您在 AWS 云中设置、操作和扩缩 Oracle 关系数据库。
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。

**其他服务**
+ [Oracle SQL Developer](https://docs.oracle.com/en/database/oracle/sql-developer/) 是一个集成的开发环境，可简化传统部署和基于云的部署中 Oracle 数据库的开发和管理。在这种模式中，您可以使用此工具连接至 Amazon RDS for Oracle 数据库实例并查询数据。
+ [pgAdmin](https://www.pgadmin.org/docs/) 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面，可帮助您创建、维护和使用数据库对象。在这种示例中，您可使用此工具连接到 Aurora 数据库实例并查询数据。

## 操作说明
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建数据库迁移报告。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.html) | 数据库管理员、开发人员 | 
| 在目标数据库上禁用外键约束。 | 在 PostgreSQL 中，外键通过使用触发器实现。在满载阶段，每次 AWS DMS 加载一个表。强烈建议您在完全加载期间使用以下方法之一禁用外键约束：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.html)如果禁用外键约束不可行，请为父表和子表特定的主数据创建 AWS DMS 迁移任务。 | 数据库管理员、开发人员 | 
| 禁用目标数据库的主键与唯一键。 | 使用以下命令禁用目标数据库的主键和约束。这有助于提高初始加载任务表现。<pre>ALTER TABLE <table> DISABLE PRIMARY KEY;</pre><pre>ALTER TABLE <table> DISABLE CONSTRAINT <constraint_name>;</pre> | 数据库管理员、开发人员 | 
| 创建初始加载任务。 | 在中 AWS DMS，为初始加载创建迁移任务。有关说明，请参阅[创建任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)。对于迁移方法，请选择**迁移现有数据**。此迁移方法在 API 中****调用`Full Load`。暂时不要启动此任务。 | 数据库管理员、开发人员 | 
| 编辑初始加载任务设置。 | 编辑任务设置，以添加数据验证。这些验证设置必须在 JSON 文件内创建。有关说明和示例，请参见[指定任务设置](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.html)。添加以下验证：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.html)若要验证数据迁移的其余部分，请在任务中启用数据验证。有关更多信息，请参阅[数据验证任务设置](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.DataValidation.html)。 | AWS 管理员，数据库管理员 | 
| 创建持续复制任务。 | 在中 AWS DMS，创建迁移任务，使目标数据库与源数据库保持同步。有关说明，请参阅[创建任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)。对于迁移方法，请选择**仅复制数据更改**。暂时不要启动此任务。 | 数据库管理员 | 

### 测试迁移任务
<a name="test-the-migration-tasks"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建用于测试的样本数据。 | 在源数据库中，创建包含用于测试目的的数据的示例表。 | 开发者版 | 
| 确认没有冲突活动。 | 使用 `pg_stat_activity` 检查服务器上是否存在任何可能影响迁移的活动。有关更多信息，请参阅[统计数据收集器](https://www.postgresql.org/docs/current/monitoring-stats.html)（PostgreSQL 文档）。 | AWS 管理员 | 
| 启动 AWS DMS 迁移任务。 | 在 AWS DMS 控制台的 “控制**台**” 页面上，启动您在上一篇长篇故事中创建的初始加载和正在进行的复制任务。 | AWS 管理员 | 
| 监控任务和表加载状态。 | 在迁移过程中，监控[任务状态](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Tasks.Status)和[表状态](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Tasks.CustomizingTasks.TableState)。初始加载任务完成后，在**表统计**选项卡上：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.html) | AWS 管理员 | 
| 验证迁移结果。 | 使用 pgAdmin 在目标数据库上查询表。查询成功表示数据已成功迁移。 | 开发者版 | 
| 在目标数据库添加主键和外键。 | 在目标数据库创建主键和外键。有关更多信息，请参阅[更改表](https://www.postgresql.org/docs/current/sql-altertable.html)（PostgreSQL 网站）。 | 数据库管理员 | 
| 清理测试数据。 | 在源数据库和目标数据库，清理为单元测试创建的数据。 | 开发者版 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 完成迁移。 | 重复前面的操作说明，使用真实的源数据*测试迁移任务*。将数据从源数据库迁移至目标数据库。 | 开发者版 | 
| 验证源数据库和目标数据库是否同步。 | 验证源数据库和目标数据库是否同步。有关更多信息和说明，请参阅 [AWS DMS DMS 数据验证](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)。 | 开发者版 | 
| 停止源数据库。 | 停止 Amazon RDS for Oracle 数据库。有关说明，请参阅[暂时停止 Amazon RDS 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_StopInstance.html)。停止源数据库后，中的 AWS DMS 初始加载和正在进行的复制任务将自动停止。无需执行其他操作即可停止上述任务。 | 开发者版 | 

## 相关资源
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-resources"></a>

**AWS 参考**
+ 使用和[（规范性指南）将 Oracle 数据库迁移到 Aurora PostgreSQ AWS DMS L AWS SCT](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.html)AWS 
+ [将 Oracle 转换为适用于 PostgreSQL 的亚马逊 RDS 或亚马逊 Aurora PostgreSQL（文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.ToPostgreSQL.html)）AWS SCT 
+ [AWS DMS 工作原理](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.html)（AWS DMS 文档）

**其他参考资料**
+ [布尔数据类型](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-boolean/)（PostgreSQL 文档）
+ [Oracle 内置数据类型](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020)（Oracle文档）
+ [pgAdmin](https://www.pgadmin.org/)（pgAdmin 网站）
+ [SQL Developer](https://www.oracle.com/database/technologies/appdev/sql-developer.html)（Oracle网站）

**教程和视频**
+ [入门 AWS DMS](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)
+ [AWS DMS简介](https://www.youtube.com/watch?v=ouia1Sc5QGo)（视频）
+ [了解 Amazon RDS](https://www.youtube.com/watch?v=eMzCI7S1P9M)（视频）

## 附加信息
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-additional"></a>

**数据验证脚本**

以下数据验证脚本将 **1** 转换为 **Y**，将 **0** 转换为 **N**。 这有助于 AWS DMS 任务成功完成并通过表验证。

```
{
"rule-type": "validation",
"rule-id": "5",
"rule-name": "5",
"rule-target": "column",
"object-locator": {
"schema-name": "ADMIN",
"table-name": "TEMP_CHRA_BOOL",
"column-name": "GRADE"
},
"rule-action": "override-validation-function",
"target-function": "case grade when '1' then 'Y' else 'N' end"
        }
```

脚本中的 `case` 语句执行验证。如果验证失败，则在目标数据库实例上的 **public.awsdms\$1validation\$1failures\$1v1** 表中 AWS DMS 插入一条记录。此记录包含表名、错误时间，以及源表和目标表中不匹配值的详细信息。

如果您没有将此数据验证脚本添加到 AWS DMS 任务中，并且数据已插入目标表中，则该 AWS DMS 任务会将验证状态显示为 “**不匹配的记录**”。

在 AWS SCT 转换过程中， AWS DMS 迁移任务将 VARCHAR2 (1) 数据类型的数据类型更改为布尔值，并在`"NO"`列上添加主键约束。

# 在 Aurora PostgreSQL 兼容中创建应用程序用户和角色
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible"></a>

*Abhishek Verma，Amazon Web Services*

## Summary
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-summary"></a>

迁移到 Amazon Aurora PostgreSQL 兼容版时，必须在 Aurora PostgreSQL 兼容数据库中创建源数据库上存在的数据库用户和角色。您可以使用两种不同的方法在 Aurora PostgreSQL 兼容中创建用户和角色：
+ 在目标数据库中使用与源数据库中类似的用户和角色。在这种方法中，从源数据库中提取用户和角色的数据定义语言 (DDLs)。然后，它们将被转换并应用于目标 Aurora PostgreSQL 兼容数据库。例如，博客文章[使用 SQL 将用户、角色和授权从 Oracle 映射到 PostgreSQL](https://aws.amazon.com/blogs/database/use-sql-to-map-users-roles-and-grants-from-oracle-to-postgresql)中介绍了如何使用从 Oracle 源数据库引擎中提取。
+ 使用在开发、管理以及在数据库中执行其他相关操作时常用的标准化用户和角色。这包括由相应用户执行的只读、读/写、开发、管理和部署操作。

此模式包含在标准化用户和角色方法所需 Aurora PostgreSQL 兼容中创建用户和角色所需授权。用户和角色创建步骤与向数据库用户授予最低权限的安全策略保持一致。下表列出了用户、其对应的角色及其在数据库上的详细信息。


| 
| 
| Users | 角色 | 用途 | 
| --- |--- |--- |
| `APP_read` | `APP_RO` | 用于对架构 `APP` 的只读访问 | 
| `APP_WRITE` | `APP_RW` | 用于对架构 `APP` 的写入和读取操作 | 
| `APP_dev_user` | `APP_DEV` | 用于架构 `APP_DEV` 上的开发目的，对架构 `APP` 具有只读访问权限 | 
| `Admin_User` | `rds_superuser` | 用于对数据库执行管理员操作 | 
| `APP` | `APP_DEP` | 用于在 `APP` 架构下创建对象，以及在 `APP` 架构中部署对象 | 

## 先决条件和限制
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-prereqs"></a>

**先决条件**
+ 活跃 Amazon Web Services (AWS) account
+ PostgreSQL 数据库、Amazon Aurora PostgreSQL 兼容版数据库或适用于 PostgreSQL 的 Amazon Relational Database Service（Amazon RDS）数据库

**产品版本**
+ 所有 PostgreSQL 版本

## 架构
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-architecture"></a>

**源技术堆栈 **
+ 任何数据库

**目标技术堆栈 **
+ 兼容 Amazon Aurora PostgreSQL

**目标架构**

下图显示了 Aurora PostgreSQL 兼容数据库中的用户角色和架构架构。

![\[Aurora PostgreSQL 兼容数据库的用户角色和模式架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/80105a81-e3d1-4258-b3c1-77f3a5e78592/images/b95cb9bc-8bf7-47d1-92e7-66cfb37d7ce7.png)


                                                                                                                                    

**自动化和扩缩**

此模式包含用户、角色和架构创建脚本，您可以多次运行这些脚本，而不会对源数据库或目标数据库的现有用户产生任何影响。

## 工具
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-tools"></a>

**Amazon Web Services**
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。

**其他服务**
+ [psql](https://www.postgresql.org/docs/current/app-psql.html) 是一个基于终端的前端工具，随每个 PostgreSQL 数据库安装一起安装。它有一个命令行界面，用于运行 SQL、PL-PGSQL 和操作系统命令。
+ [pgAdmin](https://www.pgadmin.org/) 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面，可帮助您创建、维护和使用数据库对象。

## 操作说明
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-epics"></a>

### 创建用户和角色
<a name="create-the-users-and-roles"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建部署用户。 | 部署用户 `APP` 将用于在部署期间创建和修改数据库对象。使用以下脚本在架构 `APP` 中创建部署用户角色 `APP_DEP`。验证访问权限以确保此用户仅具有在所需架构 `APP` 中创建对象的权限。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) | 数据库管理员 | 
| 创建只读用户。 | 只读用户 `APP_read` 将用于在架构 `APP` 中执行只读操作。使用以下脚本创建只读用户。验证访问权限以确保此用户仅具有读取架构 `APP` 中的对象的权限，并自动授予对架构 `APP` 中创建的任何新对象的读取访问权限。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) | 数据库管理员 | 
| 创建 read/write 用户。 | 该 read/write 用户`APP_WRITE`将用于对架构执行读取和写入操作`APP`。使用以下脚本创建 read/write 用户并授予其`APP_RW`角色。验证访问权限以确保此用户仅对架构 `APP` 中的对象具有读写权限，并自动授予对架构`APP`中创建的任何新对象的读取和写入访问权限。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) |  | 
| 创建管理员用户。 | 管理员用户 `Admin_User` 将用于对数据库执行管理操作。这些操作的示例包括 `CREATE ROLE` 和 `CREATE DATABASE`。`Admin_User` 使用内置角色 `rds_superuser` 对数据库执行管理操作。使用以下脚本在数据库中创建并测试管理员用户 `Admin_User` 的权限。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) | 数据库管理员 | 
| 创建开发用户。 | 开发用户 `APP_dev_user` 将有权在其本地架构 `APP_DEV` 中创建对象，并有权在架构 `APP` 中读取访问权限。使用以下脚本在数据库中创建和测试用户 `APP_dev_user` 的权限。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) | 数据库管理员 | 

## 相关资源
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-resources"></a>

**PostgreSQL 文档**
+ [CREATE ROLE](https://www.postgresql.org/docs/9.1/sql-createrole.html)
+ [CREATE USER](https://www.postgresql.org/docs/8.0/sql-createuser.html)
+ [预定义路由](https://www.postgresql.org/docs/14/predefined-roles.html)

 

## 附加信息
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-additional"></a>

**PostgreSQL 14 增强功能**

PostgreSQL 14 提供了一组预定义的角色，这些角色允许访问某些常用的特权功能和信息。管理员（包括具有 `CREATE ROLE` 权限的角色）可以将这些角色或其环境中的其他角色授予用户，从而为他们提供对指定功能和信息的访问权限。

管理员可以使用 `GRANT` 命令授予用户访问这些角色的权限。例如，要向 `Admin_User` 授予 `pg_signal_backend` 角色，可以运行以下命令。

```
GRANT pg_signal_backend TO Admin_User;
```

`pg_signal_backend` 角色旨在允许管理员启用受信任的非超级用户角色向其他后端发送信号。有关更多信息，请参阅 [PostgreSQL 14 增强功能](https://www.postgresql.org/docs/14/predefined-roles.html)。

**微调访问**

在某些情况下，可能需要为用户提供更精细的访问（例如，基于表的访问或基于列的访问）。在这种情况下，可以创建其他角色来向用户授予这些权限。有关更多信息，请参阅 [PostgreSQL 授予](https://www.postgresql.org/docs/8.4/sql-grant.html)。

# 通过使用兼容 PostgreSQL 的 Aurora 全局数据库来模拟 Oracle 灾难恢复
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database"></a>

*HariKrishna Boorgadda，Amazon Web Services*

## Summary
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-summary"></a>

企业灾难恢复 (DR) 的最佳实践基本上包括设计和实施容错硬件和软件系统，这些系统可以在灾难中幸存下来（*业务连续性*）并恢复正常运营（*业务恢复*），干预最少，理想情况下不会丢失数据。构建容错环境以满足企业灾难恢复目标，这可能既昂贵又耗时，并且需要企业的坚定承诺。

Oracle Database 提供了三种不同的灾难恢复方法，与任何其他保护 Oracle 数据的方法相比，这些方法可提供最高级别的数据保护和可用性。
+ Oracle 零数据丢失恢复设备
+ Oracle Active Data Guard
+ 甲骨文 GoldenGate

这种模式提供了一种使用 Amazon Aurora 全球数据库模拟 Oracle GoldenGate 灾难恢复的方法。参考架构使用 Oracle 在三个 AWS 区域 GoldenGate 进行灾难恢复。该模式将源架构重塑为基于 Amazon Aurora PostgreSQL–Compatible Edition 的云原生 Aurora 全局数据库。

Aurora 全局数据库专为遍布全球的应用程序而设计。一个 Aurora 数据库跨越多个 AWS 区域以及多达五个辅助区域。Aurora 全局数据库提供以下功能：
+ 物理存储级复制
+ 低延迟全局读取
+ 从区域范围内的中断中快速灾难恢复
+ 快速跨区域迁移
+ 跨区域复制延迟低
+ Little-to-no 对数据库的性能影响

有关 Aurora 全局数据库功能和优势的更多信息，请参阅[使用 Amazon Aurora 全局数据库](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database-overview)。有关计划外和托管失效转移的更多信息，请参阅[在 Amazon Aurora Global Database 中使用失效转移](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-disaster-recovery.html#aurora-global-database-failover)。

## 先决条件和限制
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account 
+ 用于应用程序连接 Java 数据库连接 (JDBC) PostgreSQL 驱动程序
+ Aurora 全局数据库基于 Amazon Aurora PostgreSQL-Compatible Edition
+ 基于 Aurora PostgreSQL-Compatible 的 Oracle Real Application Clusters (RAC) 数据库迁移到 Aurora 全局数据库

**Aurora 全局数据库的限制**
+ Aurora 全局数据库不适用于所有 AWS 区域。有关支持的区域列表，请参阅 [含 Aurora PostgreSQL 的 Aurora 全局数据库](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.apg)。
+ 有关不支持的功能和 Aurora 全局数据库的其他限制的信息，请参阅 [Amazon Aurora 全局数据库的限制](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database.limitations)。

**产品版本**
+ Amazon Aurora PostgreSQL–Compatible Edition 10.14 或更高版本

## 架构
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-architecture"></a>

**源技术堆栈****  **
+ Oracle RAC 四节点数据库
+ 甲骨文 GoldenGate

**源架构******

下图显示了使用 Oracle 在不同的 AWS 区域中使用四节点 Oracle RAC 复制的三个集群。 GoldenGate

![\[Oracle RAC 位于一个主要区域和两个次要区域。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/11d4265b-31af-4ebf-a766-24196193ee01/images/9fc740fc-d339-422e-beaf-1f65690c9d14.png)


**目标技术堆栈**
+ 基于 Aurora PostgreSQL–Compatible 的三集群 Amazon Aurora Global Database，其中一个集群位于主区域，两个集群位于不同的辅助区域

**目标架构**

![\[Amazon Aurora 位于一个主要区域和两个次要区域。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/11d4265b-31af-4ebf-a766-24196193ee01/images/8e3deca9-03f2-437c-9341-795ac17e2b42.png)


## 工具
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-tools"></a>

**Amazon Web Services**
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [Amazon Aurora 全局数据库](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html)跨越多个 AWS 区域，可实现低延迟的全局读取，并可从可能影响整个 AWS 区域 的罕见停机事件中快速恢复。

## 操作说明
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-epics"></a>

### 通过读取器数据库实例添加区域
<a name="add-regions-with-reader-db-instances"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 连接一个或多个 Aurora 辅助集群。 | 在 AWS 管理控制台 上，选择 Amazon Aurora。选择主集群，选择**操作**，然后从下拉列表选择**添加区域**。 | 数据库管理员 | 
| 选择实例类。 | 您可更改辅助集群的实例类。但是我们建议将其与主集群实例类保持相同。 | 数据库管理员 | 
| 添加第三个区域。 | 重复此操作说明中的步骤，在第三个区域中添加集群。 | 数据库管理员 | 

### 对 Aurora 全局数据库进行失效转移
<a name="fail-over-the-aurora-global-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 Aurora 全局数据库删除主集群。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.html) | 数据库管理员 | 
| 重新配置应用程序，以使写入流量转向新提升的集群。 | 使用新升级的集群的端点修改应用程序中的端点。 | 数据库管理员 | 
| 停止向不可用的集群发出任何写操作。 | 停止您删除的集群的应用程序和任何数据操作语言 (DML) 活动。 | 数据库管理员 | 
| 创建一个新的 Aurora 全局数据库。 | 现在您可以创建一个 Aurora 全局数据库，并将新提升的集群用作主集群。 | 数据库管理员 | 

### 启动主集群
<a name="start-the-primary-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从全局数据库中选择要启动的主集群。 | 在 Amazon Aurora 控制台的全局数据库设置，选择主集群。 | 数据库管理员 | 
| 启动集群。 | 在**操作**下拉列表，选择**开始**。此过程可能需要一些时间。操作完成后，刷新屏幕以查看状态，或者在**状态**列中查看集群的当前状态。 | 数据库管理员 | 

### 清理资源
<a name="clean-up-the-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 删除剩余辅助集群。 | 失效转移试点完成后，从全局数据库中删除辅助集群。 | 数据库管理员 | 
| 删除主集群。 | 删除集群。 | 数据库管理员 | 

## 相关的资源
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-resources"></a>
+ [使用 Amazon Aurora 全局数据库](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database-detaching)
+ [使用 Amazon Aurora Global Database 的 Aurora PostgreSQL 灾难恢复解决方案](https://aws.amazon.com/blogs/database/aurora-postgresql-disaster-recovery-solutions-using-amazon-aurora-global-database/)（博客文章）

# 从 SQL Server 迁移到 PostgreSQL 时，对 PII 数据实施 SHA1 哈希处理
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql"></a>

*Rajkumar Raghuwanshi 和 Jagadish Kantubugata，Amazon Web Services*

## Summary
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-summary"></a>

此模式描述了在从 SQL Server 迁移到适用于 PostgreSQL 的亚马逊 RDS 或兼容 Amazon Aurora PostgreSQL 时，如何对电子邮件地址实施安全哈希算法 1 (SHA1) 哈希。电子邮件地址是*个人身份信息*（PII）的一个示例。直接查看其他相关数据或与之配对时可用于合理推断个人身份的信息。

此模式介绍了在不同的数据库归类和字符编码中保持一致的哈希值所面临的挑战，并提供了使用 PostgreSQL 函数和触发器的解决方案。尽管这种模式侧重于 SHA1 哈希，但它可以适应PostgreSQL模块支持的其他哈希算法。`pgcrypto`请务必考虑哈希算法策略的安全影响，如果要处理敏感数据，请咨询安全专家。

## 先决条件和限制
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 检查源 SQL Server 数据库。
+ 目标 PostgreSQL 数据库（Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 兼容版）
+ PL/pgSQL 编码专业知识

**限制**
+ 此模式需要根据使用案例更改数据库级别的排序规则。
+ 尚未评估对大型数据集的性能影响。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

**产品版本**
+ Microsoft SQL Server 2012 或更高版本

## 架构
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-architecture"></a>

**源技术堆栈**
+ SQL Server
+ NET Framework。

**目标技术堆栈**
+ PostgreSQL
+ `pgcrypto`extension

**自动化和扩展**
+ 为了便于维护，可以考虑将哈希函数作为存储过程来实现。
+ 对于大型数据集，则可评估性能并考虑批处理或索引策略。

## 工具
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-tools"></a>

**AWS 服务**
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管式、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩缩 PostgreSQL 部署。
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到云和本地设置的组合中， AWS 云 或者迁移到云端和本地设置的组合之间。
+ [Amazon Relational Database Service Amazon RDS for PostgreSQL ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)可帮助您在 AWS 云中设置、操作和扩展 PostgreSQL 关系数据库。
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。

**其他工具**
+ [pgAdmin](https://www.pgadmin.org/) 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面，可帮助您创建、维护和使用数据库对象。
+ [SQL Server Management Studio（SSMS）](https://learn.microsoft.com/en-us/ssms/sql-server-management-studio-ssms)是用于管理 任何 SQL 基础设施的集成环境。

## 最佳实践
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-best-practices"></a>
+ 使用适当的归类设置来处理目标数据库端的特殊字符。
+ 使用各种电子邮件地址（包括带有非 ASCII 字符的地址）进行彻底全面的测试。
+ 保持应用程序层和数据库层之间大写和小写处理的一致性。
+ 使用哈希值对查询的性能进行基准测试。

## 操作说明
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-epics"></a>

### 分析源哈希算法实现
<a name="analyze-source-hashing-implementation"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看 SQL 服务器代码。 | 要查看生成 SHA1 哈希值的 SQL Server 代码，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 数据工程师、数据库管理员、应用程序开发人员 | 
| 要记录确切的哈希算法和数据转换，请执行以下操作： | 要记录确切的哈希算法和数据转换，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 应用程序开发人员、数据工程师、数据库管理员 | 

### 创建 PostgreSQL 哈希函数
<a name="create-postgresql-hashing-function"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 `pgcrypto` 扩展。 | 要创建 `pgcrypto` 扩展，请使用 `pgAdmin/psql` 运行以下命令：<pre>CREATE EXTENSION pgcrypto;</pre> | 数据库管理员、数据工程师 | 
| 实现 PostgreSQL 函数。 | 实现以下 PostgreSQL 函数来复制 SQL Server 的哈希逻辑。简而言之，此函数会使用以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html)<pre>CREATE OR REPLACE FUNCTION utility.hex_to_bigint ( <br />     par_val character varying, <br />     par_upper character varying DEFAULT 'lower'::character varying) <br />RETURNS bigint <br />LANGUAGE 'plpgsql' <br />AS $BODY$ <br />DECLARE <br />    retnumber bigint; <br />    digest_bytes bytea;<br />BEGIN <br />    if lower(par_upper) = 'upper' <br />    then <br />        digest_bytes := digest(upper(par_val), 'sha1');<br />    else <br />        digest_bytes := digest((par_val), 'sha1');<br />    end if; <br />    retnumber := ('x' || encode(substring(digest_bytes, length(digest_bytes)-10+1), 'hex'))::bit(64)::bigint; <br />    RETURN retnumber; <br />END; <br />$BODY$;</pre> | 数据工程师、数据库管理员、应用程序开发人员 | 
| 测试函数。 | 要测试该函数，请使用来自 SQL Server 的示例数据来验证匹配的哈希值。运行如下命令：<pre>select 'alejandro_rosalez@example.com' as Email, utility.hex_to_bigint('alejandro_rosalez@example.com','upper') as HashValue;<br /><br />--OUTPUT<br />/*<br />email 	        hashvalue<br />"alejandro_rosalez@example.com"	451397011176045063<br />*/<br /></pre> | 应用程序开发人员、数据库管理员、数据工程师 | 

### 实现自动哈希触发器
<a name="implement-triggers-for-automatic-hashing"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在相关表上创建触发器。 | 要在相关表上创建触发器以在插入或更新时自动生成哈希值，请运行以下命令：<pre>CREATE OR REPLACE FUNCTION update_email_hash() <br />RETURNS TRIGGER <br />AS $$ <br />BEGIN <br />    NEW.email_hash = utility.hex_to_bigint(NEW.email, 'upper'); <br />    RETURN NEW; <br />END; <br />$$ LANGUAGE plpgsql;</pre><pre>CREATE TRIGGER email_hash_trigger BEFORE INSERT OR UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_email_hash();</pre> | 应用程序开发人员、数据工程师、数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 开发迁移脚本或使用 AWS DMS。 | 开发迁移脚本或使用 AWS DMS 为现有数据（包括存储在源系统`BIGINT`中的哈希值）填充哈希值。完成以下任务：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 数据工程师、应用程序开发人员、数据库管理员 | 
| 使用新的 PostgreSQL 哈希函数。 | 要使用新的 PostgreSQL 哈希函数以确保一致性，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 应用程序开发人员、数据库管理员、 DevOps 工程师 | 

### 更新应用程序查询
<a name="update-application-queries"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 识别应用程序查询。 | 要识别使用哈希值的应用程序查询，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 应用程序开发人员、数据库管理员、数据工程师 | 
| 修改查询。 | 如有必要，可以修改查询以使用新的 PostgreSQL 哈希函数。执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 应用程序开发人员、数据库管理员、数据工程师 | 

### 测试和评估
<a name="test-and-validate"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 执行测试。 | 要对生产数据的子集执行全面的测试，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 应用程序开发人员、数据工程师、数据库管理员 | 
| 验证哈希值是否匹配。 | 要验证 SQL Server 和 PostgreSQL 之间的哈希值是否匹配，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 应用程序开发人员、数据工程师、数据库管理员 | 
| 验证应用程序功能。 | 要使用迁移的数据和新的哈希实现来验证应用程序功能，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 应用程序开发人员、数据库管理员、数据工程师 | 

## 问题排查
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 哈希值不匹配。 | 验证源和目标之间的字符编码和排序规则。有关更多信息，请参阅在 Amazon A [urora 和 Amazon RDS 上管理 PostgreSQL 中的排序规则更改（博](https://aws.amazon.com/blogs/database/manage-collation-changes-in-postgresql-on-amazon-aurora-and-amazon-rds/)客）。AWS  | 

## 相关资源
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-resources"></a>

**AWS 博客**
+ [在 Amazon Aurora 和 Amazon RDS 上管理 PostgreSQL 中的排序规则更改](https://aws.amazon.com/blogs/database/manage-collation-changes-in-postgresql-on-amazon-aurora-and-amazon-rds/)
+ [采用最佳实践并结合来自实际应用中的经验教训，将 SQL Server 迁移到 Amazon Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-sql-server-to-amazon-aurora-postgresql-using-best-practices-and-lessons-learned-from-the-field/)

**其他资源**
+ [PostgreSQL pgcrypto 模块](https://www.postgresql.org/docs/current/pgcrypto.html)（PostgreSQL 文档）
+ [PostgreSQL 触发函数](https://www.postgresql.org/docs/current/plpgsql-trigger.html)（PostgreSQL 文档）
+ [SQL Server HASHBYTES 函数](https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql)（Microsoftś文档）

# 使用 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)

# 使用兼容 Aurora PostgreSQL 的文件编码将 BLOB 文件加载至文本中
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible"></a>

*hanu Ganesh Gudivada 和 Jeevan Shetty，Amazon Web Services*

## Summary
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-summary"></a>

通常，在迁移过程中，您必须处理从本地文件系统上的文件加载的、非结构化和结构化数据。数据也可采用与数据库字符集不同的字符集。

这些文件包含以下类型数据：
+ **元数据** - 此数据描述了文件结构。
+ **半结构化数据** - 这些是特定格式的文本字符串，例如 JSON 或 XML。你可以对此类数据做出断言，例如将始终以“<”开头” 或不包含任何换行符”。
+ **全文** - 此数据通常包含所有类型的字符，包括换行符和引号字符。它还可能由 UTF-8 格式的多字节字符构成。
+ **二进制数据**-此数据可能包含字节或字节组合，包括空值和 end-of-file标记。

混合加载这些类型的数据，可能是一项挑战。

该模式可用于本地 Oracle 数据库、亚马逊弹性计算云 (AWS) 云上的亚马逊弹性计算云 (Amazon EC2) 实例上的 Oracle 数据库，以及适用于 Oracle 数据库的亚马逊关系数据库服务 (Amazon RDS)。例如，这种模式使用的是与 Amazon Aurora PostgreSQL-Compatible Edition。

在 Oracle 数据库中，借助 `BFILE`（二进制文件）指针、`DBMS_LOB` 软件包和 Oracle 系统函数，您可以从文件加载并使用字符编码转换为 CLOB。由于 PostgreSQL 在迁移到 Amazon Aurora PostgreSQL-Compatible Edition 数据库时不支持 BLOB 数据类型，因此必须将这些函数转换为兼容 PostgreSQL 的脚本。

此模式提供了两种将文件加载至兼容 Amazon Aurora PostgreSQL 的数据库中的单个数据库列中的方法：
+ 方法 1 — 您通过使用带有编码选项的扩展 `table_import_from_s3` `aws_s3` 函数，从 Amazon Simple Storage Service (Amazon S3) 存储桶导入数据。
+ 方法 2 — 在数据库外部编码为十六进制，然后解码以在数据库内部查看 `TEXT`。

我们建议使用 Aurora PostgreSQL，因为PostgreSQL-Compatible 可以直接与 `aws_s3` 扩展集成。

本文介绍：将包含电子邮件模板的平面文件加载到 Amazon Aurora PostgreSQL-Compatible 数据库中的示例，该模板具有多字节字符和不同的格式。

## 先决条件和限制
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 一个 Amazon RDS 实例或 Aurora PostgreSQL-Compatible 实例
+ 对 SQL 和 Relational Database Management System (RDBMS) 有基本了解
+ Amazon Simple Storage Service (Amazon S3) 存储桶。
+ 了解 Oracle 和 PostgreSQL 中的系统函数
+ RPM Packag HexDump e-XXD-0.1.1（包含在亚马逊 Linux 2 中）
**注意**  
即将终止对 Amazon Linux 2 的支持。欲了解更多信息，请参阅[亚马逊 Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/)。

**限制**
+ 对于 `TEXT` 数据类型，可以存储的最长字符串约为 1 GB。

**产品版本**
+ Aurora 支持 [Amazon Aurora PostgreSQL 更新](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html)中列出的 PostgreSQL 版本。

## 架构
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-architecture"></a>

**目标技术堆栈**
+ Aurora PostgreSQL-Compatible

**目标架构**

*方法 1 — 使用 aws\$1s3.table\$1import\$1from\$1s3*

将包含多字节字符和自定义格式的电子邮件模板文件从本地服务器传输至 Amazon S3。本文提供的自定义数据库函数使用带 `file_encoding` 的 `aws_s3.table_import_from_s3` 函数将文件加载至数据库，并将查询结果以 `TEXT` 数据类型的形式返回。

![\[从本地服务器到 Aurora 数据库 TEXT 输出的四步流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/9c46b385-e8a0-4e50-b856-d522c44d79e3.png)


1. 文件将传输至 Staging S3 存储桶。

1. 文件将上传至 Amazon Aurora PostgreSQL-Compatible 数据库。

1. 使用 pgAdmin 客户端，将自定义 `load_file_into_clob` 函数部署至 Aurora 数据库。

1. 自定义函数内部 `table_import_from_s3` 与 file\$1encoding 一起使用。该函数的输出是通过使用 `array_to_string` 和 `array_agg` 作为 `TEXT` 输出获得。

*方法 2 — 在数据库外部编码为十六进制，然后解码以查看数据库内文本*

来自本地服务器或本地文件系统的文件将转换至十六进制转储。然后，该文件将作为 `TEXT` 字段导入 PostgreSQL。

![\[使用十六进制转储的三步流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/563038ca-f890-4874-85df-d0f82d99800a.png)


1. 使用 `xxd -p` 选项在命令行中将文件转换为十六进制转储。

1. 使用 `\copy` 选项将十六进制转储文件上传至兼容 Aurora PostgreSQL 文件，然后将十六进制转储文件解码为二进制。

1. 编码二进制数据，以返回为 `TEXT`。

## 工具
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-tools"></a>

**Amazon Web Services**
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。

**其他工具**
+ [pgadmin4](https://www.pgadmin.org/) 是 PostgreSQL 的开源管理和开发平台。pgadmin4 可以在 Linux、Unix、Mac OS 和 Windows 上使用 postgreSQL 管理 PostgreSQL。  

## 操作说明
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-epics"></a>

### 方法 1：将数据从 Amazon S3 导入至兼容 Amazon S3 的 Aurora
<a name="approach-1-import-data-from-amazon-s3-to-aurora-postgresql-compatible"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动实 EC2 例。 | 有关启动实例的说明，请参阅[启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)。 | 数据库管理员 | 
| 安装 PostgreSQL 客户端 pgAdmin 工具。 | 下载并安装 [pgAdmin](https://www.pgadmin.org/download/)。 | 数据库管理员 | 
| 创建一个 IAM 策略。 | 创建名为 `aurora-s3-access-pol`的 AWS Identity and Acess Management (IAM) policy，用于授予对存储文件的 S3 存储桶的访问权限。请使用以下代码，将 `<bucket-name>` 替换为您的 S3 存储桶名称。<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:GetObject",<br />                "s3:AbortMultipartUpload",<br />                "s3:DeleteObject",<br />                "s3:ListMultipartUploadParts",<br />                "s3:PutObject",<br />                "s3:ListBucket"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::<bucket-name>/*",<br />                "arn:aws:s3:::<bucket-name>"<br />            ]<br />        }<br />    ]<br />}</pre> | 数据库管理员 | 
| 创建 IAM 角色，将对象从 Amazon S3 导入至 Aurora PostgreSQL-Compatible。 | 使用以下代码创建名`aurora-s3-import-role`为[AssumeRole](https://docs.amazonaws.cn/en_us/STS/latest/APIReference/API_AssumeRole.html)信任关系的 IAM 角色。 `AssumeRole`允许 Aurora 代表您访问其他 AWS 服务。<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow","Principal": {<br />        "Service": "rds.amazonaws.com"<br />      },"Action": "sts:AssumeRole"<br />    }<br />  ]<br />}<br /></pre> | 数据库管理员 | 
| 将 IAM 角色与集群关联。 | 要将 IAM 角色与 Aurora PostgreSQL-Compatible 数据库集群关联，请运行以下 AWS CLI 命令。将 `<Account-ID>` 更改为托管 Aurora PostgreSQL-Compatible 数据库的 Amazon Web Services account ID。这使与 Aurora PostgreSQL 兼容的数据库可访问 S3 存储桶。<pre>aws rds add-role-to-db-cluster --db-cluster-identifier aurora-postgres-cl<br />--feature-name s3Import --role-arn arn:aws:iam::<Account-ID>:role/aurora-s3-import-role</pre> | 数据库管理员 | 
| 将示例上传到 Amazon S3。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | 数据库管理员、应用程序所有者 | 
| 部署自定义函数。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | 应用程序所有者，数据库管理员 | 
| 运行可将数据导入数据库的自定义函数。 | 运行以下 SQL 命令，将尖括号中的项目替换为相应值。<pre>select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>运行命令之前，请将尖括号中的项目替换为相应的值，如以下示例所示。<pre>Select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>该命令从 Amazon S3 加载文件并将输出返回为 `TEXT`。 | 应用程序所有者，数据库管理员 | 

### 方法 2：在本地 Linux 系统中将模板文件转换至十六进制转储
<a name="approach-2-convert-the-template-file-into-a-hex-dump-in-a-local-linux-system"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将模板文件转换至十六进制转储。 | Hexdump 实用程序以十六进制、十进制、八进制或 ASCII 格式显示二进制文件内容。该 `hexdump` 命令是 `util-linux` 软件包的一部分，已预先安装在 Linux 发行版中。Hexdump RPM 软件包也是 Amazon Linux 2 的一部分。(: 亚马逊 Linux 2 的支持已接近终止。 欲了解更多信息，请参阅[亚马逊 Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).)要将文件内容转换至十六进制转储，请运行以下 Shell 命令。<pre>xxd -p </path/file.vm> | tr -d '\n' > </path/file.hex></pre>将路径和文件替换为相应的值，如以下示例所示。<pre>xxd -p employee.salary.event.notification.email.vm | tr -d '\n' > employee.salary.event.notification.email.vm.hex</pre> | 数据库管理员 | 
| 将十六进制转储文件加载至数据库架构。 | 使用以下命令将十六进制转储文件加载至 Aurora PostgreSQL-Compatible 数据库。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | 数据库管理员 | 

## 相关资源
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-resources"></a>

**参考**
+ [将 PostgreSQL 数据库用作 AWS Database Migration Service 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [参照 PostgreSQL Compatibility (12.4) 迁移手册将 Oracle Database 19c 迁移至 Amazon Aurora](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [创建 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)
+ [将 IAM 角色与 Amazon Aurora MySQL 数据库集群关联](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html)
+ [pgAdmin](https://www.pgadmin.org/)

**教程**
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)
+ [从 Oracle 迁移到 Amazon Aurora](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

## 附加信息
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-additional"></a>

**load\$1file\$1into\$1clob custom function**

```
CREATE OR REPLACE FUNCTION load_file_into_clob(
    s3_bucket_name text,
    s3_bucket_region text,
    file_name text,
    file_delimiter character DEFAULT '&'::bpchar,
    file_encoding text DEFAULT 'UTF8'::text)
    RETURNS text
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
    blob_data BYTEA;
    clob_data TEXT;
    l_table_name CHARACTER VARYING(50) := 'file_upload_hex';
    l_column_name CHARACTER VARYING(50) := 'template';
    l_return_text TEXT;
    l_option_text CHARACTER VARYING(150);
    l_sql_stmt CHARACTER VARYING(500);
        
BEGIN
    
    EXECUTE format ('CREATE TEMPORARY TABLE %I (%I text, id_serial serial)', l_table_name, l_column_name);
    
    l_sql_stmt := 'select ''(format text, delimiter ''''' || file_delimiter || ''''', encoding ''''' || file_encoding ||  ''''')'' ';
    
    EXECUTE FORMAT(l_sql_stmt)
    INTO l_option_text;
    
    EXECUTE FORMAT('SELECT aws_s3.table_import_from_s3($1,$2,$6, aws_commons.create_s3_uri($3,$4,$5))')
    INTO l_return_text
    USING l_table_name, l_column_name, s3_bucket_name, file_name,s3_bucket_region,l_option_text;
    
    EXECUTE format('select array_to_string(array_agg(%I order by id_serial),E''\n'') from %I', l_column_name, l_table_name)
    INTO clob_data;
    
    drop table file_upload_hex;
    
    RETURN clob_data;
END;
$BODY$;
```

**电子邮件模板**

```
######################################################################################
##                                                                                    ##
##    johndoe Template Type: email                                                    ##
##    File: johndoe.salary.event.notification.email.vm                                ##
##    Author: Aimée Étienne    Date 1/10/2021                                                ##
##  Purpose: Email template used by EmplmanagerEJB to inform a johndoe they         ##
##        have been given access to a salary event                                    ##
##    Template Attributes:                                                             ##
##        invitedUser - PersonDetails object for the invited user                        ##
##        salaryEvent - OfferDetails object for the event the user was given access    ##
##        buyercollege - CompDetails object for the college owning the salary event    ##
##        salaryCoordinator - PersonDetails of the salary coordinator for the event    ##
##        idp - Identity Provider of the email recipient                                ##
##        httpWebRoot - HTTP address of the server                                    ##
##                                                                                    ##
######################################################################################

$!invitedUser.firstname $!invitedUser.lastname,

Ce courriel confirme que vous avez ete invite par $!salaryCoordinator.firstname $!salaryCoordinator.lastname de $buyercollege.collegeName a participer a l'evenement "$salaryEvent.offeringtitle" sur johndoeMaster Sourcing Intelligence.

Votre nom d'utilisateur est $!invitedUser.username

Veuillez suivre le lien ci-dessous pour acceder a l'evenement.

${httpWebRoot}/myDashboard.do?idp=$!{idp}

Si vous avez oublie votre mot de passe, utilisez le lien "Mot de passe oublie" situe sur l'ecran de connexion et entrez votre nom d'utilisateur ci-dessus.

Si vous avez des questions ou des preoccupations, nous vous invitons a communiquer avec le coordonnateur de l'evenement $!salaryCoordinator.firstname $!salaryCoordinator.lastname au ${salaryCoordinator.workphone}.

*******

johndoeMaster Sourcing Intelligence est une plateforme de soumission en ligne pour les equipements, les materiaux et les services.

Si vous avez des difficultes ou des questions, envoyez un courriel a support@johndoeMaster.com pour obtenir de l'aide.
```

# 使用并使用和，将 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 云 或迁移。此模式 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 脚本：`$ python run_aws_sct.py database_migration.txt`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/)，然后创建根据您的要求配置的复制实例。有关更多信息，请参阅 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`。有关更多信息，请参阅 AWS DMS 文档中的[创建源端点和目标端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)。 | 数据库管理员 | 
| 创建目标端点。 | 在 AWS DMS 控制台上，选择**终端节点**，然后根据需要为 PostgreSQL 数据库创建目标终端节点。 有关更多信息，请参阅 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'`）。您可以在 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`。 有关更多信息，请参阅 AWS 支持 文档中的[如何排除 AWS DMS 终端节点连接故障](https://aws.amazon.com/premiumsupport/knowledge-center/dms-endpoint-connectivity-failures/)。 | 
| 满载运行失败。 | 检查源数据库和目标数据库是否具有匹配的数据类型与大小。 有关更多信息，请参阅 AWS DMS 文档[AWS DMS中的迁移任务疑难解答](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Troubleshooting.html)。 | 
| 您遇到验证运行错误。 | 检查该表是否有主键，因为非主键表未经验证。如果表有主键和错误，请检查源端点中的额外连接属性是否有 `numberDataTypeScale=-2`。有关更多信息，请参阅 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)

# 使用 AWS DMS 在 SSL 模式下将 Amazon RDS for Oracle 迁移到 Amazon RDS for PostgreSQL
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms"></a>

*Pinesh Singal，Amazon Web Services*

## Summary
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-summary"></a>

此模式提供了将 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 数据库。

## 先决条件和限制
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户 
+ 仅使用 ***rds-ca-rsa2048***-g1 配置的 Amazon RDS 数据库证书颁发机构 (CA) 
  + ***rds-ca-2019*** 证书已于 2024 年 8 月到期。
  + ***rds-ca-2015*** 证书已于 2020 年 3 月 5 日过期。
+ AWS SCT
+ AWS DMS
+ pgAdmin
+ SQL 工具（例如 SQL Developer 或 SQL\$1Plus）

**限制**
+ 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 实例

## 架构
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-architecture"></a>

**源技术堆栈**
+ 版本 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 模式。

![\[数据在 RDS for Oracle 与 AWS DMS 之间以及 AWS DMS 与 RDS for PostgreSQL 之间移动。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/7098e2a3-b456-4e14-8881-c97145aef483/images/55b50ff7-1e6a-4ff0-9bcd-2fd419d5316a.png)


## 工具
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-tools"></a>

**Amazon Web Services**
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ [Amazon Relational Database Service (Amazon RDS) for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展 Oracle 关系数据库。
+ [Amazon Relational Database Service（Amazon RDS）for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展PostgreSQL 关系数据库。
+ [AWS Schema Conversion Tool（AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。

**其他服务**
+ [pgAdmin](https://www.pgadmin.org/) 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面，可帮助您创建、维护和使用数据库对象。

## 最佳实践
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-best-practices"></a>

Amazon RDS 提供新 CA 证书作为 AWS 最佳安全实践。有关新证书和支持的 AWS 区域的信息，请参阅[使用 SSL/TLS 加密与数据库实例或集群的连接](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)。

如果您的 RDS 实例当前使用的是 CA 证书 `rds-ca-2019`，并且您想要升级到 `rds-ca-rsa2048-g1`，请按照[通过修改数据库实例或集群更新 CA 证书](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-updating)或[通过应用维护来更新 CA 证书](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-maintenance-update)中的说明操作。

## 操作说明
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-epics"></a>

### 配置 Amazon RDS for Oracle 实例
<a name="configure-the-amazon-rds-for-oracle-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Oracle 数据库实例。 | 登录您的 Amazon Web Services account，打开 AWS 管理控制台，然后导航到 Amazon RDS 控制台。在控制台上，选择**创建数据库**，然后选择 **Oracle**。 | 常规 AWS、数据库管理员 | 
| 配置安全组。 | 配置入站和出站安全组。 | 常规 AWS | 
| 创建选项组。 | 在与 Amazon RDS for Oracle 数据库相同的 VPC 和安全组中创建选项组。对于**选项**，选择 **SSL**。对于**端口**，选择 **2484** （对于 SSL 连接）。 | 常规 AWS | 
| 配置选项设置。 | 使用以下设置：[\[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-in-ssl-mode-by-using-aws-dms.html) | 常规 AWS | 
| 修改 Oracle 数据库实例的 RDS。 | 将 CA 证书设置为 **rds-ca-rsa2048-g1**。在**选项组**下，附加之前创建的选项组。 | 数据库管理员、常规 AWS | 
| 确认 RDS for Oracle 数据库实例可用。 | 确保 Amazon RDS for Oracle 数据库实例已启动并正在运行，并且数据库架构可访问。要连接到 RDS for Oracle DB，请从命令行使用 `sqlplus` 命令。<pre>$ sqlplus orcl/****@myoracledb.cokmvis0v46q.us-east-1.rds.amazonaws.com:1521/ORCL<br />SQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 15 18:11:07 2019<br />Copyright (c) 1982, 2016, Oracle.  All rights reserved.<br />Last Successful login time: Mon Dec 16 2019 23:17:31 +05:30<br />Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options<br />SQL></pre> | 数据库管理员 | 
| 在 RDS for Oracle 数据库中创建对象和数据。 | 创建对象并在架构中插入数据。 | 数据库管理员 | 

### 配置 Amazon RDS for PostgreSQL 实例
<a name="configure-the-amazon-rds-for-postgresql-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 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-rsa2048-g1**。附加默认参数组或之前创建的参数组，具体取决于您的 PostgreSQL 版本。 | 数据库管理员、常规 AWS | 
| 确认 RDS for PostgreSQL 数据库实例可用。 | 确保 Amazon RDS for PostgreSQL 数据库已启动并正在运行。`psql` 命令通过命令行设置了 `sslmode` 建立 SSL 连接。一种选择是在参数组中设置 `sslmode=1` 并使用 `psql` 连接，而不在命令中包含 `sslmode` 参数。以下输出显示 SSL 连接已建立。<pre>$ psql -h mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com -p 5432 "dbname=pgdb user=pguser"<br />Password for user pguser:<br />psql (11.3, server 11.5)<br />SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)<br />Type "help" for help.<br />pgdb=></pre>第二个选项是在参数组中设置 `sslmode=1`，并在 `psql` 命令中包含 `sslmode` 参数。以下输出显示 SSL 连接已建立。<pre>$ psql -h mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com -p 5432 "dbname=pgdb user=pguser sslmode=require"<br />Password for user pguser: <br />psql (11.3, server 11.5)<br />SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)<br />Type "help" for help.<br />pgdb=></pre> | 数据库管理员 | 

### 配置和运行 AWS SCT
<a name="configure-and-run-aws-sct"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 AWS SCT。 | 安装最新版本的 AWS SCT 应用程序。 | 常规 AWS | 
| 使用 JDBC 驱动程序配置 AWS SCT。 | 下载适用于 Oracle（[ojdbc8.jar](https://download.oracle.com/otn-pub/otn_software/jdbc/233/ojdbc8.jar)）和 PostgreSQL（[postgresql-42.2.5.jar](https://jdbc.postgresql.org/download/postgresql-42.2.19.jar)）的 Java 数据库连接（JDBC）驱动程序。要在 AWS SCT 中配置驱动程序，请依次选择**设置**、**全局设置**和**驱动程序**。 | 常规 AWS | 
| 创建 AWS SCT 项目。 | 使用 Oracle 作为源数据库引擎，使用 Amazon RDS for PostgreSQL 作为目标数据库引擎，创建 AWS SCT 项目和报告：[\[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-in-ssl-mode-by-using-aws-dms.html) | 常规 AWS | 
| 验证数据库对象。 | [\[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-in-ssl-mode-by-using-aws-dms.html) | 数据库管理员、常规 AWS | 

### 配置和运行 AWS DMS
<a name="configure-and-run-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建复制实例。 | [\[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-in-ssl-mode-by-using-aws-dms.html) | 常规 AWS | 
| 导入证书。 | 下载适用于您的 AWS 区域的[证书包（PEM）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions)。该捆绑包中包含 `rds-ca-2019` 中间证书和根证书。该捆绑包还包含 `rds-ca-rsa2048-g1`、`rds-ca-rsa4096-g1` 和 `rds-ca-ecc384-g1` 根 CA 证书。您的应用程序信任存储库只需注册根 CA 证书。 | 常规 AWS | 
| 创建源端点。 | [\[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-in-ssl-mode-by-using-aws-dms.html)有关更多信息，请参阅[使用 Oracle 数据库作为 AWS Database Migration Service 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。 | 常规 AWS | 
| 创建目标端点。 | [\[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-in-ssl-mode-by-using-aws-dms.html)有关更多信息，请参阅[使用 PostgreSQL 数据库作为 AWS Database Migration Service 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)。 | 常规 AWS | 
| 测试端点。 | [\[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-in-ssl-mode-by-using-aws-dms.html) | 常规 AWS | 
| 创建迁移任务。 | 要创建用于完全加载和更改数据捕获 (CDC) 或数据验证的迁移任务，请执行以下操作：[\[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-in-ssl-mode-by-using-aws-dms.html) | 常规 AWS | 
| 计划生产运行。 | 与应用程序所有者等利益相关者确认停机时间，以便在生产系统中运行 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-in-ssl-mode-by-using-aws-dms.html) | 常规 AWS | 
| 验证数据。 | 查看源 Oracle 和目标 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-in-ssl-mode-by-using-aws-dms.html) | 数据库管理员 | 
| 停止迁移任务。 | 成功完成数据验证后，停止迁移任务。 | 常规 AWS | 

### 清除资源
<a name="clean-up-the-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 删除 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-in-ssl-mode-by-using-aws-dms.html) | 常规 AWS | 
| 删除 AWS DMS 端点。 | 选择您创建的源端点和目标端点，选择**操作**，然后选择**删除**。 | 常规 AWS | 
| 删除 AWS DMS 复制实例。 | 选择复制实例，选择**操作**，然后选择**删除**。 | 常规 AWS | 
| 删除 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-in-ssl-mode-by-using-aws-dms.html) | 常规 AWS | 
| 删除 Oracle 数据库。 | 在 Amazon RDS 控制台上，选择 Oracle 数据库实例，选择**操作**，然后选择**删除**。 | 常规 AWS | 

## 问题排查
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| AWS SCT 源和目标测试连接失败。 | 配置 JDBC 驱动程序版本和 VPC 安全组入站规则以接受传入流量。 | 
| Oracle 源端点测试运行失败。 | 检查端点设置以及复制实例是否可用。 | 
| 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-in-ssl-mode-by-using-aws-dms.html) | 

## 相关资源
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-resources"></a>

**数据库**
+ [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)

**SSL DB 连接**
+ [ SSL/TLS 用于加密与数据库实例的连接](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)
  + [对 RDS for Oracle 数据库实例使用 SSL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Concepts.SSL.html)
  + [使用 SSL/TLS 保护与 RDS for PostgreSQL 的连接](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Concepts.General.Security.html)
  + [下载特定 AWS 区域的证书捆绑包](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions)
    + [下载 CA-2019 根证书](https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem)（已于 2024 年 8 月到期）
+ [使用选项组](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithOptionGroups.html)
  + [向 Oracle 数据库实例添加选项](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.html)
  + [Oracle 安全套接字层](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.SSL.html)
+ [使用参数组](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html)
+ [PostgreSQL sslmode 连接参数](https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-CONNECT-SSLMODE)
+ [从 JDBC 使用 SSL](https://jdbc.postgresql.org/documentation/ssl/)
+ [轮换您的 SSL/TLS 证书](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html)
  + [通过修改数据库实例或集群来更新 CA 证书](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-updating)
  + [通过应用维护来更新您的 CA 证书](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-maintenance-update)

**AWS SCT**
+ [AWS Schema Conversion Tool](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [AWS Schema Conversion Tool 用户指南](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.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)

**AWS DMS**
+ [AWS Database Migration Service](https://aws.amazon.com/dms/)
+ [AWS Database Migration Service 用户指南](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
  + [将 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
  + [将 PostgreSQL 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [将 SSL 与 AWS Database Migration Service 结合使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Security.SSL.html)
+ [将运行关系数据库的应用程序迁移到 AWS](https://d1.awsstatic.com/whitepapers/Migration/migrating-applications-to-aws.pdf)

## 附加信息
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-additional"></a>

Amazon RDS 证书颁发机构证书 `rds-ca-2019` 已于 2024 年 8 月到期。如果您正在使用或计划使用带证书验证的 SSL 或 TLS 连接到 RDS 数据库实例或多可用区数据库集群，请考虑使用新 CA 证书之一：`rds-ca-rsa2048-g1`、`rds-ca-rsa4096-g1` 或 `rds-ca-ecc384-g1`。

# 将 Oracle SERIALLY\$1REUSABLE pragma 包迁移至 PostgreSQL
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Vinay Paladi，Amazon Web Services*

## Summary
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-summary"></a>

这种模式提供了 step-by-step一种将定义为 SERIALLY\$1REPLAGMA 的 Oracle 包迁移到亚马逊网络服务 (AWS) 上的 PostgreSQL 的方法。此方法保留了 SERIALLY\$1REUSABLE 编译指示的功能。

PostgreSQL 不支持包的概念和 SERIALLY\$1REUSABLE pragma。要在 PostgreSQL 中获得类似的功能，您可为包创建架构，并在架构中部署所有相关对象（例如函数、过程和类型）。为了实现 SERIALLY\$1REFLEY 编译指示的功能，此模式中提供的示例包装函数脚本使用了 [AWS Schema Conversion Tool (AWS SCT) 扩展包](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)。

有关更多信息，请参阅 Oracle 文档中的 [SERIALLY\$1REUSABLE Pragma](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm)。

## 先决条件和限制
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 最新版本的 AWS SCT 和所需驱动程序
+ Amazon Aurora PostgreSQL 兼容版数据库或 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 数据库 

**产品版本**
+ Oracle 数据库版本 10g 及更高版本

## 架构
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-architecture"></a>

**源技术堆栈**
+ 本地 Oracle 数据库

**目标技术堆栈**
+ [Aurora PostgreSQL 兼容版](https://aws.amazon.com/rds/aurora/details/postgresql-details/)或 Amazon RDS for PostgreSQL
+ AWS SCT

**迁移架构**

![\[本地 Oracle 数据库数据通过 AWS SCT、.sql 文件及手动转换方式迁移至 AWS，最终迁移至 PostgreSQL。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


## 工具
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-tools"></a>

**Amazon Web Services**
+ [AWS Schema Conversion Tool（AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [Amazon Relational Database Service（Amazon RDS）for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展PostgreSQL 关系数据库。

**其他工具**
+ [pgAdmin](https://www.pgadmin.org/) 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面，可帮助您创建、维护和使用数据库对象。

## 操作说明
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-epics"></a>

### 使用 AWS SCT 迁移 Oracle 软件包
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS SCT。 | 配置与源数据库的 AWS SCT 连接。有关更多信息，请参阅[使用 Oracle 数据库作为 AWS SCT 的源](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)。 | 数据库管理员、开发人员 | 
| 转换脚本。 | 通过选择与 Aurora PostgreSQL 兼容的目标数据库，通过 AWS SCT 转换 Oracle 软件包。 | 数据库管理员、开发人员 | 
| 保存 .sql 文件。 | 在保存.sql 文件之前，请将 AWS SCT 中的**项目设置**选项修改为**每个阶段单个文件**。AWS SCT 会根据对象类型将 .sql 文件分成多个.sql 文件。 | 数据库管理员、开发人员 | 
| 更改代码。 | 打开 AWS SCT 生成的 `init` 函数，然后按*其他信息*部分的示例所示对其进行更改。它将添加一个变量来实现 `pg_serialize = 0` 功能。 | 数据库管理员、开发人员 | 
| 测试转换。 | 将 `init` 函数部署到与 Aurora PostgreSQL 兼容数据库，然后测试结果。 | 数据库管理员、开发人员 | 

## 相关资源
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-resources"></a>
+ [AWS Schema Conversion Tool‭](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Amazon Aurora 功能](https://aws.amazon.com/rds/aurora/postgresql-features/)
+ [SERIALLY\$1REUSABLE Pragma](https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/seriallyreusable_pragma.htm#LNPLS01346)

## 附加信息
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-additional"></a>

```
Source Oracle Code:

CREATE OR REPLACE PACKAGE test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
PROCEDURE function_1
 (test_id number);
PROCEDURE function_2
 (test_id number
 );
END;

CREATE OR REPLACE PACKAGE BODY test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
v_char VARCHAR2(20) := 'shared.airline';
v_num number := 123;

PROCEDURE function_1(test_id number)
IS
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
v_char:='test1';
function_2(0);
END;

PROCEDURE function_2(test_id number)
is
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
END;
END test_pkg_var;

Calling the above functions

set serveroutput on


EXEC test_pkg_var.function_1(1);


EXEC test_pkg_var.function_2(1);


Target Postgresql Code:


CREATE SCHEMA test_pkg_var;

CREATE OR REPLACE FUNCTION test_pkg_var.init(pg_serialize IN INTEGER DEFAULT 0)

RETURNS void
AS
$BODY$

DECLARE

BEGIN

if aws_oracle_ext.is_package_initialized( 'test_pkg_var' ) AND pg_serialize = 0

then

return;

end if;

PERFORM aws_oracle_ext.set_package_initialized( 'test_pkg_var' );

PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'shared.airline.basecurrency'::CHARACTER

VARYING(100));

PERFORM aws_oracle_ext.set_package_variable('test_pkg_var', 'v_num', 123::integer);

END;

$BODY$

LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_pkg_var.function_1(pg_serialize int default 1)

RETURNS void
AS

$BODY$
DECLARE

BEGIN

PERFORM test_pkg_var.init(pg_serialize);

raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');

raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');

PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'test1'::varchar);

PERFORM test_pkg_var.function_2(0);
END;

$BODY$
LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_pkg_var.function_2(IN pg_serialize integer default 1)

RETURNS void

AS

$BODY$

DECLARE

BEGIN

PERFORM test_pkg_var.init(pg_serialize);

raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');

raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');

END;
$BODY$
LANGUAGE plpgsql;


Calling the above functions

select test_pkg_var.function_1()

 select test_pkg_var.function_2()
```

# 将 Oracle 外部表迁移到 Amazon Aurora PostgreSQL-Compatible
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible"></a>

*anuradha chintha 和 Rakesh Raghav，Amazon Web Services*

## Summary
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-summary"></a>

外部表使 Oracle 能够查询存储在数据库外部的平面文件中的数据。您可以使用 ORACLE\$1LOADER 驱动程序访问以任何格式存储的、可由 SQL\$1Loader 实用程序加载的任何数据。不能对外部表使用数据操作语言 (DML)，但可以使用外部表进行查询、联接和排序操作。

Amazon Aurora PostgreSQL-Compatible 不提供与 Oracle 中外部表相似的功能。相反，您必须使用现代化来开发符合功能要求且节俭的可扩展解决方案。

此模式提供了使用 `aws_s3` 扩展程序将不同类型的 Oracle 外部表迁移到 Amazon Web Services（AWS）Cloud 上 Aurora PostgreSQL-Compatible Edition 的步骤。

建议在生产环境中实施该解决方案之前，对方案进行全面测试。

## 先决条件和限制
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ AWS 命令行界面（AWS CLI）
+ 可用的 Aurora PostgreSQL-Compatible 数据库实例。
+ 带有外部表的本地 Oracle 数据库
+ pg.Client API
+ 数据文件 

**限制**
+ 这种模式不提供可替代 Oracle 外部表的功能。但是，可以进一步增强步骤和示例代码，以实现数据库现代化目标。
+ 文件不应包含在 `aws_s3` 导出和导入函数中作为分隔符传递的字符。

**产品版本**
+ 要从 Amazon S3 导入到 RDS for PostgreSQL，数据库必须运行 PostgreSQL 版本 10.7 或更高版本。

## 架构
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-architecture"></a>

**源技术堆栈**
+ Oracle

**源架构**

![\[数据文件进入本地 Oracle 数据库中目录和表的示意图。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/555e69af-36fc-4ff5-b66c-af22b4cf262a/images/3fbc507d-b0fa-4e05-b999-043dc7327ed7.png)


**目标技术堆栈**
+ 兼容 Amazon Aurora PostgreSQL
+ Amazon CloudWatch
+ AWS Lambda
+ AWS Secrets Manager
+ Amazon Simple Notification Service(Amazon SNS)
+ Amazon Simple Storage Service（Amazon S3）

**目标架构**

下图高度概括此解决方案。

![\[图后面有详细描述。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/555e69af-36fc-4ff5-b66c-af22b4cf262a/images/5421540e-d2e3-4361-89cc-d8415fcb21fd.png)


1. 文件上传到 S3 存储桶。

1. Lambda 函数已启动。

1. Lambda 函数启动数据库函数调用。

1. Secrets Manager 提供访问数据库的凭证。

1. 根据数据库功能，创建 SNS 警报。

**自动化和扩缩**

对外部表的任何添加或更改都可以通过元数据维护来处理。

## 工具
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-tools"></a>
+ [Amazon Aurora PostgreSQL-Compatible](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) – Amazon Aurora PostgreSQL-Compatible Edition 是一个完全托管式、兼容 PostgreSQL 和 ACID 的关系数据库引擎，结合了高端商用数据库的速度和可靠性，同时还具有开源数据库的成本效益。
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) – AWS 命令行界面（AWS CLI）是用于管理 Amazon Web Services 的统一工具。只通过一个工具进行下载和配置，您就可以使用命令行控制多个 Amazon Web Services 并利用脚本来自动执行这些服务。
+ [亚马逊 CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) — 亚马逊 CloudWatch 监控亚马逊 S3 的资源和利用率。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) – AWS Lambda 是一种无服务器计算服务，支持在不预置或管理服务器的情况下运行代码、创建工作负载感知型集群扩展逻辑、维护事件集成或管理运行时。在这种模式下，每当文件上传到 Amazon S3 时，Lambda 都会运行数据库函数。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) – AWS Secrets Manager 是一项用于凭证存储和检索的服务。使用 Secrets Manager，您可以将代码中的硬编码凭证（包括密码）替换为对 Secrets Manager 的 API 调用，以便以编程方式检索密钥。
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) – Amazon Simple Storage Service（Amazon S3）提供了一个存储层，用于接收和存储文件，以便在 Aurora PostgreSQL-Compatible 集群之间使用和传输这些文件。
+ [aws\$1s3](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#aws_s3.table_import_from_s3) – 该 `aws_s3` 扩展程序集成了 Amazon S3 和 Aurora PostgreSQL-Compatible。
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) – Amazon Simple Notification Service（Amazon SNS）可协调和管理发布者和客户端之间消息的传送或发送。在这种模式中，Amazon SNS 用于发送通知。

**代码**

每当在 S3 存储桶中放置文件时，都必须创建数据库函数并从处理应用程序或 Lambda 函数中调用。有关详细信息，请参阅代码（附件）。

## 操作说明
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-epics"></a>

### 创建外部文件
<a name="create-an-external-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 向源数据库添加外部文件。 | 创建外部文件，并将其移至 `oracle` 目录。 | 数据库管理员 | 

### 配置目标 (Aurora PostgreSQL-Compatible)
<a name="configure-the-target-aurora-postgresql-compatible"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Aurora PostgreSQL 数据库。 | 在您的 Amazon Aurora PostgreSQL-Compatible 集群中创建数据库实例。 | 数据库管理员 | 
| 创建架构、aws\$1s3 扩展程序和表。 | 使用*其他信息*部分 `ext_tbl_scripts` 下方的代码。这些表包括实际表、暂存表、错误和日志表以及元表。 | 数据库管理员、开发人员 | 
| 创建数据库函数。 | 要创建数据库函数，请使用*附加信息*部分 `load_external_table_latest` 函数下的代码。 | 数据库管理员、开发人员 | 

### 创建并配置 Lambda 函数
<a name="create-and-configure-the-lambda-function"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建角色。 | 创建有权访问 Amazon S3 和 Amazon Relational Database Service（Amazon RDS）的角色。此角色将分配给 Lambda 以运行该模式。 | 数据库管理员 | 
| 创建 Lambda 函数。 | 创建一个 Lambda 函数，该函数从 Amazon S3 读取文件名（例如 `file_key = info.get('object', {}).get('key')`），并使用文件名作为输入参数调用数据库函数（例如 `curs.callproc("load_external_tables", [file_key])`）。根据函数调用结果，启动 SNS 通知（例如 `client.publish(TopicArn='arn:',Message='fileloadsuccess',Subject='fileloadsuccess')`）。根据您的业务需求，可以使用额外代码创建 Lambda 函数。有关更多信息，请参阅 [Lambda 文档](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)。 | 数据库管理员 | 
| 配置 S3 存储桶事件触发器。 | 配置一种机制，以便为 S3 存储桶中的所有对象创建事件调用 Lambda 函数。 | 数据库管理员 | 
| 创建密钥。 | 通过使用 Secrets Manager 为数据库凭证创建密钥名称。在 Lambda 函数中传递密钥。 | 数据库管理员 | 
| 上传 Lambda 支持文件。 | 上传一个 .zip 文件，其中包含 Lambda 支持包和所附的用于连接到 Aurora PostgreSQL-Compatible 的 Python 脚本。Python 代码调用您在数据库中创建的函数。 | 数据库管理员 | 
| 创建一个 SNS 主题。 | 创建 SNS 主题以发送有关数据加载成功或失败的邮件。 | 数据库管理员 | 

### 添加与 Amazon S3 的集成
<a name="add-integration-with-amazon-s3"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | 在 Amazon S3 控制台上，创建一个 S3 存储桶。该存储桶名称具有唯一性，且不包含前导斜杠。S3 存储桶名称是全局唯一的，并且命名空间由所有 Amazon Web Services account 共享。 | 数据库管理员 | 
| 创建 IAM policy。 | 要创建 AWS Identity and Access Management (IAM) 策略，请使用*其他信息*部分 `s3bucketpolicy_for_import` 下方的代码。 | 数据库管理员 | 
| 创建角色。 | 为 Aurora PostgreSQL-Compatible 创建两个角色：一个用于导入的角色和一个用于导出的角色。为角色分配相应的策略。 | 数据库管理员 | 
| 将角色附加到 Aurora PostgreSQL-Compatible 集群。 | 在**管理角色**下方，将导入和导出角色附加到 Aurora PostgreSQL 集群。 | 数据库管理员 | 
| 为 Aurora PostgreSQL-Compatible 创建支持对象。 | 对于表格脚本，使用*其他信息*部分 `ext_tbl_scripts` 下方的代码。对于定制脚本，使用*其他信息*部分 `load_external_Table_latest` 下方的代码。 | 数据库管理员 | 

### 处理测试文件
<a name="process-a-test-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将文件上传到 S3 存储桶。 | 要将测试文件上传到 S3 存储桶，请使用控制台或在 AWS CLI 中使用以下命令。 <pre>aws s3 cp /Users/Desktop/ukpost/exttbl/"testing files"/aps s3://s3importtest/inputext/aps</pre>文件上传后，存储桶事件就会启动 Lambda 函数，该函数运行 Aurora PostgreSQL-Compatible 函数。 | 数据库管理员 | 
| 检查数据、日志和错误文件。 | Aurora PostgreSQL-Compatible 函数将文件加载到主表中，然后在 S3 存储桶中创建 `.log` 和 `.bad` 文件。 | 数据库管理员 | 
| 监控解决方案。 | 在亚马逊 CloudWatch 控制台中，监控 Lambda 函数。 | 数据库管理员 | 

## 相关的资源
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-resources"></a>
+ [Amazon S3 集成](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [使用 Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)
+ [AWS Lambda](https://aws.amazon.com/lambda/)
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/)
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/)
+ [设置 Amazon SNS 通知](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)

## 附加信息
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-additional"></a>

**ext\$1table\$1scripts**

```
CREATE EXTENSION aws_s3 CASCADE;
CREATE TABLE IF NOT EXISTS meta_EXTERNAL_TABLE
(
    table_name_stg character varying(100) ,
    table_name character varying(100)  ,
    col_list character varying(1000)  ,
    data_type character varying(100)  ,
    col_order numeric,
    start_pos numeric,
    end_pos numeric,
    no_position character varying(100)  ,
    date_mask character varying(100)  ,
    delimeter character(1)  ,
    directory character varying(100)  ,
    file_name character varying(100)  ,
    header_exist character varying(5)
);
CREATE TABLE IF NOT EXISTS ext_tbl_stg
(
    col1 text
);
CREATE TABLE IF NOT EXISTS error_table
(
    error_details text,
    file_name character varying(100),
    processed_time timestamp without time zone
);
CREATE TABLE IF NOT EXISTS log_table
(
    file_name character varying(50) COLLATE pg_catalog."default",
    processed_date timestamp without time zone,
    tot_rec_count numeric,
    proc_rec_count numeric,
    error_rec_count numeric
);
sample insert scripts of meta data:
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'source_filename', 'character varying', 2, 8, 27, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'record_type_identifier', 'character varying', 3, 28, 30, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'fad_code', 'numeric', 4, 31, 36, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'session_sequence_number', 'numeric', 5, 37, 42, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'transaction_sequence_number', 'numeric', 6, 43, 48, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
```

**s3bucketpolicy\$1for import**

```
---Import role policy
--Create an IAM policy to allow, Get,  and list actions on S3 bucket
 {
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "s3import",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::s3importtest",
                "arn:aws:s3:::s3importtest/*"
            ]
        }
    ]
}
--Export Role policy
--Create an IAM policy to allow, put,  and list actions on S3 bucket
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "s3export",
            "Action": [
                "S3:PutObject",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::s3importtest/*"
            ]
        }
    ]
}
```

**示例数据库函数 load\$1external\$1tables\$1latest**

```
CREATE OR REPLACE FUNCTION public.load_external_tables(pi_filename text)
 RETURNS character varying
 LANGUAGE plpgsql
AS $function$
/* Loading data from S3 bucket into a APG table */
DECLARE
 v_final_sql TEXT;
 pi_ext_table TEXT;
 r refCURSOR;
 v_sqlerrm text;
 v_chunk numeric;
 i integer;
 v_col_list TEXT;
 v_postion_list CHARACTER VARYING(1000);
 v_len  integer;
 v_delim varchar;
 v_file_name CHARACTER VARYING(1000);
 v_directory CHARACTER VARYING(1000);
 v_table_name_stg CHARACTER VARYING(1000);
 v_sql_col TEXT;
 v_sql TEXT;
 v_sql1 TEXT;
 v_sql2 TEXT;
 v_sql3 TEXT;
 v_cnt integer;
 v_sql_dynamic TEXT;
 v_sql_ins TEXT;
 proc_rec_COUNT integer;
 error_rec_COUNT integer;
 tot_rec_COUNT integer;
 v_rec_val integer;
 rec record;
 v_col_cnt integer;
 kv record;
 v_val text;
 v_header text;
 j integer;
 ERCODE VARCHAR(5);
 v_region text;
 cr CURSOR FOR
 SELECT distinct DELIMETER,
   FILE_NAME,
   DIRECTORY
 FROM  meta_EXTERNAL_TABLE
 WHERE table_name = pi_ext_table
   AND DELIMETER IS NOT NULL;


 cr1 CURSOR FOR
   SELECT   col_list,
   data_type,
   start_pos,
   END_pos,
   concat_ws('',' ',TABLE_NAME_STG) as TABLE_NAME_STG,
   no_position,date_mask
 FROM  meta_EXTERNAL_TABLE
 WHERE table_name = pi_ext_table
 order by col_order asc;
cr2 cursor FOR
SELECT  distinct table_name,table_name_stg
   FROM  meta_EXTERNAL_TABLE
   WHERE upper(file_name) = upper(pi_filename);


BEGIN
 -- PERFORM utl_file_utility.init();
   v_region := 'us-east-1';
   /* find tab details from file name */


   --DELETE FROM  ERROR_TABLE WHERE file_name= pi_filename;
  -- DELETE FROM  log_table WHERE file_name= pi_filename;


 BEGIN


   SELECT distinct table_name,table_name_stg INTO strict pi_ext_table,v_table_name_stg
   FROM  meta_EXTERNAL_TABLE
   WHERE upper(file_name) = upper(pi_filename);
 EXCEPTION
   WHEN NO_DATA_FOUND THEN
    raise notice 'error 1,%',sqlerrm;
    pi_ext_table := null;
    v_table_name_stg := null;
      RAISE USING errcode = 'NTFIP' ;
    when others then
        raise notice 'error others,%',sqlerrm;
 END;
 j :=1 ;
  
for rec in  cr2
 LOOP




  pi_ext_table     := rec.table_name;
  v_table_name_stg := rec.table_name_stg;
  v_col_list := null;


 IF pi_ext_table IS NOT NULL
  THEN
    --EXECUTE concat_ws('','truncate table  ' ,pi_ext_table) ;
   EXECUTE concat_ws('','truncate table  ' ,v_table_name_stg) ;




       SELECT distinct DELIMETER INTO STRICT v_delim
       FROM  meta_EXTERNAL_TABLE
       WHERE table_name = pi_ext_table;


       IF v_delim IS NOT NULL THEN
     SELECT distinct DELIMETER,
       FILE_NAME,
       DIRECTORY ,
       concat_ws('',' ',table_name_stg),
       case  header_exist when 'YES' then 'CSV HEADER' else 'CSV' end as header_exist
     INTO STRICT v_delim,v_file_name,v_directory,v_table_name_stg,v_header
     FROM  meta_EXTERNAL_TABLE
     WHERE table_name = pi_ext_table
       AND DELIMETER IS NOT NULL;


     IF    upper(v_delim) = 'CSV'
     THEN
       v_sql := concat_ws('','SELECT aws_s3.table_import_FROM_s3 ( ''',
       v_table_name_stg,''','''',
       ''DELIMITER '''','''' CSV HEADER QUOTE ''''"'''''', aws_commons.create_s3_uri ( ''',
       v_directory,''',''',v_file_name,''', ''',v_region,'''))');
       ELSE
       v_sql := concat_ws('','SELECT aws_s3.table_import_FROM_s3(''',
           v_table_name_stg, ''','''', ''DELIMITER AS ''''^''''',''',','
          aws_commons.create_s3_uri
           ( ''',v_directory, ''',''',
           v_file_name, ''',',
            '''',v_region,''')
          )');
          raise notice 'v_sql , %',v_sql;
       begin
        EXECUTE  v_sql;
       EXCEPTION
         WHEN OTHERS THEN
           raise notice 'error 1';
         RAISE USING errcode = 'S3IMP' ;
       END;


       select count(col_list) INTO v_col_cnt
       from  meta_EXTERNAL_TABLE where table_name = pi_ext_table;






        -- raise notice 'v_sql 2, %',concat_ws('','update ',v_table_name_stg, ' set col1 = col1||''',v_delim,'''');


       execute concat_ws('','update ',v_table_name_stg, ' set col1 = col1||''',v_delim,'''');




       i :=1;
       FOR rec in cr1
       loop
       v_sql1 := concat_ws('',v_sql1,'split_part(col1,''',v_delim,''',', i,')',' as ',rec.col_list,',');
       v_sql2 := concat_ws('',v_sql2,rec.col_list,',');
   --    v_sql3 := concat_ws('',v_sql3,'rec.',rec.col_list,'::',rec.data_type,',');


       case
         WHEN upper(rec.data_type) = 'NUMERIC'
         THEN v_sql3 := concat_ws('',v_sql3,' case WHEN length(trim(split_part(col1,''',v_delim,''',', i,'))) =0
                THEN null
                 ELSE
                 coalesce((trim(split_part(col1,''',v_delim,''',', i,')))::NUMERIC,0)::',rec.data_type,' END as ',rec.col_list,',') ;
         WHEN UPPER(rec.data_type) = 'TIMESTAMP WITHOUT TIME ZONE' AND rec.date_mask = 'YYYYMMDD'
         THEN v_sql3 := concat_ws('',v_sql3,' case WHEN length(trim(split_part(col1,''',v_delim,''',', i,'))) =0
                THEN null
                 ELSE
                 to_date(coalesce((trim(split_part(col1,''',v_delim,''',', i,'))),''99990101''),''YYYYMMDD'')::',rec.data_type,' END as ',rec.col_list,',');
         WHEN UPPER(rec.data_type) = 'TIMESTAMP WITHOUT TIME ZONE' AND rec.date_mask =  'MM/DD/YYYY hh24:mi:ss'
         THEN v_sql3 := concat_ws('',v_sql3,' case WHEN length(trim(split_part(col1,''',v_delim,''',', i,'))) =0
                THEN null
                 ELSE
                 to_date(coalesce((trim(split_part(col1,''',v_delim,''',', i,'))),''01/01/9999 0024:00:00''),''MM/DD/YYYY hh24:mi:ss'')::',rec.data_type,' END as ',rec.col_list,',');
          ELSE
        v_sql3 := concat_ws('',v_sql3,' case WHEN length(trim(split_part(col1,''',v_delim,''',', i,'))) =0
                THEN null
                 ELSE
                  coalesce((trim(split_part(col1,''',v_delim,''',', i,'))),'''')::',rec.data_type,' END as ',rec.col_list,',') ;
       END case;


       i :=i+1;
       end loop;


         -- raise notice 'v_sql 3, %',v_sql3;


       SELECT trim(trailing ' ' FROM v_sql1) INTO v_sql1;
       SELECT trim(trailing ',' FROM v_sql1) INTO v_sql1;


       SELECT trim(trailing ' ' FROM v_sql2) INTO v_sql2;
       SELECT trim(trailing ',' FROM v_sql2) INTO v_sql2;


       SELECT trim(trailing ' ' FROM v_sql3) INTO v_sql3;
       SELECT trim(trailing ',' FROM v_sql3) INTO v_sql3;


       END IF;
      raise notice 'v_delim , %',v_delim;


     EXECUTE concat_ws('','SELECT COUNT(*) FROM ',v_table_name_stg)  INTO v_cnt;


    raise notice 'stg cnt , %',v_cnt;


    /* if upper(v_delim) = 'CSV' then
       v_sql_ins := concat_ws('', ' SELECT * from ' ,v_table_name_stg );
     else
      -- v_sql_ins := concat_ws('',' SELECT ',v_sql1,'  from (select col1 from ' ,v_table_name_stg , ')sub ');
       v_sql_ins := concat_ws('',' SELECT ',v_sql3,'  from (select col1 from ' ,v_table_name_stg , ')sub ');
       END IF;*/


v_chunk := v_cnt/100;




for i in 1..101
loop
     BEGIN
    -- raise notice 'v_sql , %',v_sql;
       -- raise notice 'Chunk number , %',i;
       v_sql_ins := concat_ws('',' SELECT ',v_sql3,'  from (select col1 from ' ,v_table_name_stg , ' offset ',v_chunk*(i-1), ' limit ',v_chunk,') sub ');


     v_sql := concat_ws('','insert into  ', pi_ext_table ,' ', v_sql_ins);
     -- raise notice 'select statement , %',v_sql_ins;
          -- v_sql := null;
     -- EXECUTE concat_ws('','insert into  ', pi_ext_table ,' ', v_sql_ins, 'offset ',v_chunk*(i-1), ' limit ',v_chunk );
     --v_sql := concat_ws('','insert into  ', pi_ext_table ,' ', v_sql_ins );


     -- raise notice 'insert statement , %',v_sql;


    raise NOTICE 'CHUNK START %',v_chunk*(i-1);
   raise NOTICE 'CHUNK END %',v_chunk;


     EXECUTE v_sql;


  EXCEPTION
       WHEN OTHERS THEN
       -- v_sql_ins := concat_ws('',' SELECT ',v_sql1, '  from (select col1 from ' ,v_table_name_stg , ' )sub ');
         -- raise notice 'Chunk number for cursor , %',i;


    raise NOTICE 'Cursor - CHUNK START %',v_chunk*(i-1);
   raise NOTICE 'Cursor -  CHUNK END %',v_chunk;
         v_sql_ins := concat_ws('',' SELECT ',v_sql3, '  from (select col1 from ' ,v_table_name_stg , ' )sub ');


         v_final_sql := REPLACE (v_sql_ins, ''''::text, ''''''::text);
        -- raise notice 'v_final_sql %',v_final_sql;
         v_sql :=concat_ws('','do $a$ declare  r refcursor;v_sql text; i numeric;v_conname text;  v_typ  ',pi_ext_table,'[]; v_rec  ','record',';
           begin






           open r for execute ''select col1 from ',v_table_name_stg ,'  offset ',v_chunk*(i-1), ' limit ',v_chunk,''';
           loop
           begin
           fetch r into v_rec;
           EXIT WHEN NOT FOUND;




           v_sql := concat_ws('''',''insert into  ',pi_ext_table,' SELECT ',REPLACE (v_sql3, ''''::text, ''''''::text) , '  from ( select '''''',v_rec.col1,'''''' as col1) v'');
            execute v_sql;


           exception
            when others then
          v_sql := ''INSERT INTO  ERROR_TABLE VALUES (concat_ws('''''''',''''Error Name: '''',$$''||SQLERRM||''$$,''''Error State: '''',''''''||SQLSTATE||'''''',''''record : '''',$$''||v_rec.col1||''$$),'''''||pi_filename||''''',now())'';


               execute v_sql;
             continue;
           end ;
           end loop;
           close r;
           exception
           when others then
         raise;
           end ; $a$');
      -- raise notice ' inside excp v_sql %',v_sql;
          execute v_sql;
      --  raise notice 'v_sql %',v_sql;
       END;
  END LOOP;
     ELSE


     SELECT distinct DELIMETER,FILE_NAME,DIRECTORY ,concat_ws('',' ',table_name_stg),
       case  header_exist when 'YES' then 'CSV HEADER' else 'CSV' end as header_exist
       INTO STRICT v_delim,v_file_name,v_directory,v_table_name_stg,v_header
     FROM  meta_EXTERNAL_TABLE
     WHERE table_name = pi_ext_table                  ;
     v_sql := concat_ws('','SELECT aws_s3.table_import_FROM_s3(''',
       v_table_name_stg, ''','''', ''DELIMITER AS ''''#'''' ',v_header,' '',','
      aws_commons.create_s3_uri
       ( ''',v_directory, ''',''',
       v_file_name, ''',',
        '''',v_region,''')
      )');
         EXECUTE  v_sql;


     FOR rec in cr1
     LOOP


      IF rec.start_pos IS NULL AND rec.END_pos IS NULL AND rec.no_position = 'recnum'
      THEN
        v_rec_val := 1;
      ELSE


       case
         WHEN upper(rec.data_type) = 'NUMERIC'
         THEN v_sql1 := concat_ws('',' case WHEN length(trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))) =0
                THEN null
                 ELSE
                 coalesce((trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1)))::NUMERIC,0)::',rec.data_type,' END as ',rec.col_list,',') ;
         WHEN UPPER(rec.data_type) = 'TIMESTAMP WITHOUT TIME ZONE' AND rec.date_mask = 'YYYYMMDD'
         THEN v_sql1 := concat_ws('','case WHEN length(trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))) =0
                THEN null
                 ELSE
                 to_date(coalesce((trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))),''99990101''),''YYYYMMDD'')::',rec.data_type,' END as ',rec.col_list,',');
         WHEN UPPER(rec.data_type) = 'TIMESTAMP WITHOUT TIME ZONE' AND rec.date_mask = 'YYYYMMDDHH24MISS'
         THEN v_sql1 := concat_ws('','case WHEN length(trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))) =0
                THEN null
                 ELSE
                 to_date(coalesce((trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))),''9999010100240000''),''YYYYMMDDHH24MISS'')::',rec.data_type,' END as ',rec.col_list,',');
          ELSE
        v_sql1 := concat_ws('',' case WHEN length(trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))) =0
                THEN null
                 ELSE
                  coalesce((trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))),'''')::',rec.data_type,' END as ',rec.col_list,',') ;
       END case;


      END IF;
      v_col_list := concat_ws('',v_col_list ,v_sql1);
     END LOOP;




           SELECT trim(trailing ' ' FROM v_col_list) INTO v_col_list;
           SELECT trim(trailing ',' FROM v_col_list) INTO v_col_list;


           v_sql_col   :=  concat_ws('',trim(trailing ',' FROM v_col_list) , ' FROM  ',v_table_name_stg,' WHERE col1 IS NOT NULL AND length(col1)>0 ');




           v_sql_dynamic := v_sql_col;


           EXECUTE  concat_ws('','SELECT COUNT(*) FROM ',v_table_name_stg) INTO v_cnt;




         IF v_rec_val = 1 THEN
             v_sql_ins := concat_ws('',' select row_number() over(order by ctid) as line_number ,' ,v_sql_dynamic) ;


         ELSE
               v_sql_ins := concat_ws('',' SELECT' ,v_sql_dynamic) ;
           END IF;


     BEGIN
       EXECUTE concat_ws('','insert into  ', pi_ext_table ,' ', v_sql_ins);
           EXCEPTION
              WHEN OTHERS THEN
          IF v_rec_val = 1 THEN
                  v_final_sql := ' select row_number() over(order by ctid) as line_number ,col1 from ';
                ELSE
                 v_final_sql := ' SELECT col1 from';
               END IF;
       v_sql :=concat_ws('','do $a$ declare  r refcursor;v_rec_val numeric := ',coalesce(v_rec_val,0),';line_number numeric; col1 text; v_typ  ',pi_ext_table,'[]; v_rec  ',pi_ext_table,';
             begin
             open r for execute ''',v_final_sql, ' ',v_table_name_stg,' WHERE col1 IS NOT NULL AND length(col1)>0 '' ;
             loop
             begin
             if   v_rec_val = 1 then
             fetch r into line_number,col1;
             else
             fetch r into col1;
             end if;


             EXIT WHEN NOT FOUND;
              if v_rec_val = 1 then
              select line_number,',trim(trailing ',' FROM v_col_list) ,' into v_rec;
              else
                select ',trim(trailing ',' FROM v_col_list) ,' into v_rec;
              end if;


             insert into  ',pi_ext_table,' select v_rec.*;
              exception
              when others then
               INSERT INTO  ERROR_TABLE VALUES (concat_ws('''',''Error Name: '',SQLERRM,''Error State: '',SQLSTATE,''record : '',v_rec),''',pi_filename,''',now());
               continue;
              end ;
               end loop;
             close r;
              exception
              when others then
              raise;
              end ; $a$');
         execute v_sql;


     END;


         END IF;


   EXECUTE concat_ws('','SELECT COUNT(*) FROM  ' ,pi_ext_table)   INTO proc_rec_COUNT;


   EXECUTE concat_ws('','SELECT COUNT(*) FROM  error_table WHERE file_name =''',pi_filename,''' and processed_time::date = clock_timestamp()::date')  INTO error_rec_COUNT;


   EXECUTE concat_ws('','SELECT COUNT(*) FROM ',v_table_name_stg)   INTO tot_rec_COUNT;


   INSERT INTO  log_table values(pi_filename,now(),tot_rec_COUNT,proc_rec_COUNT, error_rec_COUNT);


   raise notice 'v_directory, %',v_directory;


   raise notice 'pi_filename, %',pi_filename;


   raise notice 'v_region, %',v_region;


  perform aws_s3.query_export_to_s3('SELECT replace(trim(substring(error_details,position(''('' in error_details)+1),'')''),'','','';''),file_name,processed_time FROM  error_table WHERE file_name = '''||pi_filename||'''',
   aws_commons.create_s3_uri(v_directory, pi_filename||'.bad', v_region),
   options :='FORmat csv, header, delimiter $$,$$'
   );


raise notice 'v_directory, %',v_directory;


   raise notice 'pi_filename, %',pi_filename;


   raise notice 'v_region, %',v_region;


  perform aws_s3.query_export_to_s3('SELECT * FROM  log_table WHERE file_name = '''||pi_filename||'''',
   aws_commons.create_s3_uri(v_directory, pi_filename||'.log', v_region),
   options :='FORmat csv, header, delimiter $$,$$'
   );




   END IF;
 j := j+1;
 END LOOP;


       RETURN 'OK';
EXCEPTION
    WHEN  OTHERS THEN
  raise notice 'error %',sqlerrm;
   ERCODE=SQLSTATE;
   IF ERCODE = 'NTFIP' THEN
     v_sqlerrm := concat_Ws('',sqlerrm,'No data for the filename');
   ELSIF ERCODE = 'S3IMP' THEN
    v_sqlerrm := concat_Ws('',sqlerrm,'Error While exporting the file from S3');
   ELSE
      v_sqlerrm := sqlerrm;
   END IF;


 select distinct directory into v_directory from  meta_EXTERNAL_TABLE;




 raise notice 'exc v_directory, %',v_directory;


   raise notice 'exc pi_filename, %',pi_filename;


   raise notice 'exc v_region, %',v_region;


  perform aws_s3.query_export_to_s3('SELECT * FROM  error_table WHERE file_name = '''||pi_filename||'''',
   aws_commons.create_s3_uri(v_directory, pi_filename||'.bad', v_region),
   options :='FORmat csv, header, delimiter $$,$$'
   );
    RETURN null;
END;
$function$
```

# 将基于函数的索引从 Oracle 迁移到 PostgreSQL
<a name="migrate-function-based-indexes-from-oracle-to-postgresql"></a>

*Veeranjaneyulu Grandhi 和 Navakanth Talluri，Amazon Web Services*

## Summary
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-summary"></a>

索引是增强数据库性能的常用方法。索引允许数据库服务器比无索引时更快地查找和检索特定行。但索引也会增加整个数据库系统的开销，因此应该明智地使用它们。基于函数的索引基于函数或表达式，可以涉及多个列和数学表达式。基于函数的索引可提高使用索引表达式的查询的性能。 

本质上，PostgreSQL 不支持使用将波动性定义为稳定的函数创建基于函数的索引。但是，您可创建波动性为 `IMMUTABLE` 的类似函数，并在创建指数时使用它们。

`IMMUTABLE` 函数无法修改数据库，并且在给定相同参数的情况下，可以保证永远返回相同的结果。当查询使用常量参数调用函数时，此类别允许优化程序预先对函数求值。 

当与 `to_char`、`to_date` 和 `to_number` 等函数一起使用时，这种模式有助于将基于 Oracle 函数的索引迁移到 PostgreSQL 等效版本。

## 先决条件和限制
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-prereqs"></a>

**先决条件**
+ 一个活动 Amazon Web Services (AWS) 账户
+ 已设置并运行侦听器服务的源 Oracle 数据库实例
+ 熟悉 PostgreSQL 数据库

**限制**
+ 数据库大小限制为 64 TB。
+ 创建索引时使用的函数必须是 IMMUTABLE。

**产品版本**
+ 版本 11g（版本 11.2.0.3.v1 及更高版本）以及最高 12.2 和 18c 的所有 Oracle 数据库版本
+ PostgreSQL 版本 9.6 及更高版本

## 架构
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-architecture"></a>

**源技术堆栈**
+ 本地或亚马逊弹性计算云 (Amazon EC2) 实例上的 Oracle 数据库，或者适用于 Oracle 的 Amazon RDS 数据库实例

**目标技术堆栈**
+ 任何 PostgreSQL 引擎

## 工具
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-tools"></a>
+ **pgAdmin 4** 是一种适用于 Postgres 的开源管理工具。pgAdmin 4 工具提供了用于创建、维护和使用数据库对象的图形界面。
+ **Oracle SQL Developer** 是一个集成式开发环境（IDE），用于在传统部署和云部署中开发和管理 Oracle 数据库。

## 操作说明
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-epics"></a>

### 使用默认函数创建基于函数索引
<a name="create-a-function-based-index-using-a-default-function"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 to\$1char 函数在列上创建基于函数的索引。 | 使用以下代码创建基于函数的索引。<pre>postgres=# create table funcindex( col1 timestamp without time zone);<br />CREATE TABLE<br />postgres=# insert into funcindex values (now());<br />INSERT 0 1<br />postgres=# select * from funcindex;<br />            col1<br />----------------------------<br /> 2022-08-09 16:00:57.77414<br />(1 rows)<br /> <br />postgres=# create index funcindex_idx on funcindex(to_char(col1,'DD-MM-YYYY HH24:MI:SS'));<br />ERROR:  functions in index expression must be marked IMMUTABLE</pre> PostgreSQL 不允许在没有 `IMMUTABLE` 子句的情况下创建基于函数的索引。 | 数据库管理员，应用程序开发人员 | 
| 检查函数的波动性。 | 要检查函数的波动性，请使用*其他信息*部分中的代码。   | 数据库管理员 | 

### 使用包装函数创建基于函数索引
<a name="create-function-based-indexes-using-a-wrapper-function"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建包装函数。 | 要创建包装函数，请使用*其他信息*部分中的代码。 | PostgreSQL 开发人员 | 
| 使用包装函数创建索引。 | 使用*其他信息*部分中的代码创建用户定义的函数，其关键字 `IMMUTABLE` 与应用程序处于相同的架构中，并在索引创建脚本中引用该函数。如果用户定义的函数是在通用架构中创建的(来自前面的示例)，请按所示更新 `search_path`。<pre>ALTER ROLE <ROLENAME> set search_path=$user, COMMON;</pre> | 数据库管理员、PostgreSQL 开发人员 | 

### 验证索引创建
<a name="validate-index-creation"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证索引创建。 | 根据查询访问模式验证是否需要创建索引。 | 数据库管理员 | 
| 验证索引是否可以使用。 | 要检查基于函数的索引是否由 PostgreSQL 优化器获取，请使用解释或解释分析运行 SQL 语句。使用*其他信息*部分中的代码。如有可能，还要收集表格统计信息。如果您注意到解释计划，PostgreSQL 优化器会因谓词条件而选择基于函数的索引。 | 数据库管理员 | 

## 相关的资源
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-resources"></a>
+ [基于函数的索引](https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_indexes.htm#ADFNS00505)（Oracle 文档）
+ [表达式索引](https://www.postgresql.org/docs/9.4/indexes-expressional.html)（PostgreSQL 文档）
+ [PostgreSQL 波动性](https://www.postgresql.org/docs/current/xfunc-volatility.html)（PostgreS QL 文档）
+ [PostgreSQL 搜索路径](https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH)（PostgreSQL 文档）
+ [Oracle Database 19c 至 Amazon Aurora PostgreSQL 迁移行动手册](https://docs.aws.amazon.com/dms/latest/oracle-to-aurora-postgresql-migration-playbook/chap-oracle-aurora-pg.html) 

## 附加信息
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-additional"></a>

**创建包装函数**

```
CREATE OR REPLACE FUNCTION myschema.to_char(var1 timestamp without time zone, var2 varchar) RETURNS varchar AS $BODY$ select to_char(var1, 'YYYYMMDD'); $BODY$ LANGUAGE sql IMMUTABLE;
```

**使用包装函数创建索引**

```
postgres=# create function common.to_char(var1 timestamp without time zone, var2 varchar) RETURNS varchar AS $BODY$ select to_char(var1, 'YYYYMMDD'); $BODY$ LANGUAGE sql IMMUTABLE;
CREATE FUNCTION
postgres=# create index funcindex_idx on funcindex(common.to_char(col1,'DD-MM-YYYY HH24:MI:SS'));
CREATE INDEX
```

**检查函数的波动性**

```
SELECT DISTINCT p.proname as "Name",p.provolatile as "volatility" FROM pg_catalog.pg_proc p
 LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
 LEFT JOIN pg_catalog.pg_language l ON l.oid = p.prolang
 WHERE n.nspname OPERATOR(pg_catalog.~) '^(pg_catalog)$' COLLATE pg_catalog.default AND p.proname='to_char'GROUP BY p.proname,p.provolatile
ORDER BY 1;
```

**验证索引是否可以使用**

```
explain analyze <SQL>
 
 
postgres=# explain select col1 from funcindex where common.to_char(col1,'DD-MM-YYYY HH24:MI:SS') = '09-08-2022 16:00:57';
                                                       QUERY PLAN
------------------------------------------------------------------------------------------------------------------------
 Index Scan using funcindex_idx on funcindex  (cost=0.42..8.44 rows=1 width=8)
   Index Cond: ((common.to_char(col1, 'DD-MM-YYYY HH24:MI:SS'::character varying))::text = '09-08-2022 16:00:57'::text)
(2 rows)
```

# 使用扩展将 Oracle 原生函数迁移到 PostgreSQL
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions"></a>

*Pinesh Singal，Amazon Web Services*

## Summary
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-summary"></a>

此迁移模式通过修改 PostgreSQL () 原生内置代码和`orafce`扩展，为将适用于 Oracle 的亚马逊关系数据库服务 (Amazon RDS) 数据库实例迁移到亚马逊 RDS for PostgreSQL 或兼容 Amazon Aurora PostgreSQL 的`aws_oracle_ext`版本数据库提供了 step-by-step指导。`psql`这将会节省处理时间。

该模式描述了一种离线手动迁移策略，对于具有大量事务的多 TB Oracle 源数据库，无需停机。

迁移过程使用具有 `aws_oracle_ext` 和 `orafce` 扩展的 AWS Schema Conversion Tool (AWS SCT) 将 Amazon RDS for Oracle 数据库架构转换为 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 兼容数据库架构。然后，将代码手动更改为 PostgreSQL 支持的原生 `psql` 内置代码。这是因为扩展调用会影响 PostgreSQL 数据库服务器上的代码处理，而且并非所有扩展代码都完全符合 PostgreSQL 代码或与 PostgreSQL 代码兼容。

这种模式主要侧重于使用 AWS SCT 以及扩展 `aws_oracle_ext` 和 `orafce` 手动迁移 SQL 代码。您可以将已使用的扩展转换为原生 PostgreSQL (`psql`) 内置插件。然后，删除对扩展的所有引用，并相应地转换代码。

## 先决条件和限制
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户 
+ 操作系统（Windows 或 Mac）或亚马逊 EC2 实例（已启动并正在运行） 
+ Orafce

**限制**

并非所有使用 `aws_oracle_ext` 或 `orafce` 扩展的 Oracle 函数都可以转换为原生 PostgreSQL 函数。它可能需要手动返工才能使用 PostgreSQL 库进行编译。

使用 AWS SCT 扩展的一个缺点是它在运行和获取结果方面的性能较慢。其成本可以从简单的 [PostgreSQL EXPLAIN plan](https://www.postgresql.org/docs/current/sql-explain.html) 计划（语句的执行计划）中理解，该计划涉及所有三个代码（`aws_oracle_ext`、`orafce` 和 `psql` 默认）之间的 Oracle `SYSDATE` 函数迁移到 PostgreSQL `NOW()` 函数，如所附文档中的*性能比较检查*部分所述。

**产品版本**
+ **源：**Amazon RDS for Oracle 数据库 10.2 及更高版本（适用于 10.x）、11g（11.2.0.3.v1 及更高版本）以及适用于企业版、标准版、标准版 1 的最高 12.2、18c 和 19c（及更高版本），和标准版 2
+ **目标**：Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 兼容数据库 9.4 及更高版本（适用于 9.x）、10.x、11.x、12.x、13.x 和 14.x（及更高版本）
+ **AWS SCT**：最新版本（此模式已使用 1.0.632 进行了测试）
+ **Orafce**：最新版本（此模式已使用 3.9.0 进行了测试）

## 架构
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-architecture"></a>

**源技术堆栈**
+ 版本 12.1.0.2.v18 的 Amazon RDS for Oracle 数据库实例

**目标技术堆栈**
+ 版本 11.5 的“Amazon RDS for PostgreSQL”或 Aurora PostgreSQL 兼容数据库实例

**数据库迁移架构**

下图展示了源 Oracle 数据库和目标 PostgreSQL 数据库之间的数据库迁移架构。该架构涉及 AWS Cloud、虚拟私有云（VPC）、可用区、私有子网、Amazon RDS for Oracle 数据库、AWS SCT、Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 兼容数据库、Oracle 扩展（`aws_oracle_ext` 和 `orafce`）以及结构化查询语言（SQL）文件。

![\[以下列表介绍了该过程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/158847bb-27ef-4915-a9ca-7d87073792c1/images/234b824a-bfe5-4ef0-9fa7-8401370b92a5.png)


1. 启动 Amazon RDS for Oracle 数据库实例（源数据库）。

1. 使用 AWS SCT 以及 `aws_oracle_ext` 和 `orafce` 扩展包将源代码从 Oracle 转换为 PostreSQL。

1. 转换生成 PostgreSQL 支持的已迁移的 .sql 文件。

1. 手动将未转换的 Oracle 扩展代码转换为 PostgreSQL (`psql`) 代码。

1. 手动转换生成 PostgreSQL 支持的已转换的 .sql 文件。

1. 在 Amazon RDS for PostgreSQL 数据库实例（目标数据库）上运行这些.sql 文件。

## 工具
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-tools"></a>

**工具**

*Amazon Web Services*
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) - AWS Schema Conversion Tool (AWS SCT) 可将您的现有数据库架构从一个数据库引擎转换为另一个数据库引擎。您可以转换关系型联机事务处理（OLTP）模式或数据仓库模式。转换后的架构适用于 Amazon RDS for MySQL 数据库实例、Amazon Aurora 数据库集群、 Amazon RDS for PostgreSQL 数据库实例或 Amazon Redshift 集群。转换后的架构也可以与 Amazon EC2 实例上的数据库一起使用，或者作为数据存储在 Amazon S3 存储桶中。

  AWS SCT 提供基于项目的用户界面，以便将您的源数据库的数据库架构自动转换为兼容目标 Amazon RDS 实例的格式。 

  您可以使用 AWS SCT 从 Oracle 源数据库迁移到前面列出的任何目标。使用 AWS SCT，您可以导出源数据库对象定义，例如架构、视图、存储过程和函数。 

  您可以使用 AWS SCT 将数据从 Oracle 转换到 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 兼容版。 

  在此模式中，您使用 AWS SCT 使用扩展 `aws_oracle_ext` 和 `orafce` 将 Oracle 代码转换并迁移到 PostgreSQL，并手动将扩展代码迁移到 `psql` 默认代码或原生内置代码。
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html) 扩展包是一个附加模块，用于模拟源数据库中存在的特定函数（将对象转换为目标数据库时需要）。您需要先转换数据库架构，然后才能安装 AWS SCT 扩展包。

  转换数据库或数据仓库架构时，AWS SCT 会向您的目标数据库添加一个额外的架构。该架构用于实现将转换后的架构写入到目标数据库时必需的源数据库的 SQL 系统功能。这个额外的架构称为扩展包架构。

  OLTP 数据库的扩展包架构按照源数据库命名。对于 Oracle 数据库，扩展包架构为 `AWS_ORACLE_EXT`。

*其他工具*
+ [Orafce](https://github.com/orafce/orafce) — Oracce 是一个实现 Oracle 兼容函数、数据类型和包的模块。它是一个具有伯克利源代码分发 (BSD) 许可证的开源工具，因此任何人都可以使用它。`orafce` 模块对于从 Oracle 迁移到 PostgreSQL 很有用，因为它在 PostgreSQL 中实现了许多 Oracle 函数。

 

**代码**

有关为避免使用 AWS SCT 扩展代码而从 Oracle 迁移到 PostgreSQL 的所有常用代码和迁移代码的列表，请参阅随附的文档。

## 操作说明
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-epics"></a>

### 配置 Amazon RDS for Oracle 源数据库
<a name="configure-the-amazon-rds-for-oracle-source-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Oracle 数据库实例。 | 从 Amazon RDS 控制台创建 Amazon RDS for Oracle 或 Aurora PostgreSQL 兼容的数据库实例。 | 常规 AWS、数据库管理员 | 
| 配置安全组。 | 配置入站和出站安全组。 | 常规 AWS | 
| 创建数据库。 | 创建包含所需用户和架构的 Oracle 数据库。 | 常规 AWS、数据库管理员 | 
| 创建对象。 | 创建对象并在架构中插入数据。 | 数据库管理员 | 

### 配置 Amazon RDS for PostgreSQL 目标数据库
<a name="configure-the-amazon-rds-for-postgresql-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 PostgreSQL 数据库实例。 | 从 Amazon RDS 控制台创建 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 数据库实例。 | 常规 AWS、数据库管理员 | 
| 配置安全组。 | 配置入站和出站安全组。 | 常规 AWS | 
| 创建数据库。 | 创建包含所需用户和架构的 PostgreSQL 数据库。 | 常规 AWS、数据库管理员 | 
| 验证扩展。 | 确保 `aws_oracle_ext` 和 `orafce` 已在 PostgreSQL 数据库中正确安装和配置。 | 数据库管理员 | 
| 验证 PostgreSQL 数据库是否可用。 | 确保 PostgreSQL 数据库已启动并正在运行。 | 数据库管理员 | 

### 使用 AWS SCT 和扩展将 Oracle 架构迁移到 PostgreSQL
<a name="migrate-the-oracle-schema-into-postgresql-using-aws-sct-and-the-extensions"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 AWS SCT。 | 安装 AWS SCT 的最新版本。 | 数据库管理员 | 
| 配置 AWS SCT。 | 使用适用于 Oracle (`ojdbc8.jar`) 和 PostgreSQL (`postgresql-42.2.5.jar`) 的 Java 数据库连接 (JDBC) 驱动程序配置 AWS SCT。 | 数据库管理员 | 
| 启用 AWS SCT 扩展包或模板。 | 在 AWS SCT **项目设置**下，使用 Oracle 数据库架构的 `aws_oracle_ext` 和 `orafce` 扩展启用内置函数实现。 | 数据库管理员 | 
| 转换架构。 | 在 AWS SCT 中，选择**转换架构**将架构从 Oracle 转换为 PostgreSQL 并生成 .sql 文件。 | 数据库管理员 | 

### 将 AWS SCT 扩展代码转换为 psql 代码
<a name="convert-aws-sct-extension-code-to-psql-code"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 手动转换代码。 | 手动将每一行支持扩展的代码转换为 `psql` 默认内置代码，详见所附文档。例如，将 `AWS_ORACLE_EXT.SYSDATE()` 或 `ORACLE.SYSDATE()` 更改为 `NOW()`。 | 数据库管理员 | 
| 验证代码 | （可选）通过在 PostgreSQL 数据库中临时运行每行代码来验证它。 | 数据库管理员 | 
| 在 PostgreSQL 数据库中创建对象。 | 要在 PostgreSQL 数据库中创建对象，请运行由 AWS SCT 生成并在前两个步骤中修改过的 .sql 文件。 | 数据库管理员 | 

## 相关的资源
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-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)
  + [使用 Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)
  + [PostgreSQL EXPLAIN 计划](https://www.postgresql.org/docs/current/sql-explain.html)
+ AWS SCT
  + [AWS Schema Conversion Tool 概述](https://aws.amazon.com/dms/schema-conversion-tool/)
  + [AWS SCT 用户指南](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.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)
+ AWS SCT 的扩展程序
  + [使用 AWS SCT 扩展包](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)
  + [Oracle 功能（英文）](https://postgres.cz/wiki/Oracle_functionality_(en))
  + [PGXN orace](https://pgxn.org/dist/orafce/)
  + [GitHub orafce](https://github.com/orafce/orafce)

## 附加信息
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-additional"></a>

有关更多信息，请按照随附文档中的详细命令（包含语法和示例）手动转换代码。

## 附件
<a name="attachments-158847bb-27ef-4915-a9ca-7d87073792c1"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/158847bb-27ef-4915-a9ca-7d87073792c1/attachments/attachment.zip)

# 使用 AWS DMS 将 Db2 数据库从亚马逊迁移 EC2 到兼容 Aurora MySQL
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms"></a>

*Pinesh Singal，Amazon Web Services*

## Summary
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-summary"></a>

将 [IBM Db2 for LUW 数据库](https://www.ibm.com/docs/en/db2/11.5?topic=federation)迁移到[亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 后，可以考虑通过迁移到亚马逊网络服务 (AWS) 云原生数据库来重新架构数据库。此模式包括将运行在亚马逊 EC2 实例上的 I [BM Db2 f](https://www.ibm.com/docs/en/db2/11.5) or LUW 数据库迁移到 AWS 上兼容[亚马逊](https://docs.aws.amazon.com/ec2/) [Aurora MySQL 的版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html)数据库。 

该模式描述了一种联机迁移策略，该策略对具有大量事务的多 TB Db2 源数据库的停机时间最短。 

此模式使用 [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 将 Db2 数据库架构转换为与 Aurora MySQL 兼容的架构。然后，该模式使用 [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 将数据从 Db2 数据库迁移到 Aurora MySQL 兼容数据库。AWS SCT 未转换的代码将需要手动转换。

## 先决条件和限制
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-prereqs"></a>

**先决条件**
+ 具有虚拟私有云（VPC）的有效 Amazon Web Services account
+ AWS SCT
+ AWS DMS

**产品版本**
+ AWS SCT 最新版本
+ Db2 for Linux V11.1.4.4 及更高版本

## 架构
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-architecture"></a>

**源技术堆栈**
+ DB2/Linux x86-64 位挂载在实例上 EC2  

**目标技术堆栈**
+ Amazon Aurora MySQL-兼容版数据库实例

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

下图显示了源 Db2 和目标 Aurora MySQL 兼容数据库之间的数据迁移架构。Amazon Web Services Cloud 上的架构包括虚拟私有云（VPC）、可用区、Db2 实例和 AWS DMS 复制实例的公有子网以及 Aurora MySQL 兼容数据库的私有子网。

![\[源 Db2 和目标 Aurora MySQL 兼容版数据库之间的数据迁移架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5abfccc4-148c-4794-8d80-e3c122679125/images/f30664f8-2d6a-4448-8d5c-cff3988a52c7.png)


## 工具
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-tools"></a>

**Amazon Web Services**
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) 是与 MySQL 和 PostgreSQL 兼容的完全托管式的云端关系数据库引擎。
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [AWS Schema Conversion Tool（AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。AWS SCT 支持 IBM Db2 for LUW 版本 9.1、9.5、9.7、10.1、10.5、11.1 和 11.5。

## 最佳实践
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-best-practices"></a>

有关最佳实践的信息，请参阅 [AWS Database Migration Service 最佳实践](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html)。

## 操作说明
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-epics"></a>

### 配置源 IBM Db2 数据库
<a name="configure-the-source-ibm-db2-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在亚马逊 EC2上创建 IBM Db2 数据库。 | 您可以使用来自 AWS Marketplace 的亚马逊系统映像 (AMI) 或在 EC2 实例上安装 Db2 软件，在实例 EC2 上创建 IBM Db2 数据库。通过选择适用于 IBM Db2 的 AMI（例如，IBM D [b2 v11.5.7 RHEL 7.9）来启动 EC2 实例，该AMI](https://aws.amazon.com/marketplace/pp/prodview-aclrjj4hq2ols?sr=0-1&ref_=beagle&applicationId=AWS-EC2-Console) 与本地数据库类似。 | 数据库管理员、常规 AWS | 
| 配置安全组。 | 分别配置端口为 22 和 50000 的 SSH（Secure Shell）和 TCP 的 VPC 安全组入方向规则。 | 常规 AWS | 
| 创建数据库实例。 | 创建新的实例（用户）和数据库（架构），或使用默认的 `db2inst1` 实例和示例数据库。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 数据库管理员 | 
| 确认 Db2 数据库实例可用。 | 要确认 Db2 数据库实例已启动并正在运行，请使用 `Db2pd -` 命令。 | 数据库管理员 | 

### 配置目标 Aurora MySQL 兼容数据库
<a name="configure-the-target-aurora-mysql-compatible-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Aurora MySQL 兼容数据库。 | 从 AWS RDS 服务创建兼容 MySQL 的 Amazon Aurora 数据库[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 数据库管理员、常规 AWS | 
| 配置安全组。 | 配置 SSH 和 TCP 连接的 VPC 安全组入方向规则。 | 常规 AWS | 
| 确认 Aurora 数据库可用。 | 要确保 Aurora MySQL 兼容数据库已启动并运行，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 数据库管理员 | 

### 配置和运行 AWS SCT
<a name="configure-and-run-aws-sct"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 AWS SCT。 | 下载并安装最新版本的 [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)（当前最新版本 1.0.628）。 | 常规 AWS | 
| 配置 AWS SCT。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 常规 AWS | 
| 创建 AWS SCT 项目。 | 创建一个 AWS SCT 项目和报告，该项目和报告使用 Db2 for LUW 作为源数据库引擎，并使用 Aurora MySQL 兼容作为目标数据库引擎。要确定连接到 Db2 for LUW 数据库所需特权，请参阅[将 Db2 LUW 用作 AWS SCT 的源](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.DB2LUW.html)。 | 常规 AWS | 
| 验证对象。 | 选择 **加载架构**，验证对象。更新目标数据库上任何不正确的对象：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 数据库管理员、常规 AWS | 

### 配置和运行 AWS DMS
<a name="configure-and-run-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建复制实例。 | 登录 AWS 管理控制台，导航到 AWS DMS 服务，然后使用您为源数据库和目标数据库配置的 VPC 安全组的有效设置创建复制实例。 | 常规 AWS | 
| 创建端点。 | 为 Db2 数据库创建源端点，并为 Aurora MySQL 兼容数据库创建目标端点：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 常规 AWS | 
| 创建迁移任务。 | 创建单个迁移任务或多个迁移任务，以实现完全加载和 CDC 或数据验证：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 常规 AWS | 
| 计划生产运行。 | 与应用程序所有者等利益相关者确认停机时间，以便在生产系统中运行 AWS DMS。 | 迁移主管 | 
| 运行迁移任务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 常规 AWS | 
| 验证数据。 | 查看源 Db2 和目标 MySQL 数据库中的迁移任务结果和数据：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 数据库管理员 | 
| 停止迁移任务。 | 数据验证成功完成后，停止验证迁移任务。 | 常规 AWS | 

## 问题排查
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| AWS SCT 源和目标测试连接失败。 | 配置 JDBC 驱动程序版本和 VPC 安全组入站规则以接受传入流量。 | 
| Db2 源端点测试运行失败。 | 配置额外连接设置 `CurrentLSN=<scan>;`。 | 
| 该 AWSDMS 任务无法连接到 Db2 源，并返回以下错误。`database is recoverable if either or both of the database configuration parameters LOGARCHMETH1 and LOGARCHMETH2 are set to ON` | 若要避免此错误，请运行以下命令：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 

## 相关资源
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-resources"></a>

**Amazon EC2**
+ [Amazon EC2](https://aws.amazon.com/ec2/)
+ [Amazon EC2 用户指南](https://docs.aws.amazon.com/ec2/)

**数据库**
+ [IBM Db2 数据库](https://www.ibm.com/products/db2-database)
+ [Amazon Aurora](https://aws.amazon.com/rds/aurora/)
+ [使用 Amazon Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html)

**AWS SCT**
+ [AWS DMS 架构转换](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [AWS Schema Conversion Tool 用户指南](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [使用 AWS SCT 用户界面](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html)
+ [将 IBM Db2 LUW 用作 AWS SCT 的源](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.DB2LUW.html)

**AWS DMS**
+ [AWS Database Migration Service](https://aws.amazon.com/dms/)
+ [AWS Database Migration Service 用户指南](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [数据迁移的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)
+ [数据迁移的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)
+ [AWS Database Migration Service 和 AWS Schema Conversion Tool 现在支持将 IBM Db2 LUW 作为源](https://aws.amazon.com/blogs/database/aws-database-migration-service-and-aws-schema-conversion-tool-now-support-ibm-db2-as-a-source/)（博客文章）
+ [将运行关系数据库的应用程序迁移到 AWS](https://d1.awsstatic.com/whitepapers/Migration/migrating-applications-to-aws.pdf)

# 使用 AWS DMS 将微软 SQL Server 数据库从亚马逊迁移 EC2 到亚马逊 DocumentDB
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms"></a>

*Umamaheswara Nooka，Amazon Web Services*

## Summary
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-summary"></a>

此模式描述了如何使用 AWS 数据库迁移服务 (AWS DMS) 将托管在亚马逊弹性计算云 (亚马逊 EC2) 实例上的微软 SQL Server 数据库迁移到亚马逊文档数据库（兼容 MongoDB）数据库。

AWS DMS 复制任务读取 SQL Server 数据库的表结构，在 Amazon DocumentDB 中创建相应的集合，并执行完全加载迁移。

您还可以使用此模式将本地 SQL Server 或 Amazon Relational Database Service（Amazon RDS）for SQL Server 数据库实例迁移到 Amazon DocumentDB。有关更多信息，请参阅 [AWS Prescriptive Guidance 网站上的指南](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/welcome.html)将 Microsoft SQL Server 数据库迁移到 Amazon Web Services Cloud。

## 先决条件和限制
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户。
+  EC2 实例上的现有 SQL Server 数据库。
+ 在 SQL Server 数据库中分配给 AWS DMS 的固定数据库（**db\$1owner**）角色。有关更多信息，请参阅 SQL Server 文档中的[数据库级别角色](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-ver15)。 
+ 熟悉如何使用 `mongodump`、`mongorestore`、`mongoexport` 和 `mongoimport` 实用程序将数据[移入和移出 Amazon DocumentDB 集群](https://docs.aws.amazon.com/documentdb/latest/developerguide/backup_restore-dump_restore_import_export_data.html)。
+ [Microsoft SQL Server Management Studio](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15)，已安装并配置。

**限制**
+ Amazon DocumentDB 中的集群大小限制为 64 TB。有关更多信息，请参阅 [Amazon DocumentDB 文档中的集群限制](https://docs.aws.amazon.com/documentdb/latest/developerguide/limits.html#limits-cluster)。 
+ AWS DMS 不支持将多个源表合并到单个 Amazon DocumentDB 集合中。
+ 如果 AWS DMS 在没有主键的情况下处理来自源表的任何更改，它将忽略源表中的大型对象（LOB）列。

## 架构
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-architecture"></a>

**源技术堆栈**
+ Amazon EC2

**目标技术堆栈**
+ Amazon DocumentDB

**目标架构**

![\[AWS 云 architecture showing VPC with private DB subnet and components for SQL Server and DocumentDB.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f186220b-5a94-48b2-840d-f04aedf51651/images/00962b85-8b71-49df-b84a-3adcbc9ad3a3.png)


## 工具
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html) – AWS Database Migration Service（AWS DMS）可帮助您轻松安全地迁移数据库。
+ [Amazon DocumentDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html) – Amazon DocumentDB（与 MongoDB 兼容）是一种快速、可靠且完全托管的数据库服务。
+ [亚马逊 EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html) — 亚马逊弹性计算云 (Amazon EC2) 在 AWS 云中提供可扩展的计算容量。
+ [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver15) – SQL Server 是一个关系数据库管理系统。
+ [SQL Server Management Studio (SSMS)](https://docs.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms?view=sql-server-ver15) – SSMS 是一种用于管理 SQL Server 的工具，包括访问、配置和管理 SQL Server 组件。

## 操作说明
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-epics"></a>

### 创建和配置 VPC
<a name="create-and-configure-a-vpc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 VPC。 | 登录 AWS 管理控制台，打开 Amazon VPC 控制台。创建具有 IPv4 CIDR 区块范围的虚拟私有云 (VPC)。 | 系统管理员 | 
| 创建安全组和网络 ACLs。 | 在 Amazon VPC 控制台上，根据您的要求为您的 VPC 创建安全组和网络访问控制列表（网络 ACLs）。您还可以对这些配置使用默认设置。有关此场景和其他场景的详细信息，请参阅“相关资源”部分。 | 系统管理员 | 

### 创建和配置 Amazon DocumentDB 集群
<a name="create-and-configure-the-amazon-documentdb-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
|  创建 Amazon DocumentDB 集群。 | 打开 Amazon DocumentDB 控制台，然后选择“集群”。选择“创建”，然后创建具有一个实例的 Amazon DocumentDB 集群。重要提示：请确保使用 VPC 的安全组配置此集群。 | 系统管理员  | 
|  安装 mongo shell。 | Mongo Shell 是一个命令行实用程序，用于连接和查询 Amazon DocumentDB 集群。要安装它，请运行 “/etc/yum.repos.d/mongodb-org-3.6.repo” 命令来创建存储库文件。运行 “sudo yum install-y mongodb-org-shell” 命令来安装 mongo 外壳。要加密传输中数据，请下载 Amazon DocumentDB 的公有密钥，然后连接到您的 Amazon DocumentDB 实例。有关这些步骤的更多信息，请参阅“相关资源”部分。 | 系统管理员  | 
| 在 Amazon DocumentDB 集群中创建数据库。 | 使用数据库名称运行“use”命令，以在 Amazon DocumentDB 集群中创建数据库。 | 系统管理员  | 

### 创建和配置 AWS DMS 复制实例
<a name="create-and-configure-the-aws-dms-replication-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS DMS 复制实例。 | 打开 AWS DMS 控制台，然后选择“创建复制实例”。输入复制任务的名称和描述。选择实例类、引擎版本、存储、VPC、多可用区，并使其可公开访问。选择“高级”选项卡以设置网络和加密设置。指定维护设置，然后选择“创建复制实例”。 | 系统管理员  | 
| 配置 SQL Server 数据库。 | 登录到 Microsoft SQL Server 并添加用于源端点和 AWS DMS 复制实例之间通信的入站规则。使用复制实例的私有 IP 地址作为源。重要提示：复制实例和目标端点应位于同一 VPC 上。如果源实例和复制实例 VPCs 不同，请使用安全组中的备用源。 | 系统管理员  | 

### 在 AWS DMS 中创建和测试源端点和目标端点
<a name="create-and-test-the-source-and-target-endpoints-in-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建源数据库和目标数据库端点。 | 打开 AWS DMS 控制台，然后选择“连接源和目标数据库端点”。指定源数据库和目标数据库的连接信息。如果需要，请选择“高级”选项卡以设置“额外连接属性”的值。在端点配置中下载并使用证书捆绑包。 | 系统管理员  | 
| 测试端点连接。 | 选择“运行测试”以测试连接。通过验证安全组设置以及从源数据库实例和目标数据库实例到 AWS DMS 复制实例的连接来排查任何错误消息。 | 系统管理员  | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS DMS 迁移任务。 | 在 AWS DMS 控制台上，依次选择“任务”、“创建任务”。指定任务选项，包括源和目标端点名称以及复制实例名称。在“迁移类型”下，选择“迁移现有数据”和“仅复制数据更改”。选择“启动任务”。 | 系统管理员  | 
| 运行 AWS DMS 迁移任务。 | 在“任务设置”下，指定表准备模式的设置，例如“不执行任何操作”、“删除目标中的表”、“截断”和“在复制中包含 LOB 列”。设置 AWS DMS 将接受的最大 LOB 大小，然后选择“启用日志记录”。将“高级设置”保留为默认值，然后选择“创建任务”。 | 系统管理员  | 
| 监控迁移。 | 在 AWS DMS 控制台上，选择“任务”，然后选择您的迁移任务。选择“任务监控”以监控您的任务。当完成满载迁移并应用缓存更改后，任务停止。 | 系统管理员  | 

### 测试和验证迁移
<a name="test-and-verify-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
|  使用 mongo shell 连接到 Amazon DocumentDB 集群。 | 打开 Amazon DocumentDB 控制台，在“集群”下选择您的集群。在“连接和安全性”选项卡中，选择“使用 mongo shell 连接到此集群”。 | 系统管理员  | 
| 验证迁移结果。 | 使用数据库名称运行“use”命令，然后运行“show collections”命令。使用您的数据库名称运行“db. .count();”命令。如果结果与源数据库匹配，则表示迁移成功。 | 系统管理员  | 

## 相关资源
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-resources"></a>

**创建和配置 VPC**
+ [为 VPC 创建安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups)
+ [创建网络 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)

** **

**创建和配置 Amazon DocumentDB 集群**
+ [创建 Amazon DocumentDB 集群](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html#cloud9-cluster)
+ [安装适用于 Amazon DocumentDB 的 mongo shell](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html#cloud9-mongoshell)
+ [连接到 Amazon DocumentDB 集群](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html#cloud9-connectcluster)

** **

**创建和配置 AWS DMS 复制实例**
+ [公有和私有复制实例](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html#CHAP_ReplicationInstance.PublicPrivate)

** **

**在 AWS DMS 中创建和测试源端点和目标端点**
+ [将 Amazon DocumentDB 作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/target.docdb.html)
+ [使用 SQL Server 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)
+ [使用 AWS DMS 端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.html)

** **

**迁移数据**
+ [迁移到 Amazon DocumentDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/docdb-migration.html)

** **

**其他资源**
+ [使用 SQL Server 作为 AWS DMS 源的限制](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html#CHAP_Source.SQLServer.Limitations) 
+ [如何使用 Amazon DocumentDB 大规模构建和管理应用程序](https://aws.amazon.com/blogs/database/how-to-use-amazon-documentdb-with-mongodb-compatibility-to-build-and-manage-applications-at-scale/)

# 将本地 ThoughtSpot Falcon 数据库迁移到亚马逊 Redshift
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift"></a>

*Battulga Purevragchaa 和 Antony Prasad Thevaraj，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-summary"></a>

本地数据仓库需要大量时间和资源进行管理，大型数据集更是如此。此外，构建、维护和扩建这些仓库的财务成本很高。若要帮助管理成本，降低提取、转换、加载（ETL）的复杂性，并随着数据的增长提供性能，您必须不断选择要加载的数据和要存档的数据。

通过将您的本地 [ThoughtSpot Falcon 数据库](https://docs.thoughtspot.com/software/latest/data-caching)迁移到 Amazon Web Services (AWS) 云，您可以访问基于云的数据湖和数据仓库，从而提高业务灵活性、安全性和应用程序可靠性，同时降低总体基础设施成本。Amazon Redshift 有助于显著降低数据仓库的成本与运营开销。您还可以使用 Amazon Redshift Spectrum 分析大量原生格式的数据，而无需加载数据。

此模式描述了将 ThoughtSpot Falcon 数据库从本地数据中心迁移到 AWS 云上的 Amazon Redshift 数据库的步骤和过程。

## 先决条件和限制
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 托管在本地数据中心的 ThoughtSpot Falcon 数据库

**产品版本**
+ ThoughtSpot 版本 7.0.1 

## 架构
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-architecture"></a>

![\[将 ThoughtSpot Falcon 数据库从本地数据中心迁移到 Amazon Redshift。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/b0ca29f4-b269-4b57-b386-738693a6b334/images/2b483990-1f30-439c-ba13-dc0cb0650360.png)


 

下图显示了如下工作流：

1. 将数据托管至本地关系数据库。

1. AWS Schema Conversion Tool (AWS SCT) 转换与 Amazon Redshift 兼容的数据定义语言 (DDL)。

1. 创建表后，您可以使用 AWS Database Migration Service (AWS DMS)迁移数据。

1. 数据已加载至 Amazon Redshift。

1. 如果您使用 Redshift Spectrum 或已经在 Amazon S3 中托管数据，则数据将存储至 Amazon Simple Storage Service (Amazon S3)。

## 工具
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) – AWS Data Migration Service (AWS DMS) 可帮助您快速安全地将数据库迁移到 AWS。
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html) – Amazon Redshift 是一种快速且完全托管的 PB 级数据仓库，可让您使用现有的商业智能工具轻松且经济高效地分析所有数据。
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) – AWS Schema Conversion Tool (AWS SCT) 将现有数据库架构从一个数据库引擎转换为另一个数据库引擎。

## 操作说明
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定适当的 Amazon Redshift 配置。 | 根据您的要求和数据量确定适当的 Amazon Redshift 集群配置。 有关更多信息，请参阅 Amazon Redshift 文档中的 [Amazon Redshift 集群](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)。 | 数据库管理员 | 
| 研究 Amazon Redshift，以评估其是否符合您的要求。 | 使用[亚马逊 Redshift FAQs](https://aws.amazon.com/redshift/faqs/) 来了解和评估亚马逊 Redshift 是否符合你的要求。 | 数据库管理员 | 

### 准备目标 Amazon Redshift 集群
<a name="prepare-the-target-amazon-redshift-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个 Amazon Redshift 集群。 | 登录 AWS 管理控制台，打开 Amazon Redshift 控制台，然后在虚拟私有云（VPC）中创建 Amazon Redshift 集群。 有关更多信息，请参阅 Amazon Redshift 文档中的[在 VPC 中创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/getting-started-cluster-in-vpc.html)。 | 数据库管理员 | 
| 为您的 Amazon Redshift 数据库设计进行 PoC。 | 通过对数据库设计进行概念验证 (PoC) 遵循最佳 Amazon Redshift 实践。 有关更多信息，请参阅 Amazon Redshift 文档中的[对 Amazon Redshift 执行概念验证](https://docs.aws.amazon.com/redshift/latest/dg/proof-of-concept-playbook.html)。 | 数据库管理员 | 
| 创建数据库用户。 | 在您的 Amazon Redshift 数据库中创建用户，并授予其相应的角色，以访问架构和表。 有关更多信息，请参阅 Amazon Redshift 文档中的[向用户或用户组授予访问权限](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)。 | 数据库管理员 | 
| 将配置设置应用至目标数据库。 | 根据您的要求将配置设置应用至 Amazon Redshift 数据库。 有关启用数据库、会话和服务器级参数的更多信息，请参阅 Amazon Redshift 文档中的[配置参考](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_ConfigurationRef.html)。 | 数据库管理员 | 

### 在 Amazon Redshift 集群中创建对象
<a name="create-objects-in-the-amazon-redshift-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Amazon Redshift 中使用 DDL 手动创建表。 | （可选）如果您使用 AWS SCT，则会自动创建表。但是，如果复制失败 DDLs，则必须手动创建表 | 数据库管理员 | 
| 为 Redshift Spectrum 创建外部表。 | 为 Amazon Redshift Spectrum 创建带外部架构的外部表。若要创建外部表，您必须是外部架构的所有者或[数据库超级用户](https://docs.aws.amazon.com/redshift/latest/dg/r_superusers.html)。 有关更多信息，请参阅 Amazon Redshift 文档中的[为 Amazon Redshift Spectrum 创建外部表](https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-external-tables.html)。 | 数据库管理员 | 

### 使用 AWS DMS 迁移数据
<a name="migrate-data-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS DMS 迁移数据。 | 在 Amazon Redshift 数据库中创建表 DDL 后，使用 AWS DMS 将数据迁移至 Amazon Redshift。有关详细步骤和说明，请参阅 AWS DMS 文档中的[使用 Amazon Redshift 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html)。 | 数据库管理员 | 
| 使用 COPY 命令加载数据。 | 使用 Amazon Redshift `COPY` 命令将数据从 Amazon S3 加载至 Amazon Redshift。有关更多信息，请参阅 Amazon Redshift 文档中的[使用 COPY 命令从 Amazon S3 加载](https://docs.aws.amazon.com/redshift/latest/dg/t_loading-tables-from-s3.html)。 | 数据库管理员 | 

### 验证 Amazon Redshift 集群
<a name="validate-the-amazon-redshift-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源记录和目标记录。 | 验证从源系统加载的源记录和目标记录表数。 | 数据库管理员 | 
| 实施 Amazon Redshift 最佳实践，以进行性能调整。 | 实施表和数据库设计的 Amazon Redshift 最佳实践。 有关更多信息，请参阅博客文章 [Amazon Redshift 的十大性能优化技术](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-techniques-for-amazon-redshift/)。 | 数据库管理员 | 
| 优化查询性能。 | Amazon Redshift 使用基于 SQL 的查询与系统中的数据和对象进行交互。数据操作语言 (DML) 是用于查看、添加、更改和删除数据的 SQL 子集。DDL 是用于添加、更改和删除数据库对象(如表和视图)的 SQL 子集。有关更多信息，请参阅 Amazon Redshift 文档中的[优化查询性能](https://docs.aws.amazon.com/redshift/latest/dg/c-optimizing-query-performance.html)。 | 数据库管理员 | 
| 实施 WLM。 | 您可以使用工作负载管理 (WLM) 定义多个查询队列并在运行时将查询路由到适当的队列。有关更多信息，请参阅 Amazon Redshift 文档中的[实施工作负载管理](https://docs.aws.amazon.com/redshift/latest/dg/cm-c-implementing-workload-management.html)。 | 数据库管理员 | 
| 使用并发扩展。 | 使用并发扩展功能，您可以支持几乎无限的并发用户和并发查询，同时提供始终如一的快速查询性能。有关更多信息，请参阅 Amazon Redshift 文档中的[使用并发扩展](https://docs.aws.amazon.com/redshift/latest/dg/concurrency-scaling.html)。 | 数据库管理员 | 
| 使用设计表的 Amazon Redshift 最佳实践。 | 在规划数据库时，某些重要表设计决策对整体查询性能影响很大。有关选择最合适的表设计选项的更多信息，请参阅 Amazon Redshift 文档中的[设计表的 Amazon Redshift 最佳实践](https://docs.aws.amazon.com/redshift/latest/dg/c_designing-tables-best-practices.html)。 | 数据库管理员 | 
| 在 Amazon Redshift 中创建实体化视图。 | 实体化视图 包含一个预计算的结果集，该结果集基于对一个或多个基表进行的 SQL 查询。您可以发出 `SELECT` 语句来查询实体化视图，这与查询数据库中的其他表或视图的方式相同。有关更多信息，请参阅 Amazon Redshift 文档中的[在 Amazon Redshift 中创建实体化视图](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-overview.html)。 | 数据库管理员 | 
| 定义表与表之间的连接。 | 要在中同时搜索多个表 ThoughtSpot，必须通过指定包含跨两个表的匹配数据的列来定义表之间的联接。这些列表示联接的 `primary key` 和 `foreign key`。你可以使用 Amazon Redshif `ALTER TABLE` t 中的命令来定义它们，或者。 ThoughtSpot有关更多信息，请参阅 Amazon Redshift 文档中的 [ALTER TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html)： | 数据库管理员 | 

### 设置 ThoughtSpot 与亚马逊 Redshift 的连接
<a name="set-up-thoughtspot-connection-to-amazon-redshift"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
|  添加 Amazon Redshift 连接。 | 向您的本地 F ThoughtSpot alcon 数据库添加 Amazon Redshift 连接。有关更多信息，请参阅文档中的[添加亚马逊 Redshift 连接](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-add-connection.html)。 ThoughtSpot  | 数据库管理员 | 
| 编辑 Amazon Redshift 连接。 | 您可以编辑 Amazon Redshift 连接以添加表和列。有关更多信息，请参阅文档中的[编辑 Amazon Redshift 连接](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-edit-connection.html)。 ThoughtSpot  | 数据库管理员 | 
| 重新映射 Amazon Redshift 连接。 | 通过编辑您在添加 Amazon Redshift 连接时创建的源映射 .yaml 文件修改连接参数。 例如，您可以将现有表或列重新映射到现有数据库连接中的其他表或列。 ThoughtSpot 建议您在重新映射连接中的表或列之前和之后检查依赖关系，以确保它们按需要显示。有关更多信息，请参阅文档中的[重新映射 Amazon Redshift](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-remap-connection.html) 连接。 ThoughtSpot  | 数据库管理员 | 
| 从 Amazon Redshift 连接中删除表。 | （可选）如果您尝试删除 Amazon Redshift 连接中的表，则 ThoughtSpot 会检查依赖关系并显示依赖对象列表。您可以选择列出的对象，以将其删除或移除依赖项。然后，您可以删除该表。有关更多信息，请参阅文档中的[从 Amazon Redshift 连接中 ThoughtSpot 删除表](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-delete-table.html)。 | 数据库管理员 | 
|  从 Amazon Redshift 连接中删除含依赖对象的表。 | （可选）如果您尝试删除包含依赖对象表，则阻止该操作。将显示 `Cannot delete` 窗口，其中包含指向依赖对象的链接列表。移除所有依赖项后即可删除该表有关更多信息，请参阅文档[中的从 Amazon Redshift 连接中删除包含依赖对象的 ThoughtSpot 表](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-delete-table-dependencies.html)。 | 数据库管理员 | 
| 删除 Amazon Redshift 连接。 | （可选）由于一个连接可用于多个数据来源或可视化效果，因此必须先删除使用该连接的所有来源和任务，然后才能删除 Amazon Redshift 连接。有关更多信息，请参阅文档中的[删除亚马逊 Redshift 连接](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-delete-connection.html)。 ThoughtSpot  | 数据库管理员 | 
|  请查看 Amazon Redshift 连接参考。 | 请务必使用文档中的连接[参考提供您的 Amazon Redshift 连接](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-connection-reference.html)所需的信息。 ThoughtSpot  | 数据库管理员 | 

## 附加信息
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-additional"></a>
+ [使用 Amazon Redshift 进行 ThoughtSpot 任何规模的人工智能驱动型分析](https://aws.amazon.com/blogs/apn/ai-driven-analytics-at-any-scale-with-thoughtspot-and-amazon-redshift/)
+ [Amazon Redshift 定价](https://aws.amazon.com/redshift/pricing/)
+ [AWS SCT 入门](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_GettingStarted.html) 
+ [Amazon Redshift 入门](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)
+ [使用数据提取代理](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/agents.html)
+ [Chick-fil-A 借助 ThoughtSpot 和 AWS 提高获取洞察的速度](https://www.thoughtspot.com/sites/default/files/pdf/ThoughtSpot-Chick-fil-A-AWS-Case-Study.pdf) 

# 使用 Oracle 从 Oracle 数据库迁移到 Amazon RDS for PostgreSQL GoldenGate
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate"></a>

*Dhairya Jindani、Sindhusha Paturu 和 Rajeshkumar Sabankar，Amazon Web Services*

## Summary
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-summary"></a>

此模式展示了如何使用甲骨文云基础设施 (OCI) 将甲骨文数据库迁移到适用于 PostgreSQL 的亚马逊关系数据库服务 (Amazon RDS)。 GoldenGate

通过使用 Oracle GoldenGate，您可以在源数据库和一个或多个目标数据库之间复制数据，最大限度地减少停机时间。

**注意**  
源 Oracle 数据库可以位于本地，也可以位于亚马逊弹性计算云 (Amazon EC2) 实例上。使用本地复制工具时，您可使用类似的过程。

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

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 甲骨文 GoldenGate 许可证
+ 连接至 PostgreSQL 数据库的 Java Database Connectivity (JDBC) 驱动程序
+ 在目标 Amazon RDS for PostgreSQL 数据库上使用 [AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) 创建的架构和表

**限制**
+ Oracle GoldenGate 只能复制现有表数据（初始加载）和正在进行的更改（更改数据捕获）

**产品版本**
+ Oracle Database Enterprise Edition 10g 或更高版本 
+ 适用于 Oracle GoldenGate 或更高版本的 Oracle 12.2.0.1.1
+ GoldenGate适用于 PostgreSQL 或更高版本的 Oracle 12.2.0.1.1

## 架构
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-architecture"></a>

下图显示了使用 Oracle 将 Oracle 数据库迁移到 Amazon RDS for PostgreSQL 的示例工作流程： GoldenGate

![\[将本地 Oracle 数据库迁移至 Amazon RDS for PostgreSQL 的流程\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/384f0eaf-8582-474a-a7f4-ec1048a4feb3/images/de541887-0d5f-4a9a-b136-ce2599355cb8.png)


下图显示了如下工作流：

1. Oracle 数据 GoldenGate [提取进程](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/processes-and-terminology.htm#GUID-6419F3A9-71EC-4D14-9C41-3BAA1E3CA19C)对源数据库运行以提取数据。

1. Oracle GoldenGate [Replicat 流程](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/processes-and-terminology.htm#GUID-5EF0326C-9058-4C40-8925-98A223388C95)将提取的数据传送到目标 Amazon RDS for PostgreSQL 数据库。

## 工具
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-tools"></a>
+ [Oracle GoldenGate](https://www.oracle.com/integration/goldengate/#:~:text=OCI%20GoldenGate%20is%20a%20real,in%20the%20Oracle%20Cloud%20Infrastructure.) 可帮助您在 Oracle 云基础设施中设计、运行、编排和监控数据复制和流数据处理解决方案。
+ [Amazon Relational Database Service（Amazon RDS）for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展 PostgreSQL 关系数据库。

## 操作说明
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-epics"></a>

### 下载并安装 Oracle GoldenGate
<a name="download-and-install-oracle-goldengate"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载甲骨文 GoldenGate。 | 下载以下版本的 Oracle GoldenGate：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.html)要下载该软件，请参阅 [Oracle 网站上的 Oracle GoldenGate 下载](https://www.oracle.com/middleware/technologies/goldengate-downloads.html)。 | 数据库管理员 | 
| 在源 Oracle GoldenGate 数据库服务器上安装 Oracle for Oracle。 | 有关说明，请参阅 [Oracle GoldenGate 文档](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/toc.htm)。 | 数据库管理员 | 
| 在亚马逊实例上安装 Oracle GoldenGate for PostgreSQL 数据库。 EC2  | 有关说明，请参阅 [Oracle GoldenGate 文档](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/toc.htm)。 | 数据库管理员 | 

### 在源数据库和目标数据库 GoldenGate 上配置 Oracle
<a name="configure-oracle-goldengate-on-the-source-and-target-databases"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在源数据库上设置 GoldenGate Oracle for Oracle 数据库。 | 有关说明，请参阅 [Oracle GoldenGate 文档](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/toc.htm)。务必配置以下：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.html) | 数据库管理员 | 
| 在目标数据库上设置 Oracle GoldenGate for PostgreSQL。 | 有关说明，请参阅 Oracle 网站上的[第六部分 “使用 Oracle GoldenGate for](https://docs.oracle.com/en/middleware/goldengate/core/19.1/gghdb/using-oracle-goldengate-postgresql.html) PostgreSQL”。务必配置以下：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.html) | 数据库管理员 | 

### 配置数据捕获
<a name="configure-the-data-capture"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在源数据库设置提取进程。 | 在源 Oracle 数据库，创建用于提取数据的提取文件。有关说明，请参阅 Oracle 文档中的 [ADD EXTRACT](https://docs.oracle.com/goldengate/1212/gg-winux/GWURF/ggsci_commands006.htm#GWURF122)。提取文件包括创建提取参数文件和跟踪文件目录。 | 数据库管理员 | 
| 设置一个数据泵，以将跟踪文件从源传输到目标数据库。 | 通过按照 Oracle 网站上*数据库实用程序*中的 [PARFILE](https://docs.oracle.com/database/121/SUTIL/GUID-7A045C82-5993-44EB-AFAD-B7D39C34BCCD.htm#SUTIL859) 中的说明，创建 EXTRACT 参数文件和跟踪文件目录。有关更多信息，请参阅[什么是跟踪？](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/processes-and-terminology.htm#GUID-88674F53-1E07-4C00-9868-598F82D7113C) 在 *Oracle GoldenGate 网站上的 Fusion 中间件了解*甲骨文中。 | 数据库管理员 | 
| 在 Amazon EC2 实例上设置复制。 | 创建复制参数文件和跟踪文件目录。有关创建复制参数文件的更多信息，请参阅 Oracle 数据库文档中的[第3.5 节验证参数文件](https://docs.oracle.com/en/middleware/goldengate/core/21.3/admin/using-oracle-goldengate-parameter-files.html#GUID-1E32A9AD-25DB-4243-93CD-E643E7116215)。有关创建跟踪文件目录的更多信息，请参阅 Oracle Cloud 文档中的[创建跟踪](https://docs.oracle.com/en/cloud/paas/goldengate-cloud/gwuad/creating-trail.html)。确保在目标的 GLOBALS 文件中添加检查点表条目。有关更多信息，请参阅[什么是副本](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/processes-and-terminology.htm#GGCON-GUID-5EF0326C-9058-4C40-8925-98A223388C95)？ 在 *Oracle GoldenGate 网站上的 Fusion 中间件了解*甲骨文中。 | 数据库管理员 | 

### 配置数据复制
<a name="configure-the-data-replication"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在源数据库中，创建一个参数文件，以提取初始加载的数据。 | 按照 Oracle Cloud 文档中的[在 GGSCI 中创建参数文件](https://docs.oracle.com/en/cloud/paas/goldengate-cloud/gwuad/using-oracle-goldengate-parameter-files.html#GUID-5C49C522-8B28-4E4B-908D-66A33717CE6C)说明进行操作。确保管理器已在目标系统上运行。 | 数据库管理员 | 
| 在目标数据库中，创建一个参数文件，以复制初始加载的数据。 | 按照 Oracle Cloud 文档中的[在 GGSCI 中创建参数文件](https://docs.oracle.com/en/cloud/paas/goldengate-cloud/gwuad/using-oracle-goldengate-parameter-files.html#GUID-5C49C522-8B28-4E4B-908D-66A33717CE6C)说明进行操作。确保添加并启动复制进程。 | 数据库管理员 | 

### 割接到 Amazon RDS for PostgreSQL 数据库
<a name="cut-over-to-the-amazon-rds-for-postgresql-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 停止复制进程，并确保源和目标数据库是同步的。 | 比较源数据库和目标数据库之间的行计数，以确保数据复制成功。 | 数据库管理员 | 
| 配置数据定义语言 (DDL) 支持。 | 运行 DDL 脚本以在 PostgreSQL 上创建触发器、序列、同义词以及引用键。可以使用任何标准 SQL 客户端应用程序连接到数据库集群中的数据库。例如，您可使用 [pgadmin](https://www.pgadmin.org/) 连接至您的数据库实例。 | 数据库管理员 | 

## 相关的资源
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-resources"></a>
+ [Amazon RDS for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)（*Amazon RDS 用户指南*）
+ [亚马逊 EC2 文档](https://docs.aws.amazon.com/ec2/)
+ [Oracle GoldenGate 支持的处理方法和数据库](https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_about_gg.htm#GWUAD112)（Oracle 文档）

# 使用 AWS DMS 将 Oracle 分区表迁移到 PostgreSQL
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms"></a>

*Saurav Mishra 和 Eduardo Valentim，Amazon Web Services*

## Summary
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-summary"></a>

此模式描述如何使用不支持本机分区的 AWS Database Migration Service (AWS DMS) 加速将分区表从 Oracle 加载到 PostgreSQL。目标 PostgreSQL 数据库可以安装在亚马逊弹性计算云（亚马逊）上，也可以是适用于 PostgreSQL 的 EC2亚马逊关系数据库服务 (Amazon RDS) 或兼容亚马逊 Aurora PostgreSQL 的版本数据库实例。 

分区表上传包括以下步骤：

1. 创建类似于 Oracle 分区表的父表，但不包含任何分区。

1. 创建将从步骤 1 中创建的父表继承的子表。

1. 创建过程函数和触发器以处理父表中的插入。

但是，由于每次插入都会触发触发器，因此使用 AWS DMS 的初始加载可能会非常慢。

为了加快从 Oracle 到 PostgreSQL 9.0 的初始加载速度，此模式为每个分区创建一个单独的 AWS DMS 任务并加载相应的子表。然后，您可以在割接期间创建触发器。 

PostgreSQL 版本 10 支持本机分区。但是，在某些情况下，您可能会决定使用继承分区。有关更多信息，请参阅[其他信息](#migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-additional)部分。

## 先决条件和限制
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 具有分区表的源 Oracle 数据库
+ AWS 上的 PostgreSQL 数据库

**产品版本**
+ PostgreSQL 9.0

## 架构
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-architecture"></a>

**源技术堆栈**
+ Oracle 中的分区表

**目标技术堆栈**
+ PostgreSQL 中的分区表（在 EC2亚马逊上、适用于 PostgreSQL 的亚马逊 RDS 或 Aurora PostgreSQL 上）

**目标架构**

![\[每个分区的数据从 Oracle 中的分区表移至 AWS DMS 任务，然后导入 PostgreSQL。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/7fa2898e-3308-436a-aec8-ab6f680d7bac/images/1b9742ea-a13d-434c-83a7-56686cf76ea0.png)


## 工具
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。

## 操作说明
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-epics"></a>

### 设置 AWS DMS
<a name="set-up-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 PostgreSQL 中创建表。 | 使用所需分区检查条件在 PostgreSQL 中创建父表和相应子表。 | 数据库管理员 | 
| 为每个分区创建 AWS DMS 任务。 | 在 AWS DMS 任务中包括分区的筛选条件。将分区映射至相应的 PostgreSQL 子表。 | 数据库管理员 | 
| 使用满载操作和更改数据捕获 (CDC) 运行 AWS DMS 任务。 | 确保将 `StopTaskCachedChangesApplied` 参数设置为 `true`，将 `StopTaskCachedChangesNotApplied` 参数设置为 `false`。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 停止复制任务。 | 在停止任务之前，请确认源和目标是否同步。 | 数据库管理员 | 
| 在父表创建触发器。 | 由于父表将接收所有插入和更新命令，因此创建一个触发器，根据分区条件将这些命令路由到相应的子表。 | 数据库管理员 | 

## 相关的资源
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-resources"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [表分区 （PostgreSQL 文档）](https://www.postgresql.org/docs/10/ddl-partitioning.html)

## 附加信息
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-additional"></a>

尽管 PostgreSQL 版本 10 支持原生分区，但您可能决定在以下用例中使用继承分区：
+ 分区强制执行一条规则，即所有分区必须具有与父分区相同的列集，但表继承支持子分区具有额外的列。
+ 表继承支持多重继承。
+ 声明式分区仅支持列表与范围分区。通过表继承，您可按需要划分数据。但是，如果约束排除不能有效地修剪分区，查询性能将会受到影响。
+ 使用声明性分区时，某些运算需要比使用表继承时更强的锁。例如，在分区表中添加分区或从分区表中删除分区需要 `ACCESS EXCLUSIVE` 锁定父表，而 `SHARE UPDATE EXCLUSIVE` 锁足以进行常规继承。

当您使用单独作业分区时，如果存在任何 AWS DMS 验证问题，您还可以重新加载分区。为了获得更好的性能和复制控制，请在单独的复制实例上运行任务。

# 从 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/)

# 使用 AWS DMS 和 AWS SCT 从亚马逊上的 IBM Db2 迁移 EC2 到兼容 Aurora PostgreSQL
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct"></a>

*Sirsendu Halder 和 Abhimanyu Chhabra，Amazon Web Services*

## Summary
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-summary"></a>

此模式为将亚马逊弹性计算云（亚马逊 EC2）实例上的 IBM Db2 数据库迁移到兼容亚马逊 Aurora PostgreSQL 的版本数据库实例提供了指导。该模式使用 AWS Database Migration Service (AWS DMS) 和 AWS Schema Conversion Tool (AWS SCT) 进行数据迁移和架构转换。

该模式针对的是具有大量事务的多 TB IBM Db2 数据库的在线迁移策略，停机时间很少或没有停机时间。`NUMERIC`为了提高性能，我们建议您将数据类型的主键 (PKs) 和外键 (FKs) 中的列转换为 PostgreSQL `INT` 或`BIGINT`在 PostgreSQL 中。 

## 先决条件和限制
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account 
+ 实例上的源 IBM Db2 数据库 EC2 

**产品版本**
+ DB2/LINUXX8664 版本 11.1.4.4 及更高版本

## 架构
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-architecture"></a>

**源技术堆栈****  **
+ 实例上的 Db2 数据库 EC2  

**目标技术堆栈**
+ 兼容 Aurora PostgreSQL 10.18 或更高版本的数据库实例

**数据库迁移架构**** **

![\[使用 AWS DMS 从亚马逊上的 IMB Db2 迁移到兼容 A EC2 urora PostgreSQL 的版本。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5e737fab-3e04-4887-9fb0-d1c88503b57d/images/789fabcc-8052-40d5-a746-986d799576e9.png)


## 工具
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-tools"></a>
+ [AWS Database Migration Service（AWS DMS）](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)可帮助您将数据库迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。源数据库可在迁移过程中保持全面运行，从而最大程度地为依赖该数据库的应用程序减少停机时间。您可以使用 AWS DMS 在最广泛使用的商用和开源数据库之间迁移数据。AWS DMS 支持不同数据库平台之间的异构迁移，例如 IBM Db2 到 Aurora PostgreSQL 兼容版本 10.18 或更高版本。有关详细信息，请参阅 AWS DMS 文档中的[数据迁移源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)和[数据迁移目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)。
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 通过自动将源数据库架构和大部分数据库代码对象（包括视图、存储过程和函数）转换为与目标数据库兼容的格式，支持异构数据库迁移。任何未自动转换的对象都会被明确标记，以便可以手动转换它们以完成迁移。AWS SCT 还可以扫描应用程序源代码中的嵌入式 SQL 语句并对其进行转换。 

## 操作说明
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-epics"></a>

### 设置环境
<a name="set-up-the-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Aurora PostgreSQL-Compatible 数据库实例。 | 要创建数据库实例，请按照 [AWS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)中的说明进行操作。对于引擎类型，选择 **Amazon Aurora**。对于版本，选择 **Amazon Aurora PostgreSQL 兼容版**。Aurora PostgreSQL-Compatible 10.18 或更高版本数据库实例应与源 IBM Db2 数据库位于同一虚拟私有云（VPC）中。 | Amazon RDS | 

### 转换数据库架构
<a name="convert-your-database-schema"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装和验证 AWS SCT。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html) | AWS 管理员，数据库管理员，迁移工程师 | 
| 启动 AWS SCT 并创建项目。 | 要启动 AWS SCT 工具并创建一个新项目来运行数据库迁移评测报告，请按 [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.Launching) 文档中的说明进行操作。 | 迁移工程师 | 
| 添加数据库服务器，并创建映射规则。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html) | 迁移工程师 | 
| 创建数据库迁移评测报告。 | 按照 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AssessmentReport) 中的步骤创建数据库迁移评测报告。 | 迁移工程师 | 
| 查看评测报告。 | 使用数据库迁移评测报告的**摘要**选项卡，查看报告并分析数据。此分析将帮助您确定迁移复杂性。有关更多信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_AssessmentReport.View.html)。 | 迁移工程师 | 
| 转换架构。 | 要转换源数据库架构：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html)有关更多信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.Converting)。 | 迁移工程师 | 
| 将转换后的数据库架构应用于目标数据库实例。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html)有关更多信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.ApplyingConversion)。 | 迁移工程师 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 VPC 与数据库参数组。 | 设置 VPC 和数据库参数组，并配置迁移所需入站规则和参数。有关说明，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Prerequisites.html)。对于 VPC 安全组，请同时选择 Db2 的 EC2 实例和兼容 Aurora PostgreSQL 的数据库实例。此复制实例必须与源数据库实例和目标数据库实例位于同一 VPC。 | 迁移工程师 | 
| 准备源数据库实例与目标数据库实例。 | 准备要迁移的源数据库实例和目标数据库实例。在生产环境中，源数据库已经存在。对于源数据库，服务器名称必须是运行 Db2 的 EC2 实例的公共域名系统 (DNS)。对于用户名，您可使用 `db2inst1` 后跟端口，对于 IBM Db2，该端口将是 5000。 | 迁移工程师 | 
| 创建 Amazon EC2 客户端和终端节点。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html) | 迁移工程师 | 
| 创建复制实例。 | 使用 AWS DMS 控制台创建复制实例，并指定源和目标端点。复制实例执行端点之间的数据迁移。有关更多信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html)。 | 迁移工程师 | 
| 创建 AWS DMS 任务以迁移数据。 | 按照 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.Tasks)中的步骤创建任务，将源 IBM Db2 表加载到目标 PostgreSQL 数据库实例。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html) | 迁移工程师 | 

## 相关资源
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-resources"></a>

**参考**
+ [Amazon Aurora 文档](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)
+ [PostgreSQL 外部数据包装器 (FDW) 文档](https://www.postgresql.org/docs/10/postgres-fdw.html) 
+ [PostgreSQL IMPORT FOREIGN SCHEMA 文档](https://www.postgresql.org/docs/10/sql-importforeignschema.html) 
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/index.html)  
+ [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 

**教程和视频**
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/)（演练）
+ [Amazon 简介 EC2 -使用 AWS 实现弹性云服务器和托管](https://www.youtube.com/watch?v=TsRBftzZsQo)（视频）

# 使用和 AWS DMS 从 Oracle 8i 或 9i 迁移到适用于 SharePlex PostgreSQL 的亚马逊 RDS
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms"></a>

*Kumar Babu P G，Amazon Web Services*

## Summary
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-summary"></a>

此模式描述了如何将本地的 Oracle 8i 或 9i 数据库迁移到适用于 PostgreSQL 的Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora PostgreSQL。AWS Database Migration Service (AWS DMS) 不支持 Oracle 8i 或 9i 作为来源，因此 Quest SharePlex 会将数据从本地 8i 或 9i 数据库复制到与 AWS DMS 兼容的中间 Oracle 数据库（Oracle 10g 或 11g）。

使用 AWS Schema Conversion Tool (AWS SCT) 和 AWS DMS 将架构和数据从中间 Oracle 实例迁移到 AWS 上的 PostgreSQL 数据库。此方法有助于以最小的复制延迟实现从源 Oracle 数据库到目标 PostgreSQL 数据库实例的数据连续流式传输。实施此示例时，停机时间将限于创建或验证目标 PostgreSQL 数据库上的所有外键、触发器和序列所需时间长度。

迁移使用安装了 Oracle 10g 或 11g 的亚马逊弹性计算云 (Amazon EC2) 实例来托管来自源 Oracle 数据库的更改。AWS DMS 使用此中间 Oracle 实例作为源将数据流式传输到 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL。可以暂停和恢复从本地 Oracle 数据库到中间 Oracle 实例的数据复制。它还可以从中间 Oracle 实例到目标 PostgreSQL 数据库暂停和恢复，以便您可以使用 AWS DMS 数据验证或自定义数据验证工具来验证数据。

## 先决条件和限制
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心中的源 Oracle 8i 或 9i 数据库 
+ AWS Direct Connect 配置至本地数据中心和 AWS 之间 
+ 安装在本地计算机或安装了 AWS SCT 的实例上的 AWS SCT 连接器的 Java 数据库连接 (JDBC) 驱动程序 EC2 
+ 熟悉[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ 熟悉[使用 PostgreSQL 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ 熟悉 Quest SharePlex 数据复制

 

**限制**
+ 数据库大小限制为 64 TB
+ 本地 Oracle 数据库必须为 Enterprise Edition

 

**产品版本**
+ 作为源数据库的 Oracle 8i 或 9i
+ 作为中间数据库的 Oracle 10g 或 11g 
+ PostgreSQL 9.6 或更高版本

## 架构
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-architecture"></a>

**源技术堆栈**
+ Oracle 8i 或 9i 数据库 
+ 任务 SharePlex 

 

**目标技术堆栈**
+ MySQL 到 Amazon RDS for PostgreSQL 或 Amazon Aurora (PostgreSQL)。

** **

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

![\[Architecture diagram showing migration from on-premises Oracle database to AWS cloud using various services.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/b6c30668-fc2e-4293-a59a-e01fd151f4bb/images/25082670-0bf3-4b20-8c80-99c6633b046f.png)


## 工具
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-tools"></a>
+ **AWS DMS** — [AWS Database Migration Service ](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)(AWS DMS) 可帮助您快速安全地迁移数据库。源数据库可在迁移过程中保持全面运行，从而最大程度地为依赖该数据库的应用程序减少停机时间。AWS DMS 可以在最广泛使用的商用和开源数据库之间迁移数据。 
+ **AWS SCT** - [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) (AWS SCT) 通过以下方法来简化异构数据库的迁移工作：将源数据库架构和大部分的自定义代码 (包括视图、存储过程和函数等) 自动转换成与目标数据库兼容的格式。任何无法自动转换的对象都会被明确标记，以便可以手动转换它们以完成迁移。AWS SCT 还可以扫描您的应用程序源代码中的嵌入式 SQL 语句，并将其作为数据库架构转换项目的一部分进行转换。在此过程中，AWS SCT 通过将旧的 Oracle 和 SQL Server 功能转换为其 AWS 等效功能来执行云原生代码优化，以帮助您在迁移数据库的同时实现应用程序现代化。架构转换完成后，AWS SCT 可以使用内置的数据迁移代理帮助将数据从一系列数据仓库迁移至 Amazon Redshift。
+ **Ques** [t SharePlex — Quest SharePlex](https://www.quest.com/register/120420/?gclid=Cj0KCQiA6IHwBRCJARIsALNjViVSt9fHqAsf9XbWkoCwKKyQqollR_5kSxNhBagh9s3spQT4IQCaVy0aAmCnEALw_wcB) 是一款 Oracle-to-Oracle数据复制工具，用于在最短的停机时间内移动数据，并且不会丢失任何数据。

## 操作说明
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-epics"></a>

### 创建 EC2 实例并安装 Oracle
<a name="create-the-ec2-instance-and-install-oracle"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Amazon 设置网络 EC2。 | 创建新虚拟私有云（VPC）、子网、互联网网关、路由表和安全组。 | AWS SysAdmin | 
| 创建新 EC2 实例。 | 为 EC2 实例选择亚马逊系统映像 (AMI)。选择实例大小并配置实例详细信息：实例数量（1）、您在上一个任务中创建的 VPC 和子网、自动分配公有 IP 地址以及其他选项。添加存储、配置安全组并启动实例。出现提示时，创建并保存密钥对，以供下一步使用。 | AWS SysAdmin | 
| 在 EC2 实例上安装 Oracle。 | 获取许可证和所需的 Oracle 二进制文件，然后在实例上安装 Oracle 10g 或 11g。 EC2  | 数据库管理员 | 

### SharePlex 在 EC2 实例上设置并配置数据复制
<a name="set-up-shareplex-on-an-ec2-instance-and-configure-data-replication"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 SharePlex。 | 创建亚马逊 EC2 实例并安装与 Oracle 8i 或 9i 兼容的 SharePlex 二进制文件。 | AWS SysAdmin、DBA | 
| 配置数据复制。 | 按照 SharePlex 最佳实践配置从本地 Oracle 8i/9i 数据库到 Oracle 10g/11g 实例的数据复制。 | 数据库管理员 | 

### 将 Oracle 数据库架构转换为 PostgreSQL
<a name="convert-the-oracle-database-schema-to-postgresql"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS SCT。 | 创建新报告，然后连接到 Oracle 作为源，将 PostgreSQL 作为目标。在项目设置中，打开SQL 脚本选项卡，将目标 SQL 脚本更改为多个文件。 | 数据库管理员 | 
| 转换 Oracle 数据库架构。 | 在操作选项卡中，选择生成报告、转换架构，然后选择另存为 SQL。 | 数据库管理员 | 
| 修改 AWS SCT 生成的 SQL 脚本。 |  | 数据库管理员 | 

### 创建和配置 Amazon RDS 数据库实例
<a name="create-and-configure-the-amazon-rds-db-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon RDS 数据库实例。 | 在 Amazon RDS 控制台，创建新的 PostgreSQL 数据库实例。 | AWS SysAdmin、DBA | 
| 配置数据库实例。 | 指定数据库引擎版本、数据库实例类、多可用区部署、存储类型和分配的存储空间。输入数据库实例标识符、主用户名和主密码。 | AWS SysAdmin、DBA | 
| 配置网络和安全。 | 指定 VPC、子网组、公共可访问性、可用区首选项和安全组。 | AWS SysAdmin、DBA | 
| 配置数据库选项。 | 指定数据库名称、端口、参数组、加密和主密钥。 | AWS SysAdmin、DBA | 
| 配置备份。 | 指定备份保留期、备份窗口、开始时间、持续时间以及是否将标签复制到快照。 | AWS SysAdmin、DBA | 
| 配置监控选项。 | 启用或禁用增强的监控和性能洞察。 | AWS SysAdmin、DBA | 
| 配置维护选项。 | 指定次要版本自动升级、维护窗口以及开始日期、时间和持续时间。 | AWS SysAdmin、DBA | 
| 运行 AWS SCT 中的预迁移脚本。 | 在 Amazon RDS 实例，运行以下脚本：create\$1database.sql、create\$1sequence.sql、create\$1table.sql、create\$1view.sql 和 create\$1function.sql。 | AWS SysAdmin、DBA | 

### 使用 AWS DMS 迁移数据
<a name="migrate-data-by-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 AWS DMS 中创建 AWS DMS 复制实例。 | 填写名称、实例类别、VPC（与 EC2 实例相同）、多可用区和公共可访问性字段。在高级下，指定分配的存储、子网组、可用区、VPC 安全组和 AWS Key Management Service（AWS KMS）密钥。 | AWS SysAdmin、DBA | 
| 创建源数据库端点。 | 指定终端节点名称、类型、源引擎 (Oracle)、服务器名称（Amazon EC2 私有 DNS 名称）、端口、SSL 模式、用户名、密码、SID、VPC（指定具有复制实例的 VPC）和复制实例。要测试连接，请选择运行测试，然后创建端点。您还可以配置以下高级设置： maxFileSize 和 Sc numberDataType ale。 | AWS SysAdmin、DBA | 
| 创建 AWS DMS 复制任务。 | 指定任务名称、复制实例、源端点和目标端点以及复制实例。对于迁移类型，选择迁移现有数据并复制持续更改。清除创建时启动任务复选框。 | AWS SysAdmin、DBA | 
| 配置 AWS DMS 复制任务设置。 | 对于目标表格准备模式，请选择什么都不做。完全加载完成后停止任务（创建主键）。指定受限或完整 LOB 模式，然后启用控制表。或者，您可以配置 CommitRate 高级设置。 | 数据库管理员 | 
| 配置表映射。 | 在表映射部分，为迁移中包含的所有架构中的所有表创建包含规则，然后创建排除规则。添加三个转换规则，将架构、表和列名转换为小写，并添加此特定迁移所需任何其他规则。 | 数据库管理员 | 
| 启动任务。 | 启动复制任务。确保全负载正在运行。在 Oracle 主数据库上运行 ALTER SYSTEM SWITCH LOGFILE 以启动任务。 | 数据库管理员 | 
| 运行 AWS SCT 中的迁移中脚本。 | 在 Amazon RDS for PostgreSQL 中，运行以下脚本：create\$1index.sql 和 create\$1constraint.sql。 | 数据库管理员 | 
| 重新启动任务以继续更改数据捕获 (CDC)。 | 在 Amazon RDS for PostgreSQL 数据库实例上运行 VACUUM，然后重启 AWS DMS 任务以应用缓存的 CDC 更改。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看 AWS DMS 日志和验证表。 | 验证所有错误，并在需要时进行修复。 | 数据库管理员 | 
| 停止所有 Oracle 依赖项。 | 停止所有 Oracle 依赖项，关闭 Oracle 数据库上的侦听器，然后运行 ALTER SYSTEM SWITCH LOGFILE。当 AWS DMS 任务没有显示任何活动时，将其停止。 | 数据库管理员 | 
| 运行 AWS SCT 中的迁移后脚本。 | 在 Amazon RDS for PostgreSQL 中，运行以下脚本：create\$1foreign\$1key\$1constraint.sql 和 create\$1triggers.sql。 | 数据库管理员 | 
| 完成 Amazon RDS for PostgreSQL 的其他步骤。 | 如果需要，增量序列以匹配 Oracle，运行 VACUUM 和 ANALYZE，然后拍摄合规性快照。 | 数据库管理员 | 
| 打开 Amazon RDS for PostgreSQL 的连接。 | 从 Amazon RDS for PostgreSQL 中移除 AWS DMS 安全组，添加生产安全组，并将应用程序指向新数据库。 | 数据库管理员 | 
| 清除 AWS 资源。 | 移除终端节点、复制任务、复制实例和 EC2 实例。 | SysAdmin，DBA | 

## 相关资源
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-resources"></a>
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS for PostgreSQL 定价](https://aws.amazon.com/rds/postgresql/pricing/)
+ [将 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [将 PostgreSQL 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) 
+ [任务 SharePlex 文档](https://support.quest.com/shareplex/9.0.2/technical-documents)

# 使用实体化视图和 AWS DMS 从 Oracle 8i 或 9i 迁移至 Amazon RDS for PostgreSQL
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms"></a>

*Kumar Babu P G 和 Pragnesh Patel，Amazon Web Services*

## Summary
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-summary"></a>

此模式介绍如何将本地旧版 Oracle 8i 或 9i 数据库迁移到 Amazon Relational Database Service（Amazon RDS）for PostgreSQL 或 Amazon Aurora PostgreSQL 兼容版。 

AWS Database Migration Service (AWS DMS) 不支持 Oracle 8i 或 9i 作为源，因此此模式使用与 AWS DMS 兼容的中间 Oracle 数据库实例，例如 Oracle 10g 或 11g。它还使用实例化视图功能将数据从源 Oracle 8i/9i 实例迁移至中间 Oracle 10g/11g 实例。

AWS Schema Conversion Tool (AWS SCT) 转换数据库架构，AWS DMS 会将数据迁移至目标 PostgreSQL 数据库。 

此模式可以帮助希望以最短的数据库停机时间从旧版 Oracle 数据库迁移的用户。实施此示例时，停机时间将限于创建或验证目标数据库上的所有外键、触发器和序列所需时间长度。 

该模式使用安装了 Oracle 10g/11g 数据库的亚马逊弹性计算云 (Amazon EC2) 实例来帮助 AWS DMS 流式传输数据。您可以暂时暂停从本地 Oracle 数据库到中间 Oracle 实例的流式复制，以使 AWS DMS 能够赶上数据验证或使用其他数据验证工具。当 AWS DMS 完成迁移当前更改后，PostgreSQL 数据库实例和中间 Oracle 数据库将具有相同的数据。

## 先决条件和限制
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心中的源 Oracle 8i 或 9i 数据库 
+ AWS Direct Connect 配置至本地数据中心和 AWS 之间
+ 安装在本地计算机或安装了 AWS SCT 的实例上的 AWS SCT 连接器的 Java 数据库连接 (JDBC) 驱动程序 EC2 
+ 熟悉[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ 熟悉[使用 PostgreSQL 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

**限制**
+ 数据库大小限制为 64 TB

**产品版本**
+ 作为源数据库的 Oracle 8i 或 9i
+ 作为中间数据库的 Oracle 10g 或 11g
+ PostgreSQL 10.17 或更高版本

## 架构
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-architecture"></a>

**源技术堆栈**
+ Oracle 8i 或 9i 数据库 

**目标技术堆栈**
+ Amazon RDS for PostgreSQL 或 Aurora PostgreSQL-Compatible

**目标架构**

![\[用于从传统 Oracle 数据库迁移至 Amazon RDS 或 Aurora 的架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/8add9b21-1b62-46a2-bb8e-0350f36a924a/images/f34f9b0f-f1da-4c27-a385-71b12d16c375.png)


## 工具
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html) 可帮助您快速安全地迁移数据库。源数据库可在迁移过程中保持全面运行，从而最大程度地为依赖该数据库的应用程序减少停机时间。AWS DMS 可以在最广泛使用的商用和开源数据库之间迁移数据。
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 通过自动将源数据库架构和大部分数据库代码对象转换为与目标数据库兼容的格式，帮助您预测异构数据库迁移。任何无法自动转换的对象都会被明确标记，以便可以手动转换它们以完成迁移。AWS SCT 还可以扫描您的应用程序源代码中的嵌入式 SQL 语句，并将其作为数据库架构转换项目的一部分进行转换。在此过程中，AWS SCT 通过将旧的 Oracle 和 SQL Server 功能转换为其 AWS 等效功能来执行云原生代码优化，以帮助您在迁移数据库的同时实现应用程序现代化。架构转换完成后，AWS SCT 可以使用内置的数据迁移代理帮助将数据从一系列数据仓库迁移至 Amazon Redshift。 

## 最佳实践
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-best-practices"></a>

有关刷新实例化视图的最佳实践，请参见以下 Oracle 文档：
+ [刷新实体化视图](https://docs.oracle.com/database/121/DWHSG/refresh.htm#DWHSG-GUID-64068234-BDB0-4C12-AE70-75571046A586)
+ [实体化视图快速刷新](https://docs.oracle.com/database/121/DWHSG/refresh.htm#DWHSG8361)

## 操作说明
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-epics"></a>

### 在 EC2 实例上安装 Oracle 并创建物化视图
<a name="install-oracle-on-an-ec2-instance-and-create-materialized-views"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 EC2 实例设置网络。 | 创建新虚拟私有云（VPC）、子网、互联网网关、路由表和安全组。 | AWS SysAdmin | 
| 创建实 EC2 例。 | 为 EC2 实例选择亚马逊系统映像 (AMI)。选择实例大小并配置实例详细信息：实例数量（1）、您在上一个任务中创建的 VPC 和子网、自动分配公有 IP 地址以及其他选项。添加存储、配置安全组并启动实例。出现提示时，创建并保存密钥对，以供下一步使用。 | AWS SysAdmin | 
| 在 EC2 实例上安装 Oracle。 | 获取许可证和所需的 Oracle 二进制文件，然后在实例上安装 Oracle 10g 或 11g。 EC2  | 数据库管理员 | 
| 配置 Oracle 联网。 | 在中修改或添加 `listener.ora` 条目，以连接到本地源 Oracle 8i/9i 数据库，然后创建数据库链接。 | 数据库管理员 | 
| 创建实体化视图。 | 确定要在源 Oracle 8i/9i 数据库中复制的数据库对象，然后使用数据库链接为所有对象创建实体化视图。 | 数据库管理员 | 
| 部署脚本，以按所需间隔刷新实例化视图。 | 开发和部署脚本，以便在 Amazon EC2 Oracle 10g/11g 实例上按所需间隔刷新实体化视图。使用增量刷新选项来刷新实体化视图。 | 数据库管理员 | 

### 将 Oracle 数据库架构转换为 PostgreSQL
<a name="convert-the-oracle-database-schema-to-postgresql"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS SCT。 | 创建新报告，然后连接到 Oracle 作为源，将 PostgreSQL 作为目标。在项目设置中，打开 **SQL 脚本**选项卡。将目标 SQL 脚本更改为**多个文件**。（AWS SCT 不支持 Oracle 8i/9i 数据库，因此您必须在中间 Oracle 10g/11g 实例上恢复仅限架构的转储，并将其用作 AWS SCT 的来源。） | 数据库管理员 | 
| 转换 Oracle 数据库架构。 | 在**操作**选项卡上，选择**生成报告**、**转换架构**，然后选择**另存为 SQL**。 | 数据库管理员 | 
| 修改 SQL 脚本。 | 根据最佳实践标准进行修改。例如，切换到合适的数据类型，为特定 Oracle 函数开发 PostgreSQL 等效函数。 | 数据库管理员、Dev数据库管理员 | 

### 创建并配置 Amazon RDS 数据库实例，以托管转换后的数据库
<a name="create-and-configure-the-amazon-rds-db-instance-to-host-the-converted-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon RDS 数据库实例。 | 在 Amazon RDS 控制台，创建新的 PostgreSQL 数据库实例。 | AWS SysAdmin、DBA | 
| 配置数据库实例。 | 指定数据库引擎版本、数据库实例类、多可用区部署、存储类型和分配的存储空间。输入数据库实例标识符、主用户名和主密码。 | AWS SysAdmin、DBA | 
| 配置网络和安全。 | 指定 VPC、子网组、公共可访问性、可用区首选项和安全组。 | 数据库管理员， SysAdmin | 
| 配置数据库选项。 | 指定数据库名称、端口、参数组、加密和主密钥。 | DBA、AWS SysAdmin | 
| 配置备份。 | 指定备份保留期、备份窗口、开始时间、持续时间以及是否将标签复制到快照。 | AWS SysAdmin、DBA | 
| 配置监控选项。 | 启用或禁用增强的监控和性能洞察。 | AWS SysAdmin、DBA | 
| 配置维护选项。 | 指定次要版本自动升级、维护窗口以及开始日期、时间和持续时间。 | AWS SysAdmin、DBA | 
| 运行 AWS SCT 中的预迁移脚本。 | 在目标 Amazon RDS for PostgreSQL 实例，使用来自 AWS SCT 的 SQL 脚本，并进行其他修改来创建数据库架构。这些可能包括运行多个脚本，并包括用户创建、数据库创建、模式创建、表、视图、函数和其他代码对象。 | AWS SysAdmin、DBA | 

### 使用 AWS DMS 迁移数据
<a name="migrate-data-by-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 AWS DMS 中创建 AWS DMS 复制实例。 | 填写名称、实例类别、VPC（与 EC2 实例相同）、多可用区和公共可访问性字段。在高级配置选项下，指定分配的存储、子网组、可用区、VPC 安全组和 AWS Key Management Service（AWS KMS）密钥。 | AWS SysAdmin、DBA | 
| 创建源数据库端点。 | 指定终端节点名称、类型、源引擎 (Oracle)、服务器名称（ EC2 实例的私有 DNS 名称）、端口、SSL 模式、用户名、密码、SID、VPC（指定具有复制实例的 VPC）和复制实例。要测试连接，请选择**运行测试**，然后创建端点。您还可以配置以下高级设置：**maxFileSize**和 Sc **numberDataTypeal** e。 | AWS SysAdmin、DBA | 
| 将 AWS DMS 连接到 Amazon RDS for PostgreSQL。 | 如果您的 PostgreSQL 数据库位于其他 VPC 中 VPCs，请为跨连接创建迁移安全组。 | AWS SysAdmin、DBA | 
| 创建目标数据库端点。 | 指定端点名称、类型、源引擎 (PostgreSQL)、服务器名称（Amazon RDS 端点）、端口、SSL 模式、用户名、密码、数据库名称、VPC（指定具有复制实例的 VPC）和复制实例。要测试连接，请选择**运行测试**，然后创建端点。您还可以配置以下高级设置：**maxFileSize**和 Sc **numberDataTypeal** e。 | AWS SysAdmin、DBA | 
| 创建 AWS DMS 复制任务。 | 指定任务名称、复制实例、源端点和目标端点以及复制实例。对于迁移类型，选择**迁移现有数据并复制持续更改**。清除**创建时启动任务**复选框。 | AWS SysAdmin、DBA | 
| 配置 AWS DMS 复制任务设置。 | 对于目标表格准备模式，请选择**什么都不做**。完全加载完成后停止任务（创建主键）。指定受限或完整 LOB 模式，然后启用控制表。或者，您可以配置**CommitRate**高级设置。 | 数据库管理员 | 
| 配置表映射。 | 在**表映射**部分，为迁移中包含的所有架构中的所有表创建包含规则，然后创建排除规则。添加三个转换规则，将架构、表和列名转换为小写，并添加此特定迁移所需任何其他规则。 | 数据库管理员 | 
| 启动任务。 | 启动复制任务。确保全负载正在运行。在 Oracle 主数据库上运行 `ALTER SYSTEM SWITCH LOGFILE` 以启动任务。 | 数据库管理员 | 
| 运行 AWS SCT 中的迁移中脚本。 | 在 Amazon RDS for PostgreSQL 中，运行以下脚本：`create_index.sql` 和 `create_constraint.sql`（如果最初没有创建完整架构）。 | 数据库管理员 | 
| 重新启动任务以继续更改数据捕获（CDC）。 | 在 Amazon RDS for PostgreSQL 数据库实例上运行 `VACUUM`，然后重启 AWS DMS 任务以应用缓存的 CDC 更改。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看 AWS DMS 日志和验证表。 | 检查并修复所有复制或验证错误。 | 数据库管理员 | 
| 停止使用本地 Oracle 数据库及其依赖项。 | 停止所有 Oracle 依赖项，关闭 Oracle 数据库上的侦听器，然后运行 `ALTER SYSTEM SWITCH LOGFILE`。当 AWS DMS 任务没有显示任何活动时，将其停止。 | 数据库管理员 | 
| 运行 AWS SCT 中的迁移后脚本。 | 在 Amazon RDS for PostgreSQL 中，运行以下脚本：`create_foreign_key_constraint.sql and create_triggers.sql`。确保序列为最新。 | 数据库管理员 | 
| 完成 Amazon RDS for PostgreSQL 的其他步骤。 | 如果需要，增量序列以匹配 Oracle，运行 `VACUUM` 和 `ANALYZE`，然后拍摄合规性快照。 | 数据库管理员 | 
| 打开 Amazon RDS for PostgreSQL 的连接。 | 从 Amazon RDS for PostgreSQL 中移除 AWS DMS 安全组，添加生产安全组，并将应用程序指向新数据库。 | 数据库管理员 | 
| 清理 AWS DMS 对象。 | 移除终端节点、复制任务、复制实例和 EC2 实例。 | SysAdmin，DBA | 

## 相关资源
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-resources"></a>
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS for PostgreSQL 定价](https://aws.amazon.com/rds/postgresql/pricing/)
+ [将 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [将 PostgreSQL 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

# 使用 AWS DMS 和 AWS SCT 从 Amazon EC2 上的 Oracle 迁移至 Amazon RDS for MySQL
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct"></a>

*Anil Kunapareddy，Amazon Web Services*

*Harsad Gohil，无*

## Summary
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-summary"></a>

在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上管理 Oracle 数据库需要资源且成本高昂。将这些数据库迁移至适用于 MySQL 数据库实例的 Amazon Relational Database Service (Amazon RDS)，可以优化整体 IT 预算，从而简化您的工作。Amazon RDS for MySQL 还提供多可用区、可扩展性和自动备份等功能。 

此模式将引导您完成将 Amazon EC2 上的源 Oracle 数据库迁移到目标 Amazon RDS for MySQL 数据库实例的过程。它使用 AWS Database Migration Service (AWS DMS) 迁移数据，并使用 AWS Schema Conversion Tool (AWS SCT) 将源数据库架构和对象转换为与 Amazon RDS for MySQL 兼容的格式。

## 先决条件和限制
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 在 ARCHIVELOG 模式下运行实例和侦听器服务的源数据库
+ 目标 Amazon RDS for MySQL 数据库，拥有足够的存储空间用于数据迁移

**限制**
+ AWS DMS 不会在目标数据库上创建架构；您必须这样做。Oracle 目标中很可能已存在该架构名称。来自源架构的表导入到用户或架构，使用它连接到目标实例。如果要迁移多个架构，您必须创建多个复制任务。

**产品版本**
+ 10.2 及更高版本、11g 直至 12.2、18c 的所有 Oracle 数据库版本。有关支持的 Oracle 数据库版本的信息，请参阅 AWS 文档中的[使用 Oracle 数据库作为 AWS DMS 源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)和[使用 Oracle 数据库作为 AWS DMS 目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。关于 AWS SCT 支持的 Oracle 数据库版本的信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。
+ AWS DMS 支持版本 5.5、5.6 以及版本 5.7 的 MySQL。

## 架构
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-architecture"></a>

**源技术堆栈**
+ EC2 实例上的 Oracle 数据库  

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

**数据迁移架构**

![\[使用 AWS DMS 从 Amazon EC2 上的 Oracle 迁移至 Amazon RDS for MySQL\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/8a8e346e-7944-4999-bc11-208efead3792/images/c00f908c-f348-41dd-a31c-3931b990777a.png)


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

![\[使用 AWS DMS 和 AWS SCT 从 Amazon EC2 上的 Oracle 迁移至 Amazon RDS for MySQL\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/8a8e346e-7944-4999-bc11-208efead3792/images/e7ba7ac0-3094-4142-b355-fb192e242432.png)


## 工具
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-tools"></a>
+ **AWS DMS** - [AWS Database Migration Service](https://docs.aws.amazon.com/dms/) (AWS DMS) 是一项 Web 服务，可用于将数据从本地、Amazon RDS 数据库实例或 EC2 实例上的数据库迁移至 Amazon Web Services 上的数据库，例如 Amazon RDS for MySQL 或 EC2 实例。您还可以将数据库从 Amazon Web Services 迁移到本地数据库。您可以在异构或同构数据库引擎间迁移数据。
+ **AWS SCT** - [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) (AWS SCT) 通过以下方法来简化异构数据库的迁移工作：将源数据库架构和大部分的自定义代码 (包括视图、存储过程和函数等) 自动转换成与目标数据库兼容的格式。使用 AWS SCT 转换数据库架构与代码对象后，您可以使用 AWS DMS 将数据从源数据库迁移至目标数据库，以完成迁移项目。

## 操作说明
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定源数据库和目标数据库版本和引擎。 |  | 数据库管理员/开发人员 | 
| 识别 AWS DMS 复制实例。 |  | 数据库管理员/开发人员 | 
| 确定存储需求（存储类型和容量）。 |  | 数据库管理员/开发人员 | 
| 确定网络要求，包括延迟与带宽。 |  |  数据库管理员/开发人员 | 
| 根据 Microsoft SQL Server 兼容性列表和容量要求，确定目标服务器实例的硬件要求。 |  | 数据库管理员/开发人员 | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员/开发人员 | 
| 安装 AWS SCT 和 Oracle 驱动程序。 |  | 数据库管理员/开发人员 | 
| 确定备份策略。 |  | 数据库管理员/开发人员 | 
| 确定可用性要求。 |  | 数据库管理员/开发人员 | 
| 确定应用程序迁移/切换策略。 |  | 数据库管理员/开发人员 | 
| 选择正确的实例类型（容量、存储功能、网络功能）。 |  | 数据库管理员/开发人员 | 

### 配置环境
<a name="configure-the-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。源、目标和复制实例应位于同一 VPC 中。将它们放在同一可用区也很好。 |  | 开发者版 | 
| 为访问数据库创建必要的安全组。 |  |  开发者版 | 
| 生成并配置密钥对。 |  | 开发者版 | 
| 配置子网、可用区域和 CIDR 块。 |  | 开发者版 | 

### 配置源：EC2 实例上的 Oracle 数据库
<a name="configure-the-source-oracle-database-on-ec2-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用所需用户和角色，在 Amazon EC2 实例上安装 Oracle 数据库。 |  | 数据库管理员 | 
|  执行下一列中的三个步骤以从 EC2 实例外部访问 Oracle。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.html) | 数据库管理员 | 
| 当 Amazon EC2 重新启动时，公共 DNS 会发生变化。请务必更新“tnsnames”和“侦听器”中的 Amazon EC2 公有 DNS，或者使用弹性 IP 地址。 |  | 数据库管理员/开发人员 | 
| 配置 EC2 实例安全组，以复制实例和所需客户端可以访问源数据库。 |  | 数据库管理员/开发人员 | 

### 配置目标：Amazon RDS for MySQL
<a name="configure-the-target-amazon-rds-for-mysql"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置并运行 Amazon RDS for MySQL 数据库实例。 |  | 开发者版 | 
| 在 Amazon RDS for MySQL 数据库实例中创建必要表空间。 |  | 数据库管理员 | 
| 配置安全组以复制实例和所需客户端可以访问目标数据库。 |  | 开发者版 | 

### 配置 AWS SCT 并在目标数据库创建架构
<a name="configure-aws-sct-and-create-a-schema-in-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 AWS SCT 和 Oracle 驱动程序。 |  | 开发者版 | 
| 输入相应参数，然后连接至源和目标。 |  | 开发者版 | 
| 生成架构转换报告。 |  | 开发者版 | 
| 根据需要更正代码和架构，尤其是表空间和引号，并在目标数据库上运行。 |  |  开发者版 | 
| 在迁移数据之前验证源与目标上的架构。 |  | 开发者版 | 

### 使用 AWS DMS 迁移数据
<a name="migrate-data-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为完全加载和更改数据捕获 (CDC) 或仅 CDC，您必须设置一个额外的连接属性。 |  | 开发者版 | 
| 必须向 AWS DMS 源 Oracle 数据库定义中指定的用户授予所有必需的权限。有关完整列表，请参阅 https://docs.aws.amazon.com/dms/ latest/userguide/CHAP \$1Source.oracle.html \$1CHAP\$1Source .Oracle.Self-Managed。 |  | 数据库管理员/开发人员 | 
| 在源数据库上启用补充日志记录 |  | 数据库管理员/开发人员 | 
| 对于满载和 CDC（或仅适用于 CDC），请在源数据库上启用存档日志模式。 |  | 数据库管理员 | 
| 创建源和目标数据库，并测试端点。 |  | 开发者版 | 
| 成功连接端点后，创建复制任务。 |  | 开发者版 | 
| 在任务中选择仅 CDC 或满载加 CDC，以捕获仅用于连续复制的更改，或者分别为满载和持续更改捕获更改。 |  | 开发者版 | 
| 运行复制任务并监控 Amazon CloudWatch 日志。 |  |  开发者版 | 
| 验证源数据库和目标数据库中的数据。 |  | 开发者版 | 

### 迁移您的应用程序并进行割接
<a name="migrate-your-application-and-cut-over"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵照应用程序迁移策略的步骤。 |  | 数据库管理员、开发人员、应用程序所有者 | 
| 遵循所选的应用程序割接/切换策略。 |  | 数据库管理员、开发人员、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源和目标数据库中架构和数据。 |  | 数据库管理员/开发人员 | 
| 收集与迁移时间、手动与工具各自的百分比、成本节约等相关的指标。 |  |  DBA/Developer/AppOwner | 
| 查看项目文档和构件。 |  | DBA/Developer/AppOwner | 
| 关闭临时 AWS 资源。 |  | 数据库管理员/开发人员 | 
| 关闭项目并提供反馈。 |  | DBA/Developer/AppOwner | 

## 相关资源
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-resources"></a>
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 
+ [AWS DMS 网站](https://aws.amazon.com/dms/)
+ [AWS DMS 博客文章](https://aws.amazon.com/blogs/database/tag/dms/) 
+ [Strategies for Migrating Oracle Database to AWS](https://d1.awsstatic.com/whitepapers/strategies-for-migrating-oracle-database-to-aws.pdf) 
+ [Amazon RDS for Oracle FAQs](https://aws.amazon.com/rds/oracle/faqs/) 
+ [Oracle常见问题](https://aws.amazon.com/oracle/faq/) 
+ [Amazon EC2](https://aws.amazon.com/ec2/) 
+ [Amazon EC2 FAQs](https://aws.amazon.com/ec2/faqs/)
+ [在云计算环境内许可 Oracle 软件](http://www.oracle.com/us/corporate/pricing/cloud-licensing-070579.pdf)

# 使用 AWS DMS 和 AWS SCT 将 Oracle 数据库从亚马逊迁移 EC2 到适用于 MariaDB 的亚马逊 RDS
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct"></a>

*Veeranjaneyulu Grandhi 和 vinod kumar，Amazon Web Services*

## Summary
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-summary"></a>

此模式将引导您完成将亚马逊弹性计算云 (Amazon EC2) 实例上的 Oracle 数据库迁移到适用于 MariaDB 数据库实例的亚马逊关系数据库服务 (Amazon RDS) 的步骤。此模式使用 AWS Data Migration Service (AWS DMS) 进行数据迁移，使用 AWS Schema Conversion Tool (AWS SCT) 进行架构转换。

与在 Amazon RDS 上使用数据库相比，在 EC2 实例上管理 Oracle 数据库需要更多资源，而且成本更高。 Amazon RDS 可以轻松地在云中设置、操作和扩展关系数据库。Amazon RDS 提供经济实惠、且可调整的容量，同时自动执行耗时管理任务，例如硬件预置、数据库设置、修补和备份。

## 先决条件和限制
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 启动并运行实例和侦听器服务的源 Oracle 数据库。此数据库应处于 ARCHIVELOG 模式。
+ 熟悉[使用 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)

**限制**
+ 数据库大小限制：64 TB 

**产品版本**
+ 10.2 及更高版本、11g 直至 12.2、18c 的所有 Oracle 数据库版本。有关支持版本的最新列表，请参阅 AWS 文档中的[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)和 [AWS SCT 版本表](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。
+ Amazon RDS 支持 MariaDB Server Community Server 版本 10.3、10.4、10.5 和 10.6。有关支持版本的最新列表，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html)。

## 架构
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-architecture"></a>

**源技术堆栈**
+  EC2 实例上的 Oracle 数据库

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

**数据迁移架构**

![\[使用 AWS DMS 进行迁移。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/0b4269c6-8ea3-4672-ad14-1ffac1dc14f3/images/ed191145-e5c2-4d61-8827-31f081450c03.png)


**目标架构**

![\[使用 AWS SCT 进行迁移。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/0b4269c6-8ea3-4672-ad14-1ffac1dc14f3/images/0171f548-37dd-4110-851c-7e74dfff3732.png)


## 工具
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-tools"></a>
+ [AWS Schema Conversion Tool（AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)通过自动将源数据库架构和大部分数据库代码对象（包括视图、存储过程和功能）转换为与目标数据库兼容的格式，预测异构数据库迁移。使用 AWS SCT 转换数据库架构与代码对象后，您可以使用 AWS DMS 将数据从源数据库迁移至目标数据库，以完成迁移项目。有关更多信息，请参阅 AWS SCT 文档中的[使用 Oracle 作为 AWS SCT 的目标](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)。
+ [AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) (AWS DMS) 可帮助您快速安全地将数据库迁移到 AWS。源数据库可在迁移过程中保持全面运行，从而最大程度地为依赖该数据库的应用程序减少停机时间。AWS DMS 可以在最广泛使用的商用和开源数据库之间迁移数据。AWS DMS 支持同构迁移 (如 Oracle 到 Oracle)，也支持不同数据库平台之间的异构迁移（如 Oracle 到 Amazon Aurora，或 Microsoft SQL Server 到 Amazon Aurora）。若要了解有关迁移 Oracle 数据库的更多信息，请参阅 AWS DMS 文档中的[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。

## 操作说明
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-epics"></a>

### 计划迁移
<a name="plan-for-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定版本和数据库引擎。 | 确定源数据库和目标数据库版本和引擎。 | 数据库管理员、开发人员 | 
| 确定复制实例。 | 确定 AWS DMS 复制实例。 | 数据库管理员、开发人员 | 
| 确定存储要求。 | 确定存储类型与容量。 | 数据库管理员、开发人员 | 
| 识别网络要求。 | 确定网络延迟和带宽。 | 数据库管理员、开发人员 | 
| 确定硬件要求。 | （根据 Oracle 兼容性列表和容量要求）确定源服务器实例和目标服务器实例的硬件要求。 | 数据库管理员、开发人员 | 
| 确定安全要求。 | 确定源数据库和目标数据库的网络访问安全要求。 | 数据库管理员、开发人员 | 
| 安装驱动程序。 | 安装最新 AWS SCT 和 Oracle 驱动程序。 | 数据库管理员、开发人员 | 
| 确定备份策略。 |  | 数据库管理员、开发人员 | 
| 确定可用性要求。 |  | 数据库管理员、开发人员 | 
| 选择应用程序 migration/switchover 策略。 |  | 数据库管理员、开发人员 | 
| 选择实例类型 | 根据容量、存储和网络功能选择正确的实例类型。 | 数据库管理员、开发人员 | 

### 配置环境
<a name="configure-the-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 | 源实例、目标实例和复制实例应位于同一 VPC 和同一可用区（推荐)。 | 开发者版 | 
| 创建安全组。 | 为访问数据库创建必要的安全组。 | 开发者版 | 
| 生成密钥对。 | 生成并配置密钥对。 | 开发者版 | 
| 配置其他资源。 | 配置子网、可用区域和 CIDR 块。 | 开发者版 | 

### 配置源
<a name="configure-the-source"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动实 EC2 例。 | 有关说明，请参阅 [Amazon EC2 文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)。 | 开发者版 | 
| 安装 Oracle 数据库。 | 使用所需的用户和角色在 EC2 实例上安装 Oracle 数据库。 | 数据库管理员 | 
| 按照任务描述中的步骤从 EC2 实例外部访问 Oracle。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct.html) | 数据库管理员 | 
| 更新 Amazon EC2 公有 DNS。 |  EC2 实例重启后，公有 DNS 会发生变化。请务必更新`tnsnames`和中的 Amazon EC2 公有 DNS`listener`，或者使用弹性 IP 地址。 | 数据库管理员、开发人员 | 
| 配置 EC2 实例安全组。 | 配置 EC2 实例安全组，以便复制实例和所需的客户端可以访问源数据库。 | 数据库管理员、开发人员 | 

### 配置 目标 Amazon RDS for MariaDB 环境
<a name="configure-the-target-amazon-rds-for-mariadb-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动 RDS 数据库实例。 | 配置并启动 Amazon RDS for MariaDB 数据库实例。 | 开发者版 | 
| 创建表空间。 | 在 Amazon RDS MariaDB 数据库中创建任何必要表空间。 | 数据库管理员 | 
| 配置安全组。 | 配置实例安全组，以便复制实例和所需客户端访问目标数据库。 | 开发者版 | 

### 配置 AWS SCT
<a name="configure-aws-sct"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装驱动程序。 | 安装最新 AWS SCT 和 Oracle 驱动程序。 | 开发者版 | 
| 连接。 | 输入相应参数，然后连接至源和目标。 | 开发者版 | 
| 生成架构转换报告。 | 生成 AWS SCT 架构转换报告。 | 开发者版 | 
| 根据需要更正代码与架构。 | 对代码和架构（尤其是表空间和引号）进行必要的更正。 | 数据库管理员、开发人员 | 
| 验证架构。 | 加载数据之前验证源和目标上的架构。 | 开发者版 | 

### 使用 AWS DMS 迁移数据
<a name="migrate-data-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置连接属性。 | 对于完全加载和更改数据捕获 (CDC) 或仅作为 CDC，请设置一个额外的连接属性。有关更多信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html)。 | 开发者版 | 
| 设置补充日志记录。 | 在源数据库上启用补充日志记录。 | 数据库管理员、开发人员 | 
| 启用存档日志模式。 | 对于完全加载和 CDC（或仅适用于 CDC），请在源数据库上启用存档日志模式。 | 数据库管理员 | 
| 创建并测试端点。 | 创建源端点和目标端点并测试连接。有关更多信息，请参阅 [Amazon DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)。 | 开发者版 | 
| 创建复制任务。 | 成功连接端点后，创建复制任务。有关更多信息，请参阅 [Amazon DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html)。 | 开发者版 | 
| 选择 复制类型。 | 在任务中选择**仅 CDC** 或**完全加载外加 CDC**，以捕获仅用于连续复制的更改或完全加载和持续更改。 | 开发者版 | 
| 启动并监视任务。 | 启动复制任务并监控 Amazon CloudWatch 日志。有关更多信息，请参阅 [Amazon DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)。 | 开发者版 | 
| 验证数据。 | 验证源数据库和目标数据库中的数据。 | 开发者版 | 

### 迁移应用程序并割接至目标数据库
<a name="migrate-applications-and-cut-over-to-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循选定的应用程序迁移策略。 |  | 数据库管理员、应用程序所有者、开发人员 | 
| 遵循所选的应用程序 cutover/switchover 策略。 |  | 数据库管理员、应用程序所有者、开发人员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证架构与数据。 | 确保在项目结束之前在源和目标中成功验证架构与数据。 | 数据库管理员、开发人员 | 
| 收集指标。 | 收集与迁移时间、手动任务与工具任务的百分比、成本节约等类似标准。 | 数据库管理员、应用程序所有者、开发人员 | 
| 查看文档。 | 查看项目文档和构件。 | 数据库管理员、应用程序所有者、开发人员 | 
| 关闭资源。 | 关闭临时 AWS 资源。 | 数据库管理员、开发人员 | 
| 关闭项目。 | 关闭迁移项目并提供任何反馈。 | 数据库管理员、应用程序所有者、开发人员 | 

## 相关资源
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-resources"></a>
+ [MariaDB Amazon RDS 概述](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html)
+ [Amazon RDS for MariaDB 产品详细信息](https://aws.amazon.com/rds/mariadb/features)
+ [将 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [将 Oracle 数据库迁移至 AWS 的策略](https://docs.aws.amazon.com/whitepapers/latest/strategies-migrating-oracle-db-to-aws/strategies-migrating-oracle-db-to-aws.html)
+ [在云计算环境内许可 Oracle 软件](http://www.oracle.com/us/corporate/pricing/cloud-licensing-070579.pdf)
+ [Amazon RDS for Oracle FAQs](https://aws.amazon.com/rds/oracle/faqs/)
+ [AWS DMS 概述](https://aws.amazon.com/dms/)
+ [AWS DMS 博客文章](https://aws.amazon.com/blogs/database/tag/dms/)
+ [亚马逊 EC2 概述](https://aws.amazon.com/ec2/)
+ [Amazon EC2 FAQs](https://aws.amazon.com/ec2/faqs/)
+ [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)

# 使用 AWS DMS 和 AWS SCT 将本地 Oracle 数据库迁移至 Amazon RDS for MySQL
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct"></a>

*Sergey Dmitriev 和 Naresh Damera，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-summary"></a>

此模式将引导您完成将本地 Oracle 数据库迁移至 Amazon Relational Database Service (Amazon RDS) for MySQL 数据库实例的过程。它使用 AWS Database Migration Service (AWS DMS) 迁移数据，并使用 AWS Schema Conversion Tool (AWS SCT) 将源数据库架构和对象转换为与 Amazon RDS for MySQL 兼容的格式。

## 先决条件和限制
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-prerequisites-and-limitations"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心中的 Oracle 源数据库 

**限制**
+ 数据库大小限制：64 TB

**产品版本**
+ 11g 版本（包括版本 11.2.0.3.v1 及更高版本）以及最高 12.2 和 18c 的所有 Oracle 数据库版本。有关支持版本的最新列表，请参阅[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。关于 AWS SCT 支持的 Oracle 数据库版本的信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。 
+ AWS DMS 当前支持 MySQL 5.5、5.6 和 5.7 版。有关受支持版本的最新列表，请参阅 AWS 文档中的[将 MySQL 兼容数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)。

## 架构
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-architecture"></a>

**源技术堆栈**
+ 本地 Oracle 数据库

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

**数据迁移架构**

![\[AWS 云 architecture showing data migration from on-premises to RDS via VPC, Internet Gateway, and AWS DMS.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/0385e5ad-a1ca-4c29-945b-592321d95f9d/images/c872e033-b13a-4436-b503-0632b5d437ae.png)


 

## 工具
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-tools"></a>
+ **AWS DMS** — [AWS Database Migration Services](https://docs.aws.amazon.com/dms/latest/userguide/) (AWS DMS) 可帮助您迁移关系数据库、数据仓库、NoSQL 数据库和其他类型的数据存储。您可以使用 AWS DMS 将数据迁移到 Amazon Web Services Cloud、本地实例之间（通过 Amazon Web Services Cloud 设置）或云和本地设置的组合之间。
+ **AWS SCT** — [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) (AWS SCT) 用于将数据库架构从一个数据库引擎转换为另一个数据库引擎。该工具转换的自定义代码包括视图、存储过程和函数。该工具无法自动转换的任意代码会被清楚地标记，以便您自己进行转换。

## 操作说明
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库版本和引擎。 |  | 数据库管理员 | 
|  确定目标服务器实例的硬件要求。 |  | 数据库管理员， SysAdmin | 
| 确定存储需求（存储类型和容量）。 |  | 数据库管理员， SysAdmin | 
| 根据容量、存储功能和网络功能选择正确的实例类型。 |  | 数据库管理员， SysAdmin | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员， SysAdmin  | 
| 确定应用程序迁移策略。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）和子网。 |  | SysAdmin | 
| 创建安全组和网络访问控制列表 (ACLs)。 |  | SysAdmin | 
| 配置和启动运行 Amazon RDS 数据库实例。 |  | 数据库管理员， SysAdmin | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS SCT 迁移数据库架构 |  | 数据库管理员 | 
| 使用 AWS DMS 迁移数据。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS SCT 分析并转换应用程序代码中的 SQL 代码。 | 有关更多信息，请参阅 https://docs.aws.amazon.com/SchemaConversionTool/ latest/userguide/CHAP \$1converting.app.html。 | 应用程序所有者 | 
| 遵循应用程序迁移策略。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | 数据库管理员， SysAdmin | 
| 查看和验证项目文档。 |  | 数据库管理员， SysAdmin | 
| 收集与迁移时间、手动与工具各自的百分比、成本节约等相关的指标。 |  | 数据库管理员， SysAdmin | 
| 关闭项目并提供反馈。 |  |  | 

## 相关资源
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-related-resources"></a>

**参考**
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/)
+ [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_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/)
+ [AWS DMS（视频）](https://www.youtube.com/watch?v=zb4GcjEdl8U) 
+ [Amazon RDS（视频）](https://www.youtube.com/watch?v=igRfulrrYCo) 

# 使用 Oracle Bystander 和 AWS DMS 将本地 Oracle 数据库迁移到 Amazon RDS for PostgreSQL
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms"></a>

*Cady Motyka，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-summary"></a>

此模式描述了如何在最短的停机时间内将本地 Oracle 数据库迁移到以下任一与 PostgreSQL 兼容的 AWS 数据库服务：
+ Amazon Relational Database Service (Amazon RDS) for PostgreSQL
+ Amazon Aurora PostgreSQL 兼容版

该解决方案使用 AWS Database Migration Service（AWS DMS）迁移数据，使用 AWS Schema Conversion Tool（AWS SCT）来转换数据库架构，使用 Oracle Bystander 数据库来帮助管理迁移。在此实施中，停机时间仅限于在数据库上创建或验证所有外键所需时间。 

该解决方案还使用带有 Oracle 旁观者数据库的亚马逊弹性计算云 (Amazon EC2) 实例，帮助控制通过 AWS DMS 的数据流。您可以暂时暂停从本地 Oracle 数据库到 Oracle Bystander 的流式复制，以激活 AWS DMS 以赶上数据验证或使用其他数据验证工具。当 AWS DMS 完成当前更改的迁移后，Amazon RDS for PostgreSQL 数据库实例或 Aurora PostgreSQL-Compatible 数据库实例和 Bystander 数据库将具有相同的数据。 

## 先决条件和限制
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心中的 Oracle 源数据库，配置了 Active Data Guard（ADG）备用数据库
+ AWS Direct Connect 配置在本地数据中心和 AWS Secrets Manager 之间，用于存储数据库机密
+ AWS SCT 连接器的 Java 数据库连接 (JDBC) 驱动程序，安装在本地计算机上或安装了 AWS SCT 的 EC2 实例上
+ 熟悉[使用 Oracle 数据库作为 AWS DMS 的源数据库](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ 熟悉[使用 PostgreSQL 数据库作为 AWS DMS 的目标数据库](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

**限制**
+ 数据库大小限制：64 TB

**产品版本**
+ AWS DMS 支持版本为 10.2 及更高版本（对于版本 10.x）、11g 直至 12.2、18c 以及 19c 的所有 Oracle 数据库版本。有关支持版本的最新列表，请参阅[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。关于 AWS SCT 支持的 Oracle 数据库版本的信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。
+ AWS DMS 支持版本为 9.4 和更高版本（对于版本 9.x）、10.x、11.x、12.x 和 13.x 的 PostgreSQL。有关最新信息，请参阅 AWS 文档中的[使用 PostgreSQL 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)。

## 架构
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-architecture"></a>

**源技术堆栈**
+ 本地 Oracle 数据库
+ 一个EC2 包含 Oracle 数据库旁观者的实例

**目标技术堆栈**
+ Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 实例，PostgreSQL 9.3 及更高版本

**目标架构**

下图显示了使用 AWS DMS 和 Oracle Bystander 将 Oracle 数据库迁移至与 PostgreSQL 兼容的 AWS 数据库的示例工作流程：

![\[将本地 Oracle 数据库迁移到 AWS 上的 PostgreSQL\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6f5d5500-8b09-4bd1-8ef9-e670d58d07f8/images/1de98abd-c143-481a-b55f-e8d00eb96a38.png)


## 工具
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ [AWS Schema Conversion Tool（AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 通过以下方法来简化异构数据库的迁移工作：将源数据库架构和大部分的自定义代码自动转换成与目标数据库兼容的格式。
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。

## 操作说明
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-epics"></a>

### 将 Oracle 数据库架构转换为 PostgreSQL
<a name="convert-the-oracle-database-schema-to-postgresql"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS SCT。 | 创建新报告，然后连接到 Oracle 作为源，将 PostgreSQL 作为目标。在**项目设置**中，转到 **SQL 脚本**选项卡。将**目标 SQL 脚本**更改为**多个文件**。这些文件将在以后使用，命名如下：[\[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-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.html) | 数据库管理员 | 
| 转换 Oracle 数据库架构。 | 在**操作**选项卡中，选择**生成报告**。然后，选择**转换架构**，然后选择**另存为 SQL**。 | 数据库管理员 | 
| 修改脚本。 | 例如，如果源架构中的数字已转换为 PostgreSQL 中的数字格式，则可能需要修改脚本，但要改用 **BIGINT** 以提高性能。 | 数据库管理员 | 

### 创建和配置 Amazon RDS 数据库实例
<a name="create-and-configure-the-amazon-rds-db-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon RDS 数据库实例。 | 在正确的 AWS 区域中，创建一个新 PostgreSQL 数据库实例。有关更多信息，请参阅 Amazon RDS 文档中的[创建 PostgreSQL 数据库实例并连接到 PostgreSQL 数据库实例上的数据库](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html)。 | AWS SysAdmin、DBA | 
| 配置数据库实例规格。 | 指定数据库引擎版本、数据库实例类、多可用区部署、存储类型和分配的存储空间。输入数据库实例标识符、主用户名和主密码。 | AWS SysAdmin、DBA | 
| 配置网络和安全。 | 指定虚拟私有云（VPC）、子网组、公共可访问性、可用区首选项和安全组。 | 数据库管理员， SysAdmin | 
| 配置数据库选项。 | 指定数据库名称、端口、参数组、加密和 KMS 密钥。 | AWS SysAdmin、DBA | 
| 配置备份。 | 指定备份保留期、备份窗口、开始时间、持续时间以及是否将标签复制到快照。 | AWS SysAdmin、DBA | 
| 配置监控选项。 | 激活或停用增强的监控和性能见解。 | AWS SysAdmin、DBA | 
| 配置维护选项。 | 指定次要版本自动升级、维护窗口以及开始日期、时间和持续时间。 | AWS SysAdmin、DBA | 
| 运行 AWS SCT 中的预迁移脚本。 | 在 Amazon RDS 实例上，运行以下由 AWS SCT 生成的脚本：[\[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-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.html) | AWS SysAdmin、DBA | 

### 在 Amazon 中配置 Oracle 旁观者 EC2
<a name="configure-the-oracle-bystander-in-amazon-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Amazon 设置网络 EC2。 | 创建新 VPC、子网、互联网网关、路由表和安全组。 | AWS SysAdmin | 
| 创建实 EC2 例。 | 在相应的 AWS 区域中，创建一个新 EC2 实例。选择亚马逊机器映像（AMI），选择实例大小并配置实例详细信息：实例数量 (1)、您在上一个任务中创建的 VPC 和子网、自动分配公有 IP 地址以及其他选项。添加存储、配置安全组并启动。出现提示时，创建并保存密钥对，以供下一步使用。 | AWS SysAdmin | 
| 将 Oracle 源数据库连接到实 EC2 例。 | 将 IPv4 公有 IP 地址和 DNS 复制到文本文件中，然后使用 SSH 进行连接，如下所示：ssh **-i “your\$1file.pem” ec2-user@<your-ip**--DNS>。address-or-public | AWS SysAdmin | 
| 在 Amazon 中为旁观者设置初始主机。 EC2 | 设置 SSH 密钥、bash 配置文件、ORATAB 和符号链接。创建 Oracle 目录。 | AWS SysAdmin，Linux 管理员 | 
| 在 Amazon 中为旁观者设置数据库副本 EC2 | 使用 RMAN 创建数据库副本、启用补充日志记录和创建备用控制文件。复制完成后，将数据库置于恢复模式。 | AWS SysAdmin、DBA | 
| 设置 Oracle Data Guard。 | 修改 **listener.ora** 文件并启动侦听器。设置新的存档目标。将旁观者置于恢复模式，替换临时文件以避免将来损坏，必要时安装 crontab 以防止存档目录空间不足，并编辑源和备用目录的 **manage-trclog-files-oracle.cfg** 文件。 | AWS SysAdmin、DBA | 
| 准备 Oracle 数据库以同步传送。 | 添加备用日志文件并更改恢复模式。在源主服务器和源备用服务器上都将日志传送更改为 **SYNC AFFIRM**。将日志切换到主日志上，通过 Amazon EC2 旁观者警报日志确认您正在使用备用日志文件，并确认重做流正在同步流动。 | AWS SysAdmin、DBA | 

### 使用 AWS DMS 迁移数据
<a name="migrate-data-with-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 AWS DMS 中创建 AWS DMS 复制实例。 | 填写名称、实例类别、VPC（与 Amazon EC2 实例相同）、多可用区和公共可访问性字段。在**高级**下方，指定分配的存储空间、子网组、可用区、VPC 安全组和 AWS Key Management Service（AWS KMS）密钥。 | AWS SysAdmin、DBA | 
| 创建源数据库端点。 | 指定终端节点名称、类型、源引擎 (Oracle)、服务器名称（Amazon EC2 私有 DNS 名称）、端口、SSL 模式、用户名、密码、SID、VPC（指定具有复制实例的 VPC）和复制实例。要测试连接，请选择**运行测试**，然后创建端点。您还可以配置以下高级设置：**maxFileSize**和 Sc **numberDataTypeal** e。 | AWS SysAdmin、DBA | 
| 将 AWS DMS 连接到 Amazon RDS for PostgreSQL。 | 为跨连接创建迁移安全组 VPCs。 | AWS SysAdmin、DBA | 
| 创建目标数据库端点。 | 指定端点名称、类型、源引擎 (PostgreSQL)、服务器名称（Amazon RDS 端点）、端口、SSL 模式、用户名、密码、数据库名称、VPC（指定具有复制实例的 VPC）和复制实例。要测试连接，请选择**运行测试**，然后创建端点。您还可以配置以下高级设置：**maxFileSize **和 Sc **numberDataTypeal** e。 | AWS SysAdmin、DBA | 
| 创建 AWS DMS 复制任务。 | 指定任务名称、复制实例、源端点和目标端点以及复制实例。对于迁移类型，选择**迁移现有数据并复制持续更改**。取消勾选**创建时启动任务**复选框。 | AWS SysAdmin、DBA | 
| 配置 AWS DMS 复制任务设置。 | 对于目标表格准备模式，请选择**什么都不做**。完全加载完成后停止任务（创建主键）。指定受限或完整 LOB 模式，然后激活控制表。或者，您可以配置**CommitRate**高级设置。 | 数据库管理员 | 
| 配置表映射。 | 在**表映射**部分，为迁移中包含的所有架构中的所有表创建**包含**规则，然后创建**排除**规则。添加三个转换规则，将架构、表和列名转换为小写，并添加此特定迁移所需任何其他规则。 | 数据库管理员 | 
| 启动任务。 | 启动复制任务。确保全负载正在运行。在 Oracle 主数据库上运行 **ALTER SYSTEM SWITCH LOGFILE** 以启动任务。 | 数据库管理员 | 
| 运行 AWS SCT 中的迁移中脚本。 | 在 Amazon RDS for PostgreSQL 上，运行由 AWS SCT 生成的以下脚本：[\[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-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.html) | 数据库管理员 | 
| 重新启动任务以继续更改数据捕获 (CDC)。 | 在 Amazon RDS for PostgreSQL 数据库实例上运行 **VACUUM**，然后重启 AWS DMS 任务以应用缓存的 CDC 更改。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看 AWS DMS 日志和验证表中是否存在任何错误。 | 检查并修复所有复制或验证错误。 | 数据库管理员 | 
| 停止所有 Oracle 依赖项。 | 停止所有 Oracle 依赖项，关闭 Oracle 数据库上的侦听器，然后运行 **ALTER SYSTEM SWITCH LOGFILE**。当 AWS DMS 任务没有显示任何活动时，将其停止。 | 数据库管理员 | 
| 运行 AWS SCT 中的迁移后脚本。 | 在 Amazon RDS for PostgreSQL 上，运行由 AWS SCT 生成的以下脚本：[\[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-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.html) | 数据库管理员 | 
| 完成 Amazon RDS for PostgreSQL 的其他步骤。 | 如果需要，增量序列以匹配 Oracle，运行 **VACUUM** 和 **ANALYZE**，然后拍摄合规性快照。 | 数据库管理员 | 
| 打开 Amazon RDS for PostgreSQL 的连接。 | 从 Amazon RDS for PostgreSQL 中移除 AWS DMS 安全组，添加生产安全组，并将应用程序指向新数据库。 | 数据库管理员 | 
| 清理 AWS DMS 对象。 | 移除终端节点、复制任务、复制实例和 EC2 实例。 | SysAdmin，DBA | 

## 相关资源
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-resources"></a>
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/)
+ [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS for PostgreSQL 定价](https://aws.amazon.com/rds/postgresql/pricing/) 

# 使用 AWS DMS 和 AWS SCT 将 Oracle 数据库迁移至 Amazon Redshift
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct"></a>

*Piyush Goyal 和 Brian motzer，Amazon Web Services*

## Summary
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-summary"></a>

此模式为使用 AWS Database Migration Service (AWS DMS) 和 AWS Schema Conversion Tool (AWS SCT)将 Oracle 数据库迁移至 Amazon Web Services (AWS) Cloud 中的 Amazon Redshift 云数据仓库提供了指导。该模式涵盖本地或安装在亚马逊弹性计算云 (Amazon EC2) 实例上的源 Oracle 数据库。其亦涵盖了 Amazon Relational Database Service (Amazon RDS) for Oracle 数据库。

## 先决条件和限制
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-prereqs"></a>

**先决条件**
+ 在本地数据中心或 Amazon Web Services 中运行的 Oracle 数据库。
+ 一个有效的 Amazon Web Services account
+ 熟悉[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ 熟悉[适用 Amazon Redshift 数据库作为 AWS DMS 目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html)
+ 了解 Amazon RDS、Amazon Redshift、适用的数据库技术以及 SQL
+ 适用于 AWS SCT 连接器的 Java 数据库（安装了 AWS SCT）连接（JDBC）驱动程序。

**产品版本**
+ 对于自管理 Oracle 数据库，AWS DMS 支持 10.2 及更高版本（版本 10.*x*）、11g 直至 12.2、18c 以及 19c 版本的所有 Oracle 数据库版本。对于由 AWS 托管的 Amazon RDS for Oracle 数据库，AWS DMS 支持用于版本 11g（版本 11.2.0.4 及更高版本）直至 12.2、18c 以及 19c 版本的所有 Oracle 数据库版本。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。

## 架构
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-architecture"></a>

**源技术堆栈**

下列情况之一：
+ 本地 Oracle 数据库
+  EC2 实例上的 Oracle 数据库
+ Amazon RDS for Oracle 数据库实例

**目标技术堆栈**
+ Amazon Redshift

**目标架构**

*从 Amazon Web Services Cloud 内运行的 Oracle 数据库至 Amazon Redshift：*

![\[将 AWS 云中的 Oracle 数据库迁移至 Amazon Redshift 数据仓库。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/22807be0-c7e0-49c6-8923-7d23bf83a50d/images/7140e819-81d6-45c4-805b-8e10828076a7.png)


*从本地数据中心内运行的 Oracle 数据库至 Amazon Redshift：*

![\[将本地 Oracle 数据库迁移到 Amazon Redshift 数据仓库。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/22807be0-c7e0-49c6-8923-7d23bf83a50d/images/d6654b48-0e1b-4b01-a261-5a640be01fd7.png)


## 工具
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) -  AWS Data Migration Service (AWS DMS) 可帮助您快速安全地将数据库迁移到 AWS。源数据库可在迁移过程中保持全面运行，从而最大程度地为依赖该数据库的应用程序减少停机时间。AWS DMS 可以在最广泛使用的商用和开源数据库之间迁移数据。 
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) – AWS Schema Conversion Tool (AWS SCT) 可用于将现有数据库架构从一个数据库引擎转换为另一个数据库引擎。其支持各种数据库引擎（包括 Oracle、SQL Server 和 PostgresSQL）作为源。

## 操作说明
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证数据库版本。 | 验证源数据库和目标数据库版本并确保其受 AWS DMS 支持。有关支持的 Oracle 数据库版本的信息，请参阅[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。有关使用 Amazon Redshift 作为目标的信息，请参阅[使用 Amazon Redshift 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html)。 | 数据库管理员 | 
| 创建 VPC 和安全组。 | 在 Amazon Web Services account 中，创建虚拟私有云（VPC）（如果没有虚拟私有云（VPC））。为源数据库与目标数据库的出站流量创建安全组。有关更多信息，请参阅 [Amazon Virtual Private Cloud (Amazon VPC)文档](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)。 | 系统管理员 | 
| 安装 AWS SCT。 | 下载并安装最新版本的 AWS SCT 及相应的驱动程序。有关更多信息，请参阅[安装、验证和更新 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)。 | 数据库管理员 | 
| 为 AWS DMS 任务创建用户。 | 在源数据库中创建 AWS DMS 用户，并授予其读取权限。此用户将被 AWS SCT 和 AWS DMS 使用。 | 数据库管理员 | 
| 测试数据库连接。 | 测试至 Oracle 数据库实例的连接。 | 数据库管理员 | 
| 在 AWS SCT 中创建新项目。 | 打开 AWS SCT 工具并创建新项目。 | 数据库管理员 | 
| 分析待迁移的 Oracle 架构。 | 使用 AWS SCT 分析待迁移架构，并生成数据库迁移评测报告。有关更多信息，请参阅 AWS SCT 文档中的[创建数据库迁移评测报告](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_AssessmentReport.Create.html)。 | 数据库管理员 | 
| 查看评测报告。 | 查看报告，以了解迁移的可行性。某些数据库对象可能需要手动转换。有关报告的更多信息，请参阅 AWS SCT 文档中的[查看评测报告](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_AssessmentReport.View.html)。 | 数据库管理员 | 

### 准备目标数据库
<a name="prepare-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个 Amazon Redshift 集群。 | 在您之前创建的 VPC 中创建 Amazon Redshift 集群。有关更多信息，请参阅 Amazon Redshift 文档中的 [Amazon Redshift 集群](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)。 | 数据库管理员 | 
| 创建数据库用户。 | 从 Oracle 源数据库中提取用户、角色和权限列表。在目标 Amazon Redshift 数据库中创建用户，并应用上一步骤中的角色。 | 数据库管理员 | 
| 评估数据库参数。 | 查看 Oracle 源数据库中的数据库选项、参数、网络文件和数据库链接，然后评估其对目标的适用性。            | 数据库管理员 | 
| 将所有相关设置应用至目标。 | 有关该步骤的更多信息，请参阅 Amazon Redshift API 文档中的[配置参考](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_ConfigurationRef.html)。 | 数据库管理员 | 

### 在目标数据库中创建对象
<a name="create-objects-in-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在目标数据库中创建 AWS DMS 用户。 | 在目标数据库中创建 AWS DMS 用户，并授予其读写权限。验证来自 AWS SCT 的连接。 | 数据库管理员 | 
| 转换架构，查看 SQL 报告，并保存所有错误或警告。 | 有关更多信息，请参阅 AWS SCT 文档中的[使用 AWS SCT 转换数据库架构](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html)。 | 数据库管理员 | 
| 将架构更改应用至目标数据库或将其另存为 .sql 文件。 | 有关说明，请参阅 AWS SCT 文档中的[在 AWS SCT 中保存和应用转换后的架构](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.DW.html#CHAP_Converting.DW.SaveAndApply)。 | 数据库管理员 | 
| 验证目标数据库中的对象。 | 在目标数据库中验证上一步骤创建的对象。重写或重新设计所有未成功转换的对象。 | 数据库管理员 | 
| 禁用外键和触发器。 | 禁用任何外键和触发器。在运行 AWS DMS 时，这可能会导致完全加载过程中出现数据加载问题。 | 数据库管理员 | 

### 使用 AWS DMS 迁移数据
<a name="migrate-data-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS DMS 复制实例。 | 登录 AWS 管理控制台，并打开 AWS DMS 控制台。在导航窗格中，选择**复制实例**、**创建复制实例**。有关详细说明，请参阅 AWS DMS 文档中 *AWS DMS 入门*中的[步骤 1](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.ReplicationInstance)。 | 数据库管理员 | 
| 创建源和目标端点。 | 创建源端点和目标端点，测试从复制实例至源端点和目标端点的连接。有关详细说明，请参阅 AWS DMS 文档中 *AWS DMS 入门*中的[步骤 2](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.Endpoints)。 | 数据库管理员 | 
| 创建复制任务。 | 创建复制任务，并选择适当的迁移方法。有关详细说明，请参阅 AWS DMS 文档中 *AWS DMS 入门*中的[步骤 3](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.Tasks)。 | 数据库管理员 | 
| 启动数据复制。 | 启动复制任务并监控日志中是否存在错误。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建应用程序服务器。 | 在 AWS 上创建新应用程序服务器。 | 应用程序所有者 | 
| 迁移应用程序代码。 | 将应用程序代码迁移至新服务器。 | 应用程序所有者 | 
| 配置应用程序服务器。 | 为目标数据库和驱动程序配置应用程序服务器。 | 应用程序所有者 | 
| 优化应用程序代码。 | 优化目标引擎的应用程序代码。 | 应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证用户。 | 在目标 Amazon Redshift 数据库中，验证用户并向其授予角色和权限。 | 数据库管理员 | 
| 验证应用程序是否已锁定。 | 确保应用程序已锁定，以避免进一步更改。 | 应用程序所有者 | 
| 验证数据。 | 验证目标 Amazon Redshift 数据库中的数据。 | 数据库管理员 | 
| 启用外键与触发器。 | 在目标 Amazon Redshift 数据库中启用外键与触发器。 | 数据库管理员 | 
| 连接至该数据库。 | 将应用程序配置为连接新 Amazon Redshift 数据库。 | 应用程序所有者 | 
| 执行最终检查。 | 在上线前执行最终全面系统检查。 | 数据库管理员，应用程序所有者 | 
| 上线。 | 使用目标 Amazon Redshift 数据库上线。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 | 关闭临时的 AWS 资源，例如 AWS DMS 复制实例和用于 AWS SCT 的 EC2 实例。  | 数据库管理员、系统管理员 | 
| 查看文件。 | 查看和验证迁移项目文档。    | 数据库管理员、系统管理员 | 
| 收集指标。 | 收集有关迁移项目的信息，例如迁移时间、手动任务与工具任务百分比以及总节省成本。  | 数据库管理员、系统管理员 | 
| 关闭项目。 | 关闭项目并提供反馈。 | 数据库管理员、系统管理员 | 

## 相关资源
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-resources"></a>

**参考**
+ [AWS DMS 用户指南](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS SCT 用户指南](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 
+ [Amazon Redshift 入门指南](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)

**教程和视频**
+ [深入了解 AWS SCT 和 AWS DMS ](https://www.youtube.com/watch?v=kJs9U4ys5FE)（来自 AWS re:Invent 2019 的演讲）
+ [AWS Database Migration Service 入门](https://aws.amazon.com/dms/getting-started/)

# 使用 AWS DMS 和 AWS SCT 将 Oracle 数据库迁移至 Aurora PostgreSQL
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct"></a>

*Senthil Ramasamy，Amazon Web Services*

## Summary
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-summary"></a>

此模式描述了如何使用 AWS Data Migration Service (AWS DMS) 和 AWS Schema Conversion Tool (AWS SCT) 将 Oracle 数据库迁移至 Amazon Aurora PostgreSQL-Compatible Edition。 

该模式涵盖本地的 Oracle 源数据库、安装在亚马逊弹性计算云 (Amazon EC2) 实例上的 Oracle 数据库以及适用于 Oracle 数据库的亚马逊关系数据库服务 (Amazon RDS)。此模式将这些数据库转换为 Aurora PostgreSQL-Compatible。

## 先决条件和限制
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 在本地数据中心或 Amazon Web Services Cloud 中的 Oracle 数据库。
+ 安装在本地计算机或 EC2 实例上的 SQL 客户端。
+ AWS SCT 连接器的 Java 数据库连接 (JDBC) 驱动程序，安装在本地计算机或安装了 AWS SCT EC2 的实例上。

**限制**
+ 数据库大小限制：128 TB 
+ 如果源数据库支持商用 off-the-shelf (COTS) 应用程序或特定于供应商，则可能无法将其转换为其他数据库引擎。在使用此模式前，请确认该应用程序支持 Aurora PostgreSQL-Compatible。 

**产品版本**
+ 对于自管理 Oracle 数据库，AWS DMS 支持 10.2 及更高版本（版本 10.x）、11g 直至 12.2、18c 以及 19c 版本的所有 Oracle 数据库版本。有关支持的 Oracle 数据库版本（包括自行管理版本和 Amazon RDS for Oracle）的最新列表，请参阅[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)和[使用 PostgreSQL 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)。
+ 建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。关于 AWS SCT 支持的 Oracle 数据库版本的信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。 
+ Aurora 支持 [Amazon Aurora PostgreSQL 发行版本和引擎版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html) 中列出的 PostgreSQL 版本。

## 架构
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-architecture"></a>

**源技术堆栈**

下列情况之一：
+ 本地 Oracle 数据库
+  EC2 实例上的 Oracle 数据库  
+ Amazon RDS for Oracle 数据库实例

**目标技术堆栈**
+ Aurora PostgreSQL-Compatible 

**目标架构**

![\[将 Oracle 数据库迁移至 Aurora PostgreSQL-Compatible 的目标架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6de157c4-dcc9-4186-ae32-17efbbbee709/images/68beb634-926e-4908-97b1-edcd23e06a2b.png)


**数据迁移架构**
+ 从 Amazon Web Services Cloud 内运行的 Oracle 数据库   
![\[AWS 上 Oracle 数据库的数据迁移架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6de157c4-dcc9-4186-ae32-17efbbbee709/images/7fc32019-3db1-485b-93e5-6d5539be048c.png)

   
+ 从本地数据中心内运行的 Oracle 数据库  
![\[本地数据中心 上 Oracle 数据库的数据迁移架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6de157c4-dcc9-4186-ae32-17efbbbee709/images/c70d8774-aef7-4414-9766-ce8f25757c4b.png)

## 工具
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ [AWS Schema Conversion Tool（AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)通过以下方法来简化异构数据库的迁移工作：将源数据库架构和大部分的自定义代码自动转换成与目标数据库兼容的格式。

## 操作说明
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备源数据库。 | 若要准备源数据库，请参阅 AWS SCT 文档中的[使用 Oracle 数据库作为 AWS SCT 的源](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)。 | 数据库管理员 | 
| 为 AWS SCT 创建一个 EC2 实例。 | 如果需要，为 AWS SCT 创建和配置 EC2 实例。 | 数据库管理员 | 
| 下载 AWS SCT。 | 下载最新版本的 AWS SCT 和相关驱动程序。有关更多信息，请参阅 AWS SCT 文档中的[安装、验证和更新 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)。 | 数据库管理员 | 
| 添加用户和权限。 | 在源数据库中添加并验证必备用户和权限。 | 数据库管理员 | 
| 创建 AWS SCT 项目。 | 为工作负载创建 AWS SCT 项目，然后连接至源数据库。有关说明，请参阅 AWS SCT 文档中的[创建 AWS SCT 项目](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.Project)和[添加数据库服务器](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AddServers)。 | 数据库管理员 | 
| 评估可行性。 | 生成评测报告，其中汇总了无法自动转换架构的操作项目，并提供了手动转换的估算值。有关更多信息，请参阅 AWS SCT 文档中的[创建和查看数据库迁移评测报告](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AssessmentReport)。 | 数据库管理员 | 

### 准备目标数据库
<a name="prepare-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建目标 Amazon RDS 数据库实例。 | 使用 Amazon Aurora 作为数据库引擎创建目标 Amazon RDS 数据库实例。有关说明，请参阅 Amazon RDS 文档中的[创建 Amazon RDS 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)。 | 数据库管理员 | 
| 提取用户、角色与权限。 | 从源数据库中提取用户、角色和权限列表。 | 数据库管理员 | 
| 映射用户。 | 将现有数据库用户映射到新的数据库用户。 | 应用程序所有者 | 
| 创建用户。 | 在目标数据库中创建用户。 | 数据库管理员、应用程序所有者 | 
| 应用角色。 | 将上一步的角色应用至目标数据库。 | 数据库管理员 | 
| 检查选项、参数、网络文件和数据库链接。 | 查看源数据库选项、参数、网络文件和数据库链接，然后评估其对目标数据库的适用性。 | 数据库管理员 | 
| 应用设置。 | 将所有相关设置应用至目标数据库。 | 数据库管理员 | 

### 传输对象
<a name="transfer-objects"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 AWS SCT 连接。 | 为目标数据库配置 AWS SCT 连接。 | 数据库管理员 | 
| 使用 AWS SCT 转换架构。 | AWS SCT 会自动将源数据库架构和大多数自定义代码转换为与目标数据库兼容的格式。该工具无法自动转换的任意代码会被清楚地标记，以便您进行手动转换。 | 数据库管理员 | 
| 查看报告。 | 查看生成的 SQL 报告并保存所有错误和警告。 | 数据库管理员 | 
| 应用自动架构更改。 | 将自动架构更改应用至目标数据库或将其另存为 .sql 文件。 | 数据库管理员 | 
| 验证对象。 | 验证 AWS SCT 是否在目标创建了对象。 | 数据库管理员 | 
| 处理未转换的对象。 | 手动重写、拒绝或重新设计任何无法自动转换的项目。 | 数据库管理员、应用程序所有者 | 
| 应用角色与用户权限。 | 应用生成的角色和用户权限，并查看所有例外情况。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定方法。 | 确定数据迁移方法。 | 数据库管理员 | 
| 创建复制实例。 | 从 AWS DMS 控制台创建复制实例。有关更多信息，请参阅 AWS DMS 文档中的[使用 AWS DMS 复制实例](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html)。 | 数据库管理员 | 
| 创建源端点和目标端点。 | 若要创建端点，请按照[在 AWS DMS 中创建源端点和目标端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)中的说明操作。 | 数据库管理员 | 
| 创建复制任务。 | 若要创建任务，请参阅 AWS DMS 文档中的[处理 AWS DMS 任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)。 | 数据库管理员 | 
| 启动复制任务并监控日志。 | 有关此步骤的更多信息，请参阅 AWS DMS 文档中的[监控 AWS DMS 任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 分析并转换应用程序代码中的 SQL 项目。 | 使用 AWS SCT 分析和转换应用程序代码中的 SQL 项。当您将数据库架构从一个引擎转换到另一个引擎时，还需要更新应用程序中的 SQL 代码，以便与新数据库引擎 (而非旧引擎) 进行交互。您可以查看、分析、编辑和保存转换后的 SQL 代码。 | 应用程序所有者 | 
| 创建应用程序服务器。 | 在 AWS 上创建新应用程序服务器。 | 应用程序所有者 | 
| 迁移应用程序代码。 | 将应用程序代码迁移至新服务器。 | 应用程序所有者 | 
| 配置应用程序服务器。 | 为目标数据库和驱动程序配置应用程序服务器。 | 应用程序所有者 | 
| 修复代码。 | 修复应用程序中所有特定的源数据库引擎代码。 | 应用程序所有者 | 
| 优化代码。 | 针对目标数据库引擎优化应用程序代码。 | 应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 割接至目标数据库。 | 执行至新数据库的割接。 | 数据库管理员 | 
| 锁定应用程序。 | 锁定应用程序，避免任何进一步的更改。 | 应用程序所有者 | 
| 验证更改。 | 验证所有更改是否都已传播到目标数据库。 | 数据库管理员 | 
| 重定向至目标数据库。 | 将新的应用程序服务器指向目标数据库。 | 应用程序所有者 | 
| 检查所有内容。 | 执行最终全面系统检查。 | 应用程序所有者 | 
| 上线。 | 完成最终割接任务。 | 应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时资源。 | 关闭临时的 AWS 资源，例如 AWS DMS 复制实例和用于 AWS SCT 的 EC2 实例。 | 数据库管理员、应用程序所有者 | 
| 更新反馈。 | 更新内部团队对于 AWS DMS 流程的反馈。 | 数据库管理员、应用程序所有者 | 
| 修改过程与模板。 | 如有必要，请修改 AWS DMS 流程并改进模板。 | 数据库管理员、应用程序所有者 | 
| 验证文档。 | 查看和验证项目文档。 | 数据库管理员、应用程序所有者 | 
| 收集指标。 | 收集指标以评估迁移时间、手动与工具成本节约比等。 | 数据库管理员、应用程序所有者 | 
| 关闭项目。 | 关闭迁移项目并向利益相关者提供反馈。 | 数据库管理员、应用程序所有者 | 

## 相关资源
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-resources"></a>

**参考**
+ [将 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [将 PostgreSQL 数据库用作 AWS Database Migration Service 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [参照 PostgreSQL Compatibility (9.6.x) 迁移手册将 Oracle Database 11g/12c 迁移至 Amazon Aurora](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook.pdf) 
+ [参照 PostgreSQL Compatibility (12.4) 迁移手册将 Oracle Database 19c 迁移至 Amazon Aurora](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [将 Amazon RDS for Oracle 数据库迁移至 Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/dms/latest/sbs/chap-oracle-postgresql.html)
+ [AWS Data Migration Service](https://aws.amazon.com/dms/)
+ [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 
+ [从 Oracle 迁移到 Amazon Aurora](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)

**教程和视频**
+ [数据库迁移 Step-by-Step演练](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)
+ [AWS Data Migration Service](https://www.youtube.com/watch?v=zb4GcjEdl8U)（视频）
+ [将 Oracle 数据库迁移至 PostgreSQL](https://www.youtube.com/watch?v=ibtNkChGFkw)（视频）

## 附加信息
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-additional"></a>

.

# 将数据从本地 Oracle 数据库迁移到 Aurora PostgreSQL
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql"></a>

*Michelle Deng 和 Shunan Xiang，Amazon Web Services*

## Summary
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-summary"></a>

此模式为数据从本地 Oracle 数据库迁移到 Amazon Aurora PostgreSQL-Compatible Edition 提供了指导。它的目标是为包含具有大量数据操作语言 (DML) 活动的大型表的多 TB Oracle 数据库提供一种在线数据迁移策略，最大限度地减少停机时间。使用 Oracle Active Data Guard 备用数据库作为从主数据库分流数据迁移的来源。在满载期间可以暂停从 Oracle 主数据库到备用数据库的复制，以避免出现 ORA-01555 错误。 

在 Oracle 中，数据类型为 NUMBER 的主键 (PKsFKs) 或外键 () 中的表列通常用于存储整数。我们建议您在 PostgreSQL 中将它们转换为 INT 或 BIGINT，以获得更好的性能。您可使用 AWS Schema Conversion Tool (AWS SCT) 更改 PK 和 FK 列的默认数据类型映射。（有关更多信息，请参阅 AWS 博客文章 “将 N [UMBER 数据类型从 Oracle 转换为 PostgreSQL](https://aws.amazon.com/blogs/database/convert-the-number-data-type-from-oracle-to-postgresql-part-2/)”。） 这种示例中的数据迁移使用 AWS Database Migration Service (AWS DMS) 进行满载和更改数据捕获 (CDC)。

你也可以使用这种模式将本地 Oracle 数据库迁移到适用于 PostgreSQL 的亚马逊关系数据库服务 (Amazon RDS)，或者将托管在亚马逊弹性计算云 (亚马逊) 上的 Oracle 数据库迁移到适用于 PostgreSQL 的亚马逊 RDS 或 Aurora PostgreSQL 兼容 EC2 Aurora PostgreSQL。

## 先决条件和限制
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心中的 Oracle 源数据库，配置了 Active Data Guard 备用数据库 
+ AWS Direct Connect 配置至 本地数据中心和 Amazon Web Services Cloud 之间
+ 熟悉[使用 Oracle 数据库作为 AWS DMS 的源数据库](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ 熟悉[使用 PostgreSQL 数据库作为 AWS DMS 的目标数据库](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

**限制**
+ Amazon Aurora 数据库集群最多可创建 128 TiB 存储空间。Amazon RDS for PostgreSQL 数据库实例可使用高达 64 TiB 的存储空间创建。有关最新存储信息，请参阅 [AWS 文档中的 Amazon Aurora 存储和可靠性](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.StorageReliability.html)以及 [Amazon RDS 数据库实例存储](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)。

**产品版本**
+ AWS DMS 支持版本为 10.2 及更高版本（对于版本 10.x）、11g 直至 12.2、18c 以及 19c 的所有 Oracle 数据库版本。有关支持的版本的最新列表，请参阅 AWS 文档中的[使用 Oracle 数据库作为 AWS DMS 的源数据库](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。

## 架构
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-architecture"></a>

**源技术堆栈**
+ 配置了 Oracle Active Data Guard 备用数据库的本地 Oracle 数据库 

**目标技术堆栈**
+ Aurora PostgreSQL-Compatible 

**数据迁移架构**

![\[将 Oracle 数据库迁移至 Aurora PostgreSQL-Compatible\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/49f9b03e-6d33-4ac0-94ad-d3e6d02e6d63/images/0038a36b-fb7d-4f2d-8376-8d38290b0736.png)


## 工具
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-tools"></a>
+ **AWS DMS** - [AWS Database Migration Service](https://docs.aws.amazon.com/dms/index.html) (AWS DMS) 支持多种源数据库和目标数据库。有关支持的 Oracle 源数据库和目标数据库版本的列表，请参阅 AWS DMS 文档中的[使用 Oracle 数据库作为 AWS DMS 的源数据库](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。如果 AWS DMS 不支持源数据库，则必须选择另一种方法来迁移第 6 阶段的数据（在 *Epic* s 部分）。 **重要说明：**由于这是异构迁移，因此必须先检查数据库是否支持商用 off-the-shelf (COTS) 应用程序。如果应用程序是 COTS，请咨询供应商以确认支持 Aurora PostgreSQL-Compatible，然后再继续。有关更多信息，请参阅 [AWS 文档中的 AWS DMS Step-by-Step 迁移演练](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)。
+ **AWS SCT** - [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/Welcome.htm) (AWS SCT) 通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式，以促进异构数据库迁移。该工具转换的自定义代码包括视图、存储进程和函数。该工具无法自动转换的任意代码会被清楚地标记，以便您自己进行转换。 

## 操作说明
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库版本。 |  | 数据库管理员 | 
| 安装 AWS SCT 和驱动程序。 |  | 数据库管理员 | 
| 添加并验证 AWS SCT 必备用户和授权源数据库。 |  | 数据库管理员 | 
| 为工作负载创建 AWS SCT 项目，然后连接至源数据库。 |  | 数据库管理员 | 
| 生成评测报告并评测可行性。 |  | 数据库管理员、应用程序所有者 | 

### 准备目标数据库
<a name="prepare-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Aurora PostgreSQL-Compatible 目标数据库。 |  | 数据库管理员 | 
| 从源数据库中提取用户、角色和权限列表。 |  | 数据库管理员 | 
| 将现有数据库用户映射到新的数据库用户。 |  | 应用程序所有者 | 
| 在目标数据库中创建用户。 |  | 数据库管理员 | 
| 将上一步的角色应用至目标 Aurora PostgreSQL-Compatible 数据库。 |  | 数据库管理员 | 
| 查看源数据库中的数据库选项、参数、网络文件和数据库链接，然后评估其对目标数据库的适用性。 |  | 数据库管理员、应用程序所有者 | 
| 将所有相关设置应用至目标数据库。 |  | 数据库管理员 | 

### 准备数据库对象代码转换
<a name="prepare-for-database-object-code-conversion"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为目标数据库配置 AWS SCT 连接。 |  | 数据库管理员 | 
| 在 AWS SCT 中转换架构，并将转换后的代码保存为 .sql 文件。 |  | 数据库管理员、应用程序所有者 | 
| 手动转换无法自动转换的任何数据库对象。 |  | 数据库管理员、应用程序所有者 | 
| 优化数据库代码转换。 |  | 数据库管理员、应用程序所有者 | 
| 根据对象类型将该 .sql 文件分成多个 .sql 文件。 |  | 数据库管理员、应用程序所有者 | 
| 验证目标数据库中的 SQL 脚本。 |  | 数据库管理员、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS DMS 复制实例。 |  | 数据库管理员 | 
| 创建源端点和目标端点。 | 如果 PKs 和的数据类型从 Oracle 中的 NUMBER 转换 FKs 为 PostgreSQL 中的 BIGINT，请考虑在创建源端点时指定连接`numberDataTypeScale=-2`属性。 | 数据库管理员 | 

### 迁移数据 - 满载
<a name="migrate-data-ndash-full-load"></a>


| 任务 | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在目标数据库中创建架构与表。 |  | 数据库管理员 | 
|  通过对表进行分组或根据表大小拆分大表来创建 AWS DMS 满负荷任务。 |  | 数据库管理员 | 
| 在短时间内停止源 Oracle 数据库的应用程序。 |  | 应用程序所有者 | 
| 验证 Oracle 备库与主库是否同步，并停止从主库到备库的复制。 |  | 数据库管理员、应用程序所有者 | 
| 在源 Oracle 数据库上启动应用程序。 |  | 应用程序所有者 | 
| 从 Oracle 备用数据库到 Aurora PostgreSQL-Compatible 的数据库，并行启动 AWS DMS 满负荷任务。 |  | 数据库管理员 | 
| 在完全加载完成后创建 PKs 和二级索引。 |  | 数据库管理员 | 
| 验证数据。 |  | 数据库管理员 | 

### 迁移数据 – CDC
<a name="migrate-data-ndash-cdc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Oracle 备用数据库与主数据库同步时，以及在上一个作业中应用程序重新启动之前，通过指定自定义 CDC 开始时间或系统更改编号 (SCN) 来创建 AWS DMS 持续复制任务。 |  | 数据库管理员 | 
| 并行启动 AWS DMS 任务，将正在进行的更改从 Oracle 备用数据库复制到 Aurora PostgreSQL-Compatible 数据库。 |  | 数据库管理员 | 
| 重新建立从 Oracle 主数据库到备用数据库复制。 |  | 数据库管理员 | 
| 当 Aurora PostgreSQL-Compatible 目标数据库与源 Oracle 数据库几乎同步时，监控日志并停止 Oracle 数据库上的应用程序。 |  | 数据库管理员、应用程序所有者 | 
| 当目标与源 Oracle 数据库完全同步时，停止 AWS DMS 任务。 |  | 数据库管理员 | 
| 在目标数据库中创建 FKs 和校验数据。 |  | 数据库管理员 | 
| 在目标数据库中创建函数、视图、触发器、序列以及其他对象类型。 |  | 数据库管理员 | 
| 在目标数据库应用角色授权。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS SCT 分析并转换应用程序代码中的 SQL 语句。 |  | 应用程序所有者 | 
| 在 AWS 上创建新应用程序服务器。 |  | 应用程序所有者 | 
| 将应用程序代码迁移至新服务器。 |  | 应用程序所有者 | 
| 为目标数据库和驱动程序配置应用程序服务器。 |  | 应用程序所有者 | 
| 修复应用程序中特定于源数据库引擎的任何代码。 |  | 应用程序所有者 | 
| 针对目标数据库优化应用程序代码。 |  | 应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将新应用程序服务器指向目标数据库。 |  | 数据库管理员、应用程序所有者 | 
| 执行健全性检查。 |  | 数据库管理员、应用程序所有者 | 
| 上线。 |  | 数据库管理员、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | 数据库管理员、系统管理员 | 
| 查看和验证项目文档。 |  | 数据库管理员、应用程序所有者 | 
| 收集有关迁移时间、手动与工具使用的百分比、成本节约和类似数据的指标。 |  | 数据库管理员、应用程序所有者 | 
| 关闭项目并提供反馈。 |  | 数据库管理员、应用程序所有者 | 

## 相关资源
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-resources"></a>

**参考**
+ [Oracle 数据库至 Aurora PostgreSQL-Compatible：迁移行动手册](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook.pdf) 
+ [将 Amazon RDS for Oracle 数据库迁移到 Amazon Aurora MySQL](https://docs.aws.amazon.com/dms/latest/sbs/chap-rdsoracle2aurora.html)
+ [AWS DMS 网站](https://aws.amazon.com/dms/)
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS SCT 网站](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [从 Oracle 迁移到 Amazon Aurora](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

**教程**
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/) 
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)
+ [AWS Database Migration Service Step-by-Step 演练](https://docs.aws.amazon.com/dms/latest/sbs/dms-sbs-welcome.html)

# 使用 AWS DMS 从 SAP ASE 迁移至 Amazon RDS for SQL Server
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms"></a>

*Amit Kumar，Amazon Web Services*

## Summary
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-summary"></a>

此模式提供有关将 SAP Adaptive Server Enterprise (ASE) 数据库迁移到运行 Microsoft SQL Server 的 Amazon Relational Database Service (Amazon RDS) 数据库实例的指导。源数据库可以位于本地数据中心或亚马逊弹性计算云 (Amazon EC2) 实例上。该模式使用 AWS Database Migration Service (AWS DMS) 迁移数据，并使用（可选）计算机辅助软件工程 (CASE) 工具转换数据库架构。

## 先决条件和限制
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心或 EC2 实例上的 SAP ASE 数据库
+ 已启动和运行的目标 Amazon RDS for SQL Server 数据库

**限制**
+ 数据库大小限制：64 TB

**产品版本**
+ 仅限 SAP ASE 15.7 或 16.x 版。有关最新信息，请参阅[使用 SAP 数据库作为 AWS DMS 源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html)。
+ 对于Amazon RDS 目标数据库，AWS DMS 支持 [Amazon RDS 上的 Microsoft SQL Server 版本](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.VersionSupport)，适用于 Enterprise、Standard、Web 和 Express 版本。有关支持版本的最新列表，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.SQLServer.html)。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。 

## 架构
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-architecture"></a>

**源技术堆栈**
+ 本地或 Amazon EC2 实例上的 SAP ASE 数据库

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

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

*从亚马逊上的 SAP ASE 数据库 EC2 到 Amazon RDS for SQL Server 数据库实例：*

![\[从亚马逊上的 SAP ASE EC2 到适用于 SQL Server 的亚马逊 RDS 的目标架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5ca697a2-9ca3-4231-b457-c1dc59ada5f1/images/957bdcf0-ab58-4b6d-a71a-d0ecbc31822c.png)


*从本地 SAP ASE 数据库至 Amazon RDS for SQL Server 数据库实例：*

![\[本地 SAP ASE 到 Amazon RDS for SQL Server 的目标架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5ca697a2-9ca3-4231-b457-c1dc59ada5f1/images/65aab2f5-0e63-4c34-97e2-cd4ac23751a4.png)


## 工具
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-tools"></a>
+ [AWS Datab](https://docs.aws.amazon.com/dms/) ase Migration Service (AWS DMS) 是一项网络服务，可用于将数据从本地、Amazon RDS 数据库实例或实例上的数据库迁移到 AWS 服务上的数据库， EC2 例如 Amazon RDS for SQL Server 或 EC2 实例。您还可以将数据库从 Amazon Web Services 迁移到本地数据库。您可以在异构或同构数据库引擎间迁移数据。
+ [对于架构转换，你可以选择使用 [erwin Data Modeler](https://erwin.com/products/erwin-data-modeler/) 或 SAP。 PowerDesigner](https://www.sap.com/products/technology-platform/powerdesigner-data-modeling-tools.html)

## 操作说明
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库版本。 |  | 数据库管理员 | 
| 确定存储需求（存储类型和容量）。 |  | 数据库管理员， SysAdmin | 
| 根据容量、存储功能和网络功能选择正确的实例类型。 |  | 数据库管理员， SysAdmin | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员， SysAdmin | 
| 确定应用程序迁移策略。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）和子网。 |  | SysAdmin | 
| 创建安全组和网络访问控制列表 (ACLs)。 |  | SysAdmin | 
| 配置和启动运行 Amazon RDS 数据库实例。 |  | SysAdmin | 

### 迁移数据 - 选项 1
<a name="migrate-data---option-1"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 手动迁移数据库架构或使用 CASE 工具，例如 erwin Data Modeler 或 SAP。 PowerDesigner |  | 数据库管理员 | 

### 迁移数据 - 选项 2
<a name="migrate-data---option-2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS DMS 迁移数据。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序迁移策略。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | 数据库管理员， SysAdmin | 
| 查看和验证项目文档。 |  | DBA、 SysAdmin、应用程序所有者 | 
| 收集关于迁移时间、手动任务与自动任务的百分比以及成本节省等指标。 |  | DBA、 SysAdmin、应用程序所有者 | 
| 关闭项目并提供反馈。 |  | DBA、 SysAdmin、应用程序所有者 | 

## 相关资源
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-resources"></a>

**参考**
+ [AWS DMS 网站](https://aws.amazon.com/dms/)
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)
+ [使用 SAP ASE 数据库作为 AWS DMS 源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html)
+ [RDS Custom for SQL Server 的限制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-reqs-limits-MS.html)

**教程和视频**
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)
+ [AWS DMS（视频）](https://www.youtube.com/watch?v=zb4GcjEdl8U) 
+ [Amazon RDS（视频）](https://www.youtube.com/watch?v=igRfulrrYCo) 

# 使用 AWS DMS 将本地 Microsoft SQL Server 数据库迁移至 Amazon Redshift
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms"></a>

*Marcelo Fernandes，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-summary"></a>

此模式提供有关使用 AWS Data Migration Service (AWS DMS) 将本地 Microsoft SQL Server 数据库迁移到 Amazon Redshift 的指导。

## 先决条件和限制
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心的源 Microsoft SQL Server 数据库
+ 已完成使用 Amazon Redshift 数据库作为 AWS DMS 目标的先决条件，如 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html#CHAP_Target.Redshift.Prerequisites)中所述

**产品版本**
+ SQL Server 2005-2019、Enterprise、Standard、Workgroup、Developer 和 Web 版本。有关支持的版本的最新列表，请参阅 AWS 文档中的[使用 Microsoft SQL Server 数据库作为 AWS DMS 的源数据库](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)。

## 架构
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-architecture"></a>

**源技术堆栈**
+ 本地 Microsoft SQL Server 数据库 

**目标技术堆栈**
+ Amazon Redshift

**数据迁移架构**

 

![\[使用 AWS DMS 将本地 SQL Server 数据库迁移至 Amazon Redshift 的架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/65b2be1b-740e-4d4d-99a8-f77c4ea6553d/images/3a094bf2-be31-4d83-8dd2-9dc078321055.png)


## 工具
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-tools"></a>
+ [AWS DMS ](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)是数据迁移服务，支持多种不同的源数据库和目标数据库。有关支持与 AWS DMS 一起使用的 Microsoft SQL Server 数据库版本和版本的信息，请参阅 AWS DMS 文档中[使用 Microsoft SQL Server 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)。如果 AWS DMS 不支持源数据库，则必须选择另一种方法进行数据迁移。

## 操作说明
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库版本和引擎。 |  | 数据库管理员 | 
| 确定目标服务器实例的硬件要求。 |  | 数据库管理员、系统管理员 | 
| 确定存储需求（存储类型和容量）。 |  | 数据库管理员、系统管理员 | 
| 根据容量、存储功能和网络功能选择正确的实例类型。 |  | 数据库管理员、系统管理员 | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员、系统管理员 | 
| 确定应用程序迁移策略。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 | 有关更多信息，请参阅 AWS 文档中的[在 VPC 中使用数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html)。 | 系统管理员 | 
| 创建安全组。 |  | 系统管理员 | 
| 配置和启动 Amazon Redshift 集群。 | 有关更多信息，请参阅 Amazon Redshift 文档中的 [创建示例 Amazon Redshift 集群](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-launch-sample-cluster.html)。 | 数据库管理员、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS DMS 迁移来自 Microsoft SQL Server 数据库的数据。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序迁移策略。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时资源。 |  | 数据库管理员、系统管理员 | 
| 查看和验证项目文档。 |  | 数据库管理员、应用程序所有者、系统管理员 | 
| 收集关于迁移时间、手动任务与自动任务的百分比以及成本节省等指标。 |  | 数据库管理员、应用程序所有者、系统管理员 | 
| 关闭项目并提供反馈。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-resources"></a>

**参考**
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/index.html)
+ [Amazon Redshift 文档](https://docs.aws.amazon.com/redshift/)
+ [Amazon Redshift 定价](https://aws.amazon.com/redshift/pricing/)

**教程和视频**
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/)
+ [Amazon Redshift 入门](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)
+ [将 Amazon Redshift 数据库作为 AWS Database Migration Service 目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html)
+ [AWS DMS（视频）](https://www.youtube.com/watch?v=zb4GcjEdl8U) 

# 使用 AWS SCT 数据提取代理将本地 Microsoft SQL Server 数据库迁移至 Amazon Redshift
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents"></a>

*Neha Thakur，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-summary"></a>

此模式概述了使用 AWS Schema Conversion Tool (AWS SCT) 数据提取代理将本地 Microsoft SQL Server 源数据库迁移到 Amazon Redshift 目标数据库的步骤。代理是外部程序，它与 AWS SCT 集成，但在其他地方执行数据转换，并代表您与其他 Amazon Web Services 交互。  

## 先决条件和限制
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-prereqs"></a>

**先决条件**
+ 用于本地数据中心数据仓库工作负载的 Microsoft SQL Server 源数据库
+ 一个有效的 Amazon Web Services account

**产品版本**
+ Microsoft SQL Server 版本 2008 或更高版本。有关受支持版本的列表，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。 

## 架构
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-architecture"></a>

**技术堆栈****源**
+ 本地 Microsoft SQL Server 数据库

**技术堆栈****目标**
+ Amazon Redshift

**数据迁移架构**

![\[使用 AWS SCT 数据提取代理将 SQL Server 数据库迁移至 Amazon Redshift。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6975f67a-0705-47b4-a1b8-90aaa2597a04/images/dbff958b-7601-442e-9e23-4d07edd0ccfd.png)


## 工具
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-tools"></a>
+ [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) (AWS SCT) 通过以下方法来处理异构数据库的迁移工作：将源数据库架构和大部分的自定义代码自动转换成与目标数据库兼容的格式。当源数据库和目标数据库非常不同时，您可以使用 AWS SCT 代理执行其他数据转换。有关更多信息，请参阅 AWS 文档中的[将数据从本地数据仓库迁移至 Amazon Redshift](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/agents.dw.html)。

## 最佳实践
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-best-practices"></a>
+ [AWS SCT 最佳实践](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_BestPractices.html)
+ [Amazon Redshift 最佳实践](https://docs.aws.amazon.com/redshift/latest/dg/best-practices.html)

## 操作说明
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-epics"></a>

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


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

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）和子网。 |  | SysAdmin | 
| 创建安全组。 |  | SysAdmin | 
| 配置并启动 Amazon Redshift 集群。 |  | SysAdmin | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS SCT 数据提取代理迁移数据。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循选定的应用程序迁移策略。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | 数据库管理员， SysAdmin | 
| 查看和验证项目文档。 |  | DBA、 SysAdmin、应用程序所有者 | 
| 收集关于迁移时间、手动任务与自动任务的百分比以及成本节省等指标。 |  | DBA、 SysAdmin、应用程序所有者 | 
| 关闭项目并提供任何反馈。 |  | DBA、 SysAdmin、应用程序所有者 | 

## 相关资源
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-resources"></a>

**参考**
+ [AWS SCT 用户指南](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [使用数据提取代理](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/agents.html)
+ [Amazon Redshift 定价](https://aws.amazon.com/redshift/pricing/)

**教程和视频**
+ [AWS Schema Conversion Tool‭ 入门](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_GettingStarted.html)
+ [Amazon Redshift 入门](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)

# 将遗留应用程序从 Oracle Pro\$1C 迁移到 ECPG
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg"></a>

*Sai Parthasaradhi 和 Mahesh Balumuri，Amazon Web Services*

## Summary
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-summary"></a>

大多数具有嵌入式 SQL 代码的遗留应用程序使用 Oracle Pro\$1C 预编译器来访问数据库。当您将这些 Oracle 数据库迁移到 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 或 Amazon Aurora PostgreSQL-Compatible Edition 时，您必须将应用程序代码转换为与 PostgreSQL 中的预编译器兼容的格式（称为 ECPG）。此模式描述了如何将 Oracle Pro\$1C 代码转换至 PostgreSQL ECPG 中的等效代码。 

有关 Pro\$1C 的更多信息，请参阅 [Oracle 文档](https://docs.oracle.com/cd/E11882_01/appdev.112/e10825/pc_01int.htm#i2415)。有关 ECPG 的简要介绍，请参阅[其他信息](#migrate-legacy-applications-from-oracle-pro-c-to-ecpg-additional)部分。

## 先决条件和限制
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ Amazon RDS for PostgreSQL 或 Aurora PostgreSQL-Compatible 数据库
+ 本地运行的 Oracle 数据库

## 工具
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-tools"></a>
+ 下一部分中列出的 PostgreSQL 程序包。
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) – AWS 命令行界面（AWS CLI）是一种开源工具，用于通过命令行 Shell 中的命令与 Amazon Web Services 交互。仅需最少的配置，即可使用 AWS CLI 开始运行命令，以便从终端程序中的命令提示符实现与基于浏览器的 AWS 管理控制台所提供的功能等同的功能。

## 操作说明
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-epics"></a>

### 在 CentOS 或 RHEL 设置构建环境
<a name="set-the-build-environment-on-centos-or-rhel"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 PostgreSQL 程序包。 | 通过使用以下命令安装所需 PostgreSQL 程序包。<pre>yum update -y<br />yum install -y yum-utils<br />rpm -ivh https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm<br />dnf -qy module disable postgresql</pre> | 应用程序开发者、 DevOps 工程师 | 
| 安装标头文件和库。 | 使用以下命令安装包含头文件和库的 `postgresql12-devel` 程序包。在开发环境和运行时系统环境中都安装该包，以避免运行时系统环境中出现错误。<pre>dnf -y install postgresql12-devel<br />yum install ncompress zip ghostscript jq unzip wget git -y</pre>仅对于开发环境，还运行以下命令。<pre>yum install zlib-devel make -y<br />ln -s /usr/pgsql-12/bin/ecpg /usr/bin/</pre> | 应用程序开发者、 DevOps 工程师 | 
| 配置环境路径变量。 | 为 PostgreSQL 客户端库设置环境路径。<pre>export PATH=$PATH:/usr/pgsql-12/bin</pre> | 应用程序开发者、 DevOps 工程师 | 
| 必要时安装其他软件。 | 如果需要，可以在 Oracle 中安装 **pgLoader** 以替换 **SQL\$1Loader**。<pre>wget -O /etc/yum.repos.d/pgloader-ccl.repo https://dl.packager.io/srv/opf/pgloader-ccl/master/installer/el/7.repo<br />yum install pgloader-ccl -y<br />ln -s /opt/pgloader-ccl/bin/pgloader /usr/bin/</pre>如果您要从 Pro\$1C 模块调用任何 Java 应用程序，请安装 Java。<pre>yum install java -y</pre>安装 **ant** 以编译 Java 代码。<pre>yum install ant -y</pre> | 应用程序开发者、 DevOps 工程师 | 
| 安装 Amazon CLI。 | 安装 AWS CLI 以运行命令，从您的应用程序与 Amazon Web Services （例如 AWS Secrets Manager 和 Amazon Simple Storage Service (Amazon S3)）交互。<pre>cd /tmp/<br />curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />unzip awscliv2.zip<br />./aws/install -i /usr/local/aws-cli -b /usr/local/bin --update</pre> | 应用程序开发者、 DevOps 工程师 | 
| 确定要转换的程序。 | 确定要从 Pro\$1C 转换为 ECPG 的应用程序。 | 应用程序开发人员、应用程序所有者 | 

### 将 Pro\$1C 代码转换为 ECPG
<a name="convert-pro-c-code-to-ecpg"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 删除不需要的标头。 | 删除 PostgreSQL 中不需要的 `include ` 标头，例如 `oci.h`、`oratypes` 和 `sqlda`。 | 应用程序所有者、应用程序开发人员 | 
| 更新变量声明。 | 为用作主机变量的所有变量声明添加 `EXEC SQL` 语句。从您的应用程序中删除如下 `EXEC SQL VAR` 声明。<pre>EXEC SQL VAR query IS STRING(2048);</pre> | 应用程序开发人员、应用程序所有者 | 
| 更新 ROWNUM 功能。 | 该 `ROWNUM` 函数在 PostgreSQL 中不可用。将其替换为 SQL 查询中的 `ROW_NUMBER` 窗口函数。Pro\$1C 代码：<pre>SELECT SUBSTR(RTRIM(FILE_NAME,'.txt'),12) INTO :gcpclFileseq  <br />FROM   (SELECT FILE_NAME <br />FROM  DEMO_FILES_TABLE <br />WHERE FILE_NAME    LIKE '%POC%' <br />ORDER BY FILE_NAME DESC) FL2 <br />WHERE ROWNUM <=1 ORDER BY ROWNUM;</pre>ECPG 代码：<pre>SELECT SUBSTR(RTRIM(FILE_NAME,'.txt'),12) INTO :gcpclFileseq  <br />FROM   (SELECT FILE_NAME , ROW_NUMBER() OVER (ORDER BY FILE_NAME DESC) AS ROWNUM<br />FROM  demo_schema.DEMO_FILES_TABLE <br />WHERE FILE_NAME    LIKE '%POC%'<br />ORDER BY FILE_NAME DESC) FL2 <br />WHERE ROWNUM <=1 ORDER BY ROWNUM; </pre> | 应用程序开发人员、应用程序所有者 | 
| 更新函数参数，以使用别名变量。 | 在 PostgreSQL 中，函数参数不能用作主机变量。使用别名变量覆盖它们。Pro\$1C 代码：<pre>int processData(int referenceId){<br />  EXEC SQL char col_val[100];<br />  EXEC SQL select column_name INTO :col_val from table_name where col=:referenceId;<br />}</pre>ECPG 代码：<pre>int processData(int referenceIdParam){<br />  EXEC SQL int referenceId = referenceIdParam;<br />  EXEC SQL char col_val[100];<br />  EXEC SQL select column_name INTO :col_val from table_name where col=:referenceId;<br />}</pre> | 应用程序开发人员、应用程序所有者 | 
| 更新结构类型。 | 如果将 `struct` 类型变量用作主机变量，则通过 `typedef` 在 `EXEC SQL BEGIN` 和 `END` 块中定义 `struct` 类型。如果 `struct` 类型是在标头 (`.h`) 文件中定义的，则使用 `EXEC SQL` 包含语句纳入这些文件。Pro\$1C 代码：标头文件 (`demo.h`)<pre>struct s_partition_ranges<br />{<br /> char   sc_table_group[31];<br /> char   sc_table_name[31];<br /> char   sc_range_value[10];<br />}; <br />struct s_partition_ranges_ind<br />{<br />  short    ss_table_group;<br />  short    ss_table_name;<br />  short    ss_range_value;<br />}; </pre>ECPG 代码：标头文件 (`demo.h`)<pre>EXEC SQL BEGIN DECLARE SECTION;<br />typedef struct <br />{<br />  char   sc_table_group[31];<br />  char   sc_table_name[31];<br />  char   sc_range_value[10];<br />} s_partition_ranges; <br />typedef struct <br />{<br />  short    ss_table_group;<br />  short    ss_table_name;<br />  short    ss_range_value;<br />} s_partition_ranges_ind; <br />EXEC SQL END DECLARE SECTION;</pre>Pro\$1C 文件 (`demo.pc`)<pre>#include "demo.h"<br />struct s_partition_ranges gc_partition_data[MAX_PART_TABLE] ;<br />struct s_partition_ranges_ind gc_partition_data_ind[MAX_PART_TABLE] ;</pre>ECPG 文件 (`demo.pc`)<pre>exec sql include "demo.h"<br />EXEC SQL BEGIN DECLARE SECTION;<br />s_partition_ranges gc_partition_data[MAX_PART_TABLE] ;<br />s_partition_ranges_ind gc_partition_data_ind[MAX_PART_TABLE] ;<br />EXEC SQL END DECLARE SECTION;</pre> | 应用程序开发人员、应用程序所有者 | 
| 修改逻辑以从游标中获取。 | 要使用数组变量从游标中提取多行，请更改代码以使用 `FETCH FORWARD`。Pro\$1C 代码：<pre>EXEC SQL char  aPoeFiles[MAX_FILES][FILENAME_LENGTH];<br />EXEC SQL FETCH filename_cursor into :aPoeFiles;</pre>ECPG 代码：<pre>EXEC SQL char  aPoeFiles[MAX_FILES][FILENAME_LENGTH];<br />EXEC SQL int fetchSize = MAX_FILES;<br />EXEC SQL FETCH FORWARD :fetchSize filename_cursor into :aPoeFiles;</pre> | 应用程序开发人员、应用程序所有者 | 
| 修改没有返回值的数据包调用。 | 没有返回值的 Oracle 包函数应该使用指示变量来调用。如果您的应用程序包含多个具有相同名称的函数，或者未知类型的函数生成运行时系统错误，请将值强制转换为数据类型。Pro\$1C 代码：<pre>void ProcessData (char *data , int id)<br />{        <br />        EXEC SQL EXECUTE<br />               BEGIN<br />                  pkg_demo.process_data (:data, :id);                                                                                    <br />               END;<br />       END-EXEC;<br />}</pre>ECPG 代码：<pre>void ProcessData (char *dataParam, int idParam )<br />{<br />        EXEC SQL char *data = dataParam;<br />        EXEC SQL int id = idParam;<br />        EXEC SQL short rowInd;<br />        EXEC SQL short rowInd = 0;<br />        EXEC SQL SELECT pkg_demo.process_data (<br />                       inp_data => :data::text,<br />                       inp_id => :id<br />               ) INTO :rowInd;<br />}</pre> | 应用程序开发人员、应用程序所有者 | 
| 重写 SQL\$1CURSOR 变量。 | 重写 `SQL_CURSOR` 变量及其实现。Pro\$1C 代码：<pre>/* SQL Cursor */<br />SQL_CURSOR      demo_cursor;<br />EXEC SQL ALLOCATE :demo_cursor;<br />EXEC SQL EXECUTE<br />  BEGIN<br />      pkg_demo.get_cursor(     <br />        demo_cur=>:demo_cursor<br />      );<br />  END;<br />END-EXEC;</pre>ECPG 代码：<pre>EXEC SQL DECLARE demo_cursor CURSOR FOR SELECT<br />         * from<br />    pkg_demo.open_filename_rc(<br />            demo_cur=>refcursor<br />          ) ;<br />EXEC SQL char open_filename_rcInd[100]; <br /># As the below function returns cursor_name as <br /># return we need to use char[] type as indicator. <br />EXEC SQL SELECT pkg_demo.get_cursor (<br />        demo_cur=>'demo_cursor'<br />    ) INTO :open_filename_rcInd;</pre> | 应用程序开发人员、应用程序所有者 | 
| 应用常见迁移模式。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-legacy-applications-from-oracle-pro-c-to-ecpg.html) | 应用程序开发人员、应用程序所有者 | 
| 如果需要，启用调试。 | 要在调试模式下运行 ECPG 程序，请在主函数块中添加以下命令。<pre>ECPGdebug(1, stderr); </pre> | 应用程序开发人员、应用程序所有者 | 

### 编译 ECPG 程序
<a name="compile-ecpg-programs"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 ECPG 创建可执行文件。 | 如果您有一个名为 `prog1.pgc` 的嵌入式 SQL C 源文件，则可以使用以下命令序列创建可执行程序。<pre>ecpg prog1.pgc<br />cc -I/usr/local/pgsql/include -c prog1.c<br />cc -o prog1 prog1.o -L/usr/local/pgsql/lib -lecpg</pre> | 应用程序开发人员、应用程序所有者 | 
| 创建一个 make 文件用于编译。 | 创建一个 make 文件以编译 ECPG 程序，如以下示例文件中所示。<pre>CFLAGS ::= $(CFLAGS) -I/usr/pgsql-12/include -g -Wall<br />LDFLAGS ::= $(LDFLAGS) -L/usr/pgsql-12/lib -Wl,-rpath,/usr/pgsql-12/lib<br />LDLIBS ::= $(LDLIBS) -lecpg<br />PROGRAMS = test <br />.PHONY: all clean<br />%.c: %.pgc<br />      ecpg $<<br />all: $(PROGRAMS)<br />clean:<br />    rm -f $(PROGRAMS) $(PROGRAMS:%=%.c) $(PROGRAMS:%=%.o)</pre> | 应用程序开发人员、应用程序所有者 | 

### 测试应用程序
<a name="test-the-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试代码。 | 测试转换后的应用程序代码，以确保其正常运行。 | 应用程序开发人员、应用程序所有者、测试工程师 | 

## 相关资源
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-resources"></a>
+ [ECPG-C 语言中的嵌入式 SQL](https://www.postgresql.org/docs/current/static/ecpg.html)（PostgreSQL 文档）
+ [错误处理](https://www.postgresql.org/docs/12/ecpg-errors.html)（PostgreSQL 文档）
+ [为什么要使用 Oracle Pro\$1C/C\$1\$1 预编译器](https://docs.oracle.com/cd/E11882_01/appdev.112/e10825/pc_01int.htm#i2415)（Oracle 文档）

## 附加信息
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-additional"></a>

PostgreSQL 有一个嵌入式 SQL 预编译器 ECPG，相当于 Oracle Pro\$1C 预编译器。ECPG 通过用特殊函数调用替换 SQL 调用，将嵌入 SQL 语句的 C 程序转换为标准 C 代码。然后可以使用任何 C 编译器工具链处理输出文件。

**输入和输出文件**

ECPG 将您在命令行上指定的每个输入文件转换为相应的 C 输出文件。如果输入文件名没有文件扩展名，则假定为 .pgc。将文件扩展名替换为 `.c`，以构造输出文件名。但是，可以使用 `-o` 选项覆盖默认输出文件名。

如果您使用破折号 (`-`) 作为输入文件名，ECPG 会从标准输入中读取程序并写入标准输出，除非您使用该 `-o` 选项将其覆盖。

**标头文件**

当 PostgreSQL 编译器编译预处理的 C 代码文件时，它会在 PostgreSQL `include` 目录中查找 ECPG 标头文件。因此，您可能必须使用 `-I` 选项将编译器指向正确的目录（例如 `-I/usr/local/pgsql/include`）。

**库**

使用 C 代码和嵌入式 SQL 的程序必须链接到 `libecpg` 库。例如，您可使用链接器选项 ` -L/usr/local/pgsql/lib -lecpg`。

转换后的 ECPG 应用程序通过嵌入式 SQL `libpq` 库 (`ecpglib`) 调用库中的函数，并使用标准协议与 PostgreSQL 服务器通信。 frontend/backend 

# 将虚拟生成的列从 Oracle 迁移至 PostgreSQL
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql"></a>

*Veeranjaneyulu Grandhi、Rajesh Madiwale 和 Ramesh Pathuri，Amazon Web Services*

## Summary
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-summary"></a>

在版本 11 及以前版本中，PostgreSQL 不提供直接等同于 Oracle 虚拟列的功能。从 Oracle 数据库迁移到 PostgreSQL 版本 11 或以前版本时，处理虚拟生成的列很困难，原因有两个： 
+ 迁移时虚拟列不可见。
+ PostgreSQL 不支持版本 12 之前的 `generate` 表达式。

但是，也有一些变通方法可模拟类似的功能。当您使用 AWS Database Migration Service (AWS DMS) 将数据从 Oracle 数据库迁移至 PostgreSQL 版本 11 及以前版本时，您可以使用触发函数在虚拟生成的列中填充值。此模式提供了可用于此目的 Oracle 数据库和 PostgreSQL 代码的示例。在 AWS 上，对于您的 PostgreSQL 数据库，您可以使用 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 或 Amazon Aurora PostgreSQL-Compatible Edition。

从 PostgreSQL 版本 12 开始支持生成的列。生成的列可以按其他列值即时计算，也可以计算和存储。[PostgreSQL 生成列](https://www.postgresql.org/docs/12/ddl-generated-columns.html)与 Oracle 虚拟列类似。

## 先决条件和限制
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 源 Oracle 数据库 
+ 目标 PostgreSQL 数据库（在 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL-Compatible 上）
+ [PL/pgSQL](https://www.postgresql.org/docs/current/plpgsql.html) 编码专业知识

**限制**
+ 仅适用于 12 之前的 PostgreSQL 版本。 
+ 适用于 Oracle 数据库版本 11g 或更高版本。
+ 数据迁移工具不支持虚拟列。
+ 仅适用于同一表中定义的列。
+ 如果虚拟生成的列引用确定性的用户定义函数，则其不能将其用作分区键列。
+ 表达式输出必须是标量值。它无法返回 Oracle 提供的数据类型、用户定义的类型 `LOB` 或 `LONG RAW`。
+ 针对虚拟列定义的索引，等同于 PostgreSQL 中基于函数的索引。
+ 必须收集表格的统计信息。

## 工具
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-tools"></a>
+ [pgAdmin 4](https://www.pgadmin.org/) 是一种适用于 PostgreSQL 的开源管理工具。该工具提供了图形界面，可简化数据库对象的创建、维护和使用。
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/) 是免费的集成开发环境，用于在传统部署和云部署中在 Oracle 数据库中使用 SQL。 

## 操作说明
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-epics"></a>

### 创建源数据库和目标数据库表
<a name="create-source-and-target-database-tables"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建源 Oracle 数据库表。 | 在 Oracle 数据库，使用以下语句创建包含虚拟生成的列的表。<pre>CREATE TABLE test.generated_column<br />( CODE NUMBER,<br />STATUS VARCHAR2(12) DEFAULT 'PreOpen',<br />FLAG CHAR(1) GENERATED ALWAYS AS (CASE UPPER(STATUS) WHEN 'OPEN' THEN 'N' ELSE 'Y' END) VIRTUAL VISIBLE<br />);</pre>在此源表，`STATUS` 列中的数据通过 AWS DMS 迁移到目标数据库。但是，`FLAG` 列是使用 `generate by` 功能填充的，因此 AWS DMS 在迁移期间看不到此列。要实现 `generated by` 功能，您必须使用目标数据库中的触发器和函数填充 `FLAG` 列中的值，如下一个操作说明所示。 | 数据库管理员，应用程序开发人员 | 
| 在 AWS 创建目标 PostgreSQL 表。 | 使用以下语句在 AWS 上创建一个 PostgreSQL 表。<pre>CREATE TABLE test.generated_column<br />(<br />    code integer not null,<br />    status character varying(12) not null ,<br />    flag character(1)<br />);</pre>在此表中，`status` 列是标准列。`flag` 列将是根据该列中的数据生成的 `status` 列。 | 数据库管理员，应用程序开发人员 | 

### 创建触发函数来处理 PostgreSQL 中的虚拟列
<a name="create-a-trigger-function-to-handle-the-virtual-column-in-postgresql"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 PostgreSQL 触发器。 | 在 PostgreSQL 中创建触发器。<pre>CREATE TRIGGER tgr_gen_column<br />AFTER INSERT OR UPDATE OF status ON test.generated_column<br />FOR EACH ROW <br />EXECUTE FUNCTION test.tgf_gen_column();</pre> | 数据库管理员，应用程序开发人员 | 
| 创建 PostgreSQL 触发器函数。 | 在 PostgreSQL 中，为触发器创建函数。此函数填充由应用程序或 AWS DMS 插入或更新虚拟列，并验证数据。<pre>CREATE OR REPLACE FUNCTION test.tgf_gen_column() RETURNS trigger AS $VIRTUAL_COL$<br />BEGIN<br />IF (TG_OP = 'INSERT') THEN<br />IF (NEW.flag IS NOT NULL) THEN<br />RAISE EXCEPTION 'ERROR: cannot insert into column "flag"' USING DETAIL = 'Column "flag" is a generated column.';<br />END IF;<br />END IF;<br />IF (TG_OP = 'UPDATE') THEN<br />IF (NEW.flag::VARCHAR != OLD.flag::varchar) THEN<br />RAISE EXCEPTION 'ERROR: cannot update column "flag"' USING DETAIL = 'Column "flag" is a generated column.';<br />END IF;<br />END IF;<br />IF TG_OP IN ('INSERT','UPDATE') THEN<br />IF (old.flag is NULL) OR (coalesce(old.status,'') != coalesce(new.status,'')) THEN<br />UPDATE test.generated_column<br />SET flag = (CASE UPPER(status) WHEN 'OPEN' THEN 'N' ELSE 'Y' END)<br />WHERE code = new.code;<br />END IF;<br />END IF;<br />RETURN NEW;<br />END<br />$VIRTUAL_COL$ LANGUAGE plpgsql;</pre> | 数据库管理员，应用程序开发人员 | 

### 使用 AWS DMS 测试数据迁移
<a name="test-data-migration-by-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建复制实例。 | 要创建复制实例，请按照 AWS DMS 文档中的[说明](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Creating.html)进行操作。复制实例应与源数据库和目标数据库位于同一虚拟私有云（VPC）中。 | 数据库管理员，应用程序开发人员 | 
| 创建源和目标端点。 | 要创建端点，请按照 AWS DMS 文档中的[说明](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)进行操作。 | 数据库管理员，应用程序开发人员 | 
| 测试端点连接。 | 您可以通过指定 VPC 和复制实例并选择**运行测试**来测试端点连接。 | 数据库管理员，应用程序开发人员 | 
| 创建和启动满载任务。 | 有关说明，请参阅 AWS DMS 文档中的[创建任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)和[满载任务设置](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.html)。 | 数据库管理员，应用程序开发人员 | 
| 验证虚拟列数据。 | 比较源数据库和目标数据库中虚拟列数据。您可手动验证数据，也可以为此步骤编写脚本。 | 数据库管理员，应用程序开发人员 | 

## 相关资源
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-resources"></a>
+ [AWS Database Migration Service 入门](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)（AWS DMS 文档）
+ [使用 Oracle 数据库作为 AWS DMS 的来源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)（AWS DMS 文档）
+ [使用 PostgreSQL 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)（AWS DMS 文档）
+ [在 PostgreSQL 中生成列](https://www.postgresql.org/docs/12/ddl-generated-columns.html)（PostgreSQL 文档）
+ [触发器函数](https://www.postgresql.org/docs/12/plpgsql-trigger.html)（PostgreSQL 文档）
+ Oracle 数据库中的[虚拟列](https://docs.oracle.com/database/121/SQLRF/statements_7002.htm#SQLRF01402)（Oracle 文档）

# 在 Aurora PostgreSQL-Compatible 上设置 Oracle UTL\$1FILE 功能
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible"></a>

*Rakesh Raghav 和 anuradha chintha，Amazon Web Services*

## Summary
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-summary"></a>

在从 Oracle 迁移到 Amazon Web Services (AWS) 云上的 Amazon Aurora PostgreSQL 兼容版的过程中，您可能会遇到多种挑战。例如，迁移依赖于 Oracle `UTL_FILE` 实用程序的代码始终是一项挑战。在 Oracle PL/SQL 中，`UTL_FILE` 软件包与底层操作系统一起用于文件操作，例如读取和写入。该 `UTL_FILE` 实用程序适用于服务器和客户机系统。 

Amazon Aurora PostgreSQL-Compatible 的是一款托管式数据库产品。因此，无法访问 Database Server 上的文件。此模式将引导您完成整合 Amazon Simple Storage Service (Amazon S3) 和 Amazon Aurora PostgreSQL 兼容版，以实现 `UTL_FILE` 功能子网。使用此集成，我们可以创建和使用文件，而无需使用第三方提取、转换、加载（ETL）工具或服务。

或者，您可以设置亚马逊 CloudWatch 监控和亚马逊 SNS 通知。

建议在生产环境中实施该解决方案之前，对方案进行全面测试。

## 先决条件和限制
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ AWS Database Migration Service (AWS DMS) 专业知识
+  PL/pgSQL 编码方面的专业知识
+ Amazon Aurora PostgreSQL-Compatible 集群
+ 一个 S3 存储桶

**限制**

此模式不提供替代 Oracle `UTL_FILE` 实用程序的功能。但是，可以进一步增强步骤和示例代码，以实现数据库现代化目标。

**产品版本**
+ Amazon Aurora PostgreSQL-Compatible 版本 11.9。

## 架构
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-architecture"></a>

**目标技术堆栈**
+ Amazon Aurora（兼容 PostgreSQL）
+ Amazon CloudWatch
+ Amazon Simple Notification Service（Amazon SNS）
+ Amazon S3

**目标架构**

下图高度概括此解决方案。

![\[数据文件上传至 S3 存储桶，使用 aws_s3 扩展进行处理，然后发送到 Aurora 实例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/3aeecd46-1f87-41f9-a9cd-f8181f92e83f/images/4a6c5f5c-58fb-4355-b243-d09a15c1cec6.png)


1. 文件将从应用程序上传至 S3 存储桶。

1. 该 `aws_s3` 扩展使用 PL/pgSQL 访问数据，并将数据上传到兼容 Aurora PostgreSQL 的版本。

## 工具
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-tools"></a>
+ [Amazon Aurora PostgreSQL-Compatible](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) – Amazon Aurora PostgreSQL-Compatible Edition 是一个完全托管式、兼容 PostgreSQL 和 ACID 的关系数据库引擎。您已了解了 MySQL 和 PostgreSQL 不仅具有高端商用数据库的速度和可靠性，同时还具有开源数据库的简单性和成本效益。
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) - AWS 命令行界面（AWS CLI）是用于管理 Amazon Web Services 的统一工具。只通过一个工具进行下载和配置，您就可以使用命令行控制多个 Amazon Web Services 并利用脚本来自动执行这些服务。
+ [亚马逊 CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) — 亚马逊 CloudWatch 监控亚马逊 S3 的资源和使用情况。
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) – Amazon Simple Storage Service (Amazon S3) 是一项面向互联网的存储服务。Amazon S3 提供了一个存储层，用于接收和存储文件，以便在兼容 Aurora PostgreSQL 的集群之间使用和传输这些文件。
+ [aws\$1s3](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#aws_s3.table_import_from_s3) – 该 `aws_s3` 扩展程序集成了 Amazon S3 和 Aurora PostgreSQL-Compatible。
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) – Amazon Simple Notification Service（Amazon SNS）可协调和管理发布者和客户端之间消息的传送或发送。在这种模式中，Amazon SNS 用于发送通知。
+ [pgAdmin](https://www.pgadmin.org/docs/) – pgAdmin 是 Postgres 的开源管理工具。pgadmin 4 提供了一个用于创建、维护和使用数据库对象的图形界面。

**代码**

为了实现所需功能，该模式创建了多个与 `UTL_FILE` 命名类似的函数。*其他信息* 部分包含这些函数的代码库。

在代码中，将 `testaurorabucket` 替换为您的 S3 存储桶名称。将 `us-east-1` 替换为您测试 S3 存储桶所在的 AWS 区域。

## 操作说明
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-epics"></a>

### 集成 Amazon S3 和 Aurora PostgreSQL-Compatible
<a name="integrate-amazon-s3-and-aurora-postgresql-compatible"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 IAM policy。 | 用于访问 S3 存储桶的 AWS Identity and Access Management (IAM) 角色。关于此代码，请参阅*更多信息*章节。 | AWS 管理员，数据库管理员 | 
| 将 Amazon S3 访问角色添加至 Aurora PostgreSQL。 | 创建两个 IAM 角色：一个角色用于对 Amazon S3 进行读取访问，一个角色用于对 Amazon S3 进行写入访问。将角色附加到兼容 Aurora PostgreSQL 的集群。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.html)有关更多信息，请参阅 Aurora PostgreSQL-Compatible 文档，介绍如何将数据[导入](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PostgreSQL.S3Import.html)和[导出](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-s3-export.html)到 Amazon S3。 | AWS 管理员，数据库管理员 | 

### 在 Aurora PostgreSQL-Compatible 中设置扩展
<a name="set-up-the-extensions-in-aurora-postgresql-compatible"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 aws\$1commons 扩展。 | `aws_commons` 扩展是 `aws_s3` 扩展的依赖项。 | 数据库管理员、开发人员 | 
| 创建 aws\$1s3 扩展。 | `aws_s3` 扩展程序与 Amazon S3 交互。 | 数据库管理员、开发人员 | 

### 验证 Amazon S3 和 Aurora PostgreSQL-Compatible 的集成
<a name="validate-amazon-s3-and-aurora-postgresql-compatible-integration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 Amazon S3 中的数据导入到 Aurora PostgreSQL | 要测试将文件导入到 Aurora PostgreSQL 兼容版中，请创建一个示例 CSV 文件并将其上传到 S3 存储桶中。基于 CSV 文件创建表定义，然后使用 `aws_s3.table_import_from_s3` 函数将文件加载到表中。 | 数据库管理员、开发人员 | 
| 测试将文件从 Aurora PostgreSQL 导出至 Amazon S3。 | 要测试从兼容 Aurora PostgreSQL 的导出文件，请创建一个测试表，在其中填充数据，然后使用 `aws_s3.query_export_to_s3` 函数导出数据。 | 数据库管理员、开发人员 | 

### 若要模拟 UTL\$1FILE 实用程序，请创建包装函数
<a name="to-mimic-the-utl_file-utility-create-wrapper-functions"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 utl\$1file\$1utility 架构。 | 该架构将包装器函数汇聚在一起。运行以下命令以创建 EIP。<pre>CREATE SCHEMA utl_file_utility;</pre> | 数据库管理员、开发人员 | 
| 创建 file\$1type 类型。 | 使用以下代码创建 `file_type` 类型。<pre>CREATE TYPE utl_file_utility.file_type AS (<br />    p_path character varying(30),<br />    p_file_name character varying<br />);<br /><br /><br /></pre> | 数据库管理员/开发人员 | 
| 创建 init 函数 | `init` 函数初始化公共变量，例如 `bucket` 或 `region`。关于此代码，请参阅*更多信息*章节。 | 数据库管理员/开发人员 | 
| 创建包装器函数。 | 创建包装函数 `fopen`、`put_line` 和 `fclose`。关于代码，请参阅*更多信息*章节。 | 数据库管理员、开发人员 | 

### 测试包装器函数
<a name="test-the-wrapper-functions"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在写入模式测试包装器函数。 | 要在写入模式下测试包装器函数，请使用*其他信息*部分中提供的代码。 | 数据库管理员、开发人员 | 
| 在追加模式下测试包装器函数。 | 要在追加模式下测试包装器函数，请使用*其他信息*部分中提供的代码。 | 数据库管理员、开发人员 | 

## 相关资源
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-resources"></a>
+ [Amazon S3 集成](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PostgreSQL.S3Import.html)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [Aurora](https://aws.amazon.com/rds/aurora/?nc2=h_ql_prod_db_aa&aurora-whats-new.sort-by=item.additionalFields.postDateTime&aurora-whats-new.sort-order=desc)
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/)
+ [Amazon SNS](https://aws.amazon.com/sns/?nc2=h_ql_prod_ap_sns&whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc)

## 附加信息
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-additional"></a>

**设置 IAM policy**

创建以下策略。


| 
| 
| 策略名称 | JSON | 
| --- |--- |
| S3 IntRead | <pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "S3integrationtest",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:GetObject",<br />                "s3:ListBucket"<br />            ],<br />            "Resource": [<br />         "arn:aws:s3:::testaurorabucket/*",<br />         "arn:aws:s3:::testaurorabucket"<br />            ]<br />        }<br />    ]<br />}</pre> | 
| S3 IntWrite | <pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "S3integrationtest",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:PutObject",                <br />                "s3:ListBucket"<br />            ],<br />            "Resource": [                "arn:aws:s3:::testaurorabucket/*",                "arn:aws:s3:::testaurorabucket"<br />            ]<br />        }<br />    ]<br />}</pre> | 

**创建 init 函数**

若要初始化常用变量，例如 `bucket` 或 `region`，请使用以下代码创建 `init` 函数。

```
CREATE OR REPLACE FUNCTION utl_file_utility.init(
    )
    RETURNS void
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
BEGIN
      perform set_config
      ( format( '%s.%s','UTL_FILE_UTILITY', 'region' )
      , 'us-east-1'::text
      , false );

      perform set_config
      ( format( '%s.%s','UTL_FILE_UTILITY', 's3bucket' )
      , 'testaurorabucket'::text
      , false );
END;
$BODY$;
```

**创建包装器函数**

创建 `fopen`、`put_line` 和 `fclose` 包装器函数。

*fopen*

```
CREATE OR REPLACE FUNCTION utl_file_utility.fopen(
    p_file_name character varying,
    p_path character varying,
    p_mode character DEFAULT 'W'::bpchar,
    OUT p_file_type utl_file_utility.file_type)
    RETURNS utl_file_utility.file_type
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
declare
    v_sql character varying;
    v_cnt_stat integer;
    v_cnt integer;
    v_tabname character varying;
    v_filewithpath character varying;
    v_region character varying;
    v_bucket character varying;

BEGIN
    /*initialize common variable */
    PERFORM utl_file_utility.init();
    v_region := current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 'region' ) );
    v_bucket :=  current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 's3bucket' ) );
    
    /* set tabname*/
    v_tabname := substring(p_file_name,1,case when strpos(p_file_name,'.') = 0 then length(p_file_name) else strpos(p_file_name,'.') - 1 end );
    v_filewithpath := case when NULLif(p_path,'') is null then p_file_name else concat_ws('/',p_path,p_file_name) end ;
    raise notice 'v_bucket %, v_filewithpath % , v_region %', v_bucket,v_filewithpath, v_region;
    
    /* APPEND MODE HANDLING; RETURN EXISTING FILE DETAILS IF PRESENT ELSE CREATE AN EMPTY FILE */
    IF p_mode = 'A' THEN
        v_sql := concat_ws('','create temp table if not exists ', v_tabname,' (col1 text)');
        execute v_sql;

        begin
        PERFORM aws_s3.table_import_from_s3 
            ( v_tabname, 
            '',  
            'DELIMITER AS ''#''', 
            aws_commons.create_s3_uri 
            (     v_bucket, 
                v_filewithpath ,
                v_region)
            );
        exception
            when others then
             raise notice 'File load issue ,%',sqlerrm;
             raise;
        end;
        execute concat_ws('','select count(*) from ',v_tabname) into v_cnt;

        IF v_cnt > 0 
        then
            p_file_type.p_path := p_path;
            p_file_type.p_file_name := p_file_name;
        else         
            PERFORM aws_s3.query_export_to_s3('select ''''', 
                            aws_commons.create_s3_uri(v_bucket, v_filewithpath, v_region)            
                              );

            p_file_type.p_path := p_path;
            p_file_type.p_file_name := p_file_name;        
        end if;
        v_sql := concat_ws('','drop table ', v_tabname);        
        execute v_sql;            
    ELSEIF p_mode = 'W' THEN
            PERFORM aws_s3.query_export_to_s3('select ''''', 
                            aws_commons.create_s3_uri(v_bucket, v_filewithpath, v_region)            
                              );
            p_file_type.p_path := p_path;
            p_file_type.p_file_name := p_file_name;
    END IF;    
    
EXCEPTION
        when others then
            p_file_type.p_path := p_path;
            p_file_type.p_file_name := p_file_name;
            raise notice 'fopenerror,%',sqlerrm;
            raise;
END;
$BODY$;
```

*put\$1line*

```
CREATE OR REPLACE FUNCTION utl_file_utility.put_line(
    p_file_name character varying,
    p_path character varying,
    p_line text,
    p_flag character DEFAULT 'W'::bpchar)
    RETURNS boolean
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
/**************************************************************************
* Write line, p_line in windows format to file, p_fp - with carriage return
* added before new line.
**************************************************************************/
declare
    v_sql varchar;
    v_ins_sql varchar;
    v_cnt INTEGER;
    v_filewithpath character varying;
    v_tabname  character varying;
    v_bucket character varying;
    v_region character varying;    

BEGIN
 PERFORM utl_file_utility.init();

/* check if temp table already exist */

 v_tabname := substring(p_file_name,1,case when strpos(p_file_name,'.') = 0 then length(p_file_name) else strpos(p_file_name,'.') - 1 end );

 v_sql := concat_ws('','select count(1) FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace where n.nspname like ''pg_temp_%''' 
                         ,' AND pg_catalog.pg_table_is_visible(c.oid) AND Upper(relname) = Upper( '''
                         ,  v_tabname ,''' ) ');
  
 execute v_sql into v_cnt;
  
  IF v_cnt = 0 THEN
         v_sql := concat_ws('','create temp table ',v_tabname,' (col text)');
        execute v_sql;
        /* CHECK IF APPEND MODE */
        IF upper(p_flag) = 'A' THEN
            PERFORM utl_file_utility.init();                        
            v_region := current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 'region' ) );
            v_bucket :=  current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 's3bucket' ) );
            
            /* set tabname*/            
            v_filewithpath := case when NULLif(p_path,'') is null then p_file_name else concat_ws('/',p_path,p_file_name) end ;            
            
            begin
               PERFORM aws_s3.table_import_from_s3 
                     ( v_tabname, 
                          '',  
                       'DELIMITER AS ''#''', 
                        aws_commons.create_s3_uri 
                           ( v_bucket, 
                               v_filewithpath, 
                               v_region    )
                    );
            exception
                when others then
                    raise notice  'Error Message : %',sqlerrm;
                    raise;
            end;    
        END IF;    
    END IF;
    /* INSERT INTO TEMP TABLE */              
    v_ins_sql := concat_ws('','insert into ',v_tabname,' values(''',p_line,''')');
    execute v_ins_sql;
    RETURN TRUE;
    exception
            when others then
                raise notice  'Error Message : %',sqlerrm;
                raise;
END;
$BODY$;
```

*fclose*

```
CREATE OR REPLACE FUNCTION utl_file_utility.fclose(
    p_file_name character varying,
    p_path character varying)
    RETURNS boolean
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
DECLARE
    v_filewithpath character varying;
    v_bucket character varying;
    v_region character varying;
    v_tabname character varying;
    v_sql character varying;
BEGIN
      PERFORM utl_file_utility.init();
  
    v_region := current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 'region' ) );
    v_bucket :=  current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 's3bucket' ) );

    v_tabname := substring(p_file_name,1,case when strpos(p_file_name,'.') = 0 then length(p_file_name) else strpos(p_file_name,'.') - 1 end );
    v_filewithpath := case when NULLif(p_path,'') is null then p_file_name else concat_ws('/',p_path,p_file_name) end ;

    raise notice 'v_bucket %, v_filewithpath % , v_region %', v_bucket,v_filewithpath, v_region ;
    
    /* exporting to s3 */
    perform aws_s3.query_export_to_s3
        (concat_ws('','select * from ',v_tabname,'  order by ctid asc'), 
            aws_commons.create_s3_uri(v_bucket, v_filewithpath, v_region)
        );
    v_sql := concat_ws('','drop table ', v_tabname);
    execute v_sql;    
    RETURN TRUE;
EXCEPTION 
       when others then
     raise notice 'error fclose %',sqlerrm;
     RAISE;
END;
$BODY$;
```

**测试您的设置与包装器功能**

使用下面的代码示例测试设置。

*测试写入模式*

以下代码在 S3 存储桶中写入名为 `s3inttest` 的文件。

```
do $$
declare
l_file_name varchar := 's3inttest' ;
l_path varchar := 'integration_test' ;
l_mode char(1) := 'W';
l_fs utl_file_utility.file_type ;
l_status boolean;

begin
select * from
utl_file_utility.fopen( l_file_name, l_path , l_mode ) into l_fs ;
raise notice 'fopen : l_fs : %', l_fs;

select * from
utl_file_utility.put_line( l_file_name, l_path ,'this is test file:in s3bucket: for test purpose', l_mode ) into l_status ;
raise notice 'put_line : l_status %', l_status;

select * from utl_file_utility.fclose( l_file_name , l_path ) into l_status ;
raise notice 'fclose : l_status %', l_status;

end;
$$
```

*测试追加模式*

以下代码将行追加到上一个测试中创建的 `s3inttest` 文件上。

```
do $$
declare
l_file_name varchar := 's3inttest' ;
l_path varchar := 'integration_test' ;
l_mode char(1) := 'A';
l_fs utl_file_utility.file_type ;
l_status boolean;

begin
select * from
utl_file_utility.fopen( l_file_name, l_path , l_mode ) into l_fs ;
raise notice 'fopen : l_fs : %', l_fs;


select * from
utl_file_utility.put_line( l_file_name, l_path ,'this is test file:in s3bucket: for test purpose : append 1', l_mode ) into l_status ;
raise notice 'put_line : l_status %', l_status;

select * from
utl_file_utility.put_line( l_file_name, l_path ,'this is test file:in s3bucket : for test purpose : append 2', l_mode ) into l_status ;
raise notice 'put_line : l_status %', l_status;

select * from utl_file_utility.fclose( l_file_name , l_path ) into l_status ;
raise notice 'fclose : l_status %', l_status;

end;
$$
```

**Amazon SNS 通知**

或者，您可以在 S3 存储桶上设置亚马逊 CloudWatch 监控和 Amazon SNS 通知。有关更多信息，请参阅[监控 Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/monitoring-overview.html) 和[设置 Amazon SNS 通知](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)。

# 从 Oracle 迁移至 Amazon Aurora PostgreSQL 后验证数据库对象
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql"></a>

*Venkatramana Chintha 和 Eduardo Valentim，Amazon Web Services*

## Summary
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-summary"></a>

此模式描述了一种在将 Oracle 数据库迁移到兼容 Amazon Aurora PostgreSQL 的版本后验证对象 step-by-step的方法。

此模式概述了数据库对象验证的使用场景和步骤；有关更多详细信息，请参阅 AWS [数据库博客上的 AWS SCT 和 AWS DM [S](https://aws.amazon.com/blogs/) 在迁移后验证数据库对象](https://aws.amazon.com/blogs/database/validating-database-objects-after-migration-using-aws-sct-and-aws-dms/)。

## 先决条件和限制
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户。
+ 已迁移至 PostgreSQL-Compatibl 的数据库的本地 Oracle 数据库。 
+ 适用[亚马逊RDSDataFullAccess](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/query-editor.html)政策的登录凭证，适用于兼容 Aurora PostgreSQL 的数据库。 
+ 此模式使用 [Aurora Serverless 数据库集群查询编辑器](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/query-editor.html)，该编辑器可在 Amazon Relational Database Service (Amazon RDS) 控制台中找到。但是，您可将此模式与任何其他查询编辑器一起使用。 

**限制**
+ Oracle SYNONYM 对象在 PostgreSQL 中不可用，但可以通过**视图**或 SET search\$1path 查询进行部分验证。
+ Amazon RDS 查询编辑器仅在[某些 AWS 区域 以及某些 MySQL 和 PostgreSQL 版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/query-editor.html)中可用。

## 架构
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-architecture"></a>

 

![\[Database migration workflow showing on-premises Oracle to AWSAurora PostgreSQL via client program and validation scripts.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/7c028960-6dea-46ad-894d-e42cefd50c03/images/be5f8ae3-f5af-4c5e-9440-09ab410beaa1.png)


 

## 工具
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-tools"></a>

**工具**
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) – Aurora PostgreSQL-Compatible 是一个完全托管式、兼容 PostgreSQL 和 ACID 的关系数据库引擎，结合了高端商用数据库的速度和可靠性，同时还具有开源数据库的成本效益。
+ [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) – Amazon Relational Database Service（Amazon RDS）能够在 AWS 云端轻松设置、操作和扩展关系数据库。它为行业标准的关系数据库提供了经济高效、可调整大小的容量，并管理常见的数据库管理任务。
+ [Query Editor for Aurora Severless](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/query-editor.html) – Query 编辑器可帮助在 Amazon RDS 控制台中运行 SQL 查询。您可以在 Aurora Serverless 数据库集群上运行任何有效的 SQL 语句，包括数据操作和数据定义语句。

要验证对象，请使用“附件”部分中的“对象验证脚本”文件中的完整脚本。请参考下表。


| 
| 
| Oracle 对象 | 待用脚本 | 
| --- |--- |
| 软件包 | 查询 1 | 
| 表 | 查询 3 | 
| 观点 | 查询 5 | 
| 序列 | 查询 7 | 
| 触发器 |  查询 9 | 
| 主键 | 查询 11 | 
| 索引 | 查询 13 | 
| 检查约束 | 查询 15 | 
| 外键  | 查询 17  | 


| 
| 
| PostgreSQL 对象 | 待用脚本 | 
| --- |--- |
| 软件包 | 查询 2 | 
| 表 | 查询 4 | 
| 观点 | 查询 6 | 
| 序列 | 查询 8 | 
| 触发器 | 查询 10 | 
| 主键 | 查询 12 | 
| 索引 | 查询 14 | 
| 检查约束 | 查询 16 | 
| 外键 | 查询 18 | 

## 操作说明
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-epics"></a>

### 校验源 Oracle 数据库中的对象
<a name="validate-objects-in-the-source-oracle-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在源 Oracle 数据库中，运行“软件包”验证查询。 | 从“附件”部分中，下载并打开“对象验证脚本”文件。通过您的客户端程序连接到源 Oracle 数据库。从“对象验证脚本”文件中，运行“查询 1”验证脚本。重要提示：在查询中，输入您的 Oracle 用户名而非“your\$1schema”。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“表”验证查询。 | 从“对象验证脚本”文件中，运行“查询 3”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“视图”验证查询。 | 从“对象验证脚本”文件中，运行“查询 5”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“序列”计数验证。 | 从“对象验证脚本”文件中，运行“查询 7”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“触发器”验证查询。 | 从“对象验证脚本”文件中，运行“查询 9”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“主键”验证查询。 | 从“对象验证脚本”文件中，运行“查询 11”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“索引”验证查询。 | 从“对象验证脚本”文件中，运行“查询 13”验证脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“检查约束”验证查询。 | 从“对象验证脚本”文件中，运行“查询 15”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“外键”验证查询。 | 从“对象验证脚本”文件中，运行“查询 17”验证脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 

### 验证目标 Aurora PostgreSQL-Compatible 中的对象
<a name="validate-objects-in-the-target-aurora-postgresql-compatible-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用查询编辑器连接至与 Aurora PostgreSQL 兼容的目标数据库。 | 登录 AWS 管理控制台 并打开 Amazon RDS 控制台。在右上角，选择在其中创建 Aurora PostgreSQL 兼容数据库的 AWS 区域。在导航窗格中，选择“数据库”，然后选择目标 Aurora PostgreSQL 兼容数据库。在“操作”中，选择“查询”。重要提示：如果您之前未连接到数据库，将打开“连接到数据库”页面。然后，您需要输入数据库信息，例如用户名和密码。 | 开发人员、数据库管理员 | 
| 运行“软件包”验证查询。 | 在“附件”部分中，从“对象验证脚本”文件中运行“查询 2”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“表”验证查询。 | 返回到 Aurora PostgreSQL 兼容数据库的查询编辑器，然后从“对象验证脚本”文件中运行“查询 4”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“视图”验证查询。 | 返回到 Aurora PostgreSQL 兼容数据库的查询编辑器，然后从“对象验证脚本”文件中运行“查询 6”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“序列”计数验证。 | 返回到 Aurora PostgreSQL 兼容数据库的查询编辑器，然后从“对象验证脚本”文件中运行“查询 8”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“触发器”验证查询。 | 返回到 Aurora PostgreSQL 兼容数据库的查询编辑器，然后从“对象验证脚本”文件中运行“查询 10”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“主键”验证查询。 | 返回到 Aurora PostgreSQL 兼容数据库的查询编辑器，然后从“对象验证脚本”文件中运行“查询 12”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“索引”验证查询。 | 返回到 Aurora PostgreSQL 兼容数据库的查询编辑器，然后从“对象验证脚本”文件中运行“查询 14”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“检查约束”验证查询。 | 从“对象验证脚本”文件中，运行“查询 16”脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 
| 运行“外键”验证查询。 | 从“对象验证脚本”文件中，运行“查询 18”验证脚本。确保记录查询结果。 | 开发人员、数据库管理员 | 

### 比较源数据库与目标数据库验证记录
<a name="compare-source-and-target-database-validation-records"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 比较和验证两个查询结果。 | 比较 Oracle 和 Aurora PostgreSQL-Compatible 数据库的查询结果，以验证所有对象。如果都匹配，则所有对象都已成功验证。 | 开发人员、数据库管理员 | 

## 相关资源
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-resources"></a>
+ [在迁移后通过 AWS SCT 和 AWS DMS 验证数据库对象](https://aws.amazon.com/blogs/database/validating-database-objects-after-migration-using-aws-sct-and-aws-dms/)
+ [Amazon Aurora 功能：PostgreSQL-Compatible Edition](https://aws.amazon.com/rds/aurora/postgresql-features/)

## 附件
<a name="attachments-7c028960-6dea-46ad-894d-e42cefd50c03"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/7c028960-6dea-46ad-894d-e42cefd50c03/attachments/attachment.zip)

# 更换主机
<a name="migration-rehost-pattern-list"></a>

**Topics**
+ [加速 Microsoft 工作负载的发现以及向 AWS 的迁移](accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.md)
+ [在重新托管迁移到的过程中，为防火墙请求创建批准流程 AWS](create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws.md)
+ [将 EC2 Windows 实例提取并迁移到 AWS Managed Services 账户](ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.md)
+ [将 Couchbase 服务器数据库迁移到亚马逊 EC2](migrate-couchbase-server-ec2.md)
+ [使用日志传送将适用于 LUW 的 Db2 迁移 EC2 到 Amazon 以减少中断时间](migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.md)
+ [通过高可用性灾难恢复将 Db2 for LUW 迁移到 Amazon EC2](migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.md)
+ [使用 appcmd.exe 将 IIS 托管的应用程序迁移 EC2 到亚马逊](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [EC2 使用应用程序迁移服务将本地 Microsoft SQL Server 数据库迁移到亚马逊](migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.md)
+ [将 F5 BIG-IP 工作负载迁移到 F5 BIG-IP VE AWS 云](migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud.md)
+ [使用二进制方法将本地 Go Web 应用程序迁移至 AWS Elastic Beanstalk](migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.md)
+ [将本地 SFTP 服务器迁移到使用 AWS AWS Transfer for SFTP](migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp.md)
+ [使用 AWS 应用程序迁移服务将本地虚拟机迁移到 Amazon EC2](migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.md)
+ [使用以下命令将小型数据集从本地迁移到 Amazon S3 AWS SFTP](migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp.md)
+ [将本地 Oracle 数据库迁移到亚马逊上的 Oracle EC2](migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2.md)
+ [使用 Oracle 数据泵将本地 Oracle 数据库迁移到亚马逊 EC2](migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.md)
+ [使用 AWS MGN 将 RHEL BYOL 系统迁移至 AWS License-Included 实例](migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.md)
+ [将本地微软 SQL Server 数据库迁移到亚马逊 EC2](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.md)
+ [在 Amazon Web Services Cloud 中重新托管本地工作负载：迁移核对清单](rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist.md)
+ [使用 Amazon 为 SQL Server Always On FCI 设置多可用区基础架构 FSx](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)
+ [使用 BMC Discovery 查询提取迁移数据以进行迁移规划](use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning.md)

# 加速 Microsoft 工作负载的发现以及向 AWS 的迁移
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws"></a>

*Ali Alzand，Amazon Web Services*

## Summary
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-summary"></a>

此模式向您展示如何使用[迁移验证工具包 PowerShell 模块](https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads)来发现您的 Microsoft 工作负载并将其迁移到 AWS。该模块的工作原理是，对与任何 Microsoft 工作负载关联的常见任务执行多项检查和验证。例如，该模块会检查可能连接有多个磁盘的实例或使用许多 IP 地址的实例。有关该模块可以执行的检查的完整列表，请参阅模块 GitHub 页面上的 “[检查](https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads#checks)” 部分。

迁移验证工具包 PowerShell 模块可以帮助您的组织减少在发现 Microsoft 工作负载上正在运行哪些应用程序和服务时所花费的时间和精力。该模块还可以帮助您确定工作负载的配置，以便您可以了解 AWS 是否支持您的配置。该模块还提供后续步骤和缓解操作的建议，这样您就可以避免在迁移之前、期间或之后出现任何配置错误。

## 先决条件和限制
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-prereqs"></a>

**先决条件**
+ 本地管理员账户
+ PowerShell 4.0

**限制**
+ 仅可用于 Microsoft Windows Server 2012 R2 或更高版本

## 工具
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-tools"></a>

**工具**
+ PowerShell 4.0

**代码存储库**

此模式的迁移验证工具包 PowerShell 模块可在-microsoft GitHub [migration-validator-toolkit-for-](https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads) workdloads 存储库中找到。

## 操作说明
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-epics"></a>

### 在单个目标上运行迁移验证工具包 PowerShell 模块
<a name="run-the-migration-validator-toolkit-powershell-module-on-a-single-target"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载、解压缩、导入和调用模块。 | 选择下列方法之一来访问您的凭证。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)**运行 PowerShell 脚本**在中 PowerShell，运行以下示例代码：<pre>#MigrationValidatorToolkit<br />$uri = 'https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads/archive/refs/heads/main.zip'<br />$destination = (Get-Location).Path<br />if ((Test-Path -Path "$destination\MigrationValidatorToolkit.zip" -PathType Leaf) -or (Test-Path -Path "$destination\MigrationValidatorToolkit")) {<br />    write-host "File $destination\MigrationValidatorToolkit.zip or folder $destination\MigrationValidatorToolkit found, exiting"<br />}else {<br />    Write-host "Enable TLS 1.2 for this PowerShell session only."<br />    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12<br />    $webClient = New-Object System.Net.WebClient<br />    Write-host "Downloading MigrationValidatorToolkit.zip"<br />    $webClient.DownloadFile($uri, "$destination\MigrationValidatorToolkit.zip")<br />    Write-host "MigrationValidatorToolkit.zip download successfully"<br />    Add-Type -Assembly "system.io.compression.filesystem"<br />    [System.IO.Compression.ZipFile]::ExtractToDirectory("$destination\MigrationValidatorToolkit.zip","$destination\MigrationValidatorToolkit")<br />    Write-host "Extracting MigrationValidatorToolkit.zip complete successfully"<br />    Import-Module "$destination\MigrationValidatorToolkit\migration-validator-toolkit-for-microsoft-workloads-main\MigrationValidatorToolkit.psm1"; Invoke-MigrationValidatorToolkit<br />}</pre>该代码从 .zip 文件下载模块。然后，该代码提取、导入和调用该模块。**下载并解压缩 .zip 文件**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)**克隆 GitHub 存储库**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html) | 系统管理员 | 
| 手动调用模块。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)[Format-Table](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/format-table?view=powershell-7.3) 格式：<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-MigrationValidatorToolkit</pre>[Format-List](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/format-list?view=powershell-7.3) 格式：<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-MigrationValidatorToolkit -List</pre>[输出GridView](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/out-gridview?view=powershell-7.3)格式：<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-MigrationValidatorToolkit -GridView</pre>[ConvertTo-csv](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-csv?view=powershell-7.3) 格式：<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-MigrationValidatorToolkit -csv</pre> | 系统管理员 | 

### 在多个目标上运行迁移验证工具包 PowerShell 模块
<a name="run-the-migration-validator-toolkit-powershell-module-on-multiple-targets"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载.zip 文件或克隆 GitHub 存储库。 | 请选择以下选项之一：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)<pre>git clone https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads.git</pre> | 系统管理员 | 
| 更新 server.csv 列表。 | 如果已下载 .zip 文件，请执行下面的步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html) | 系统管理员 | 
| 调用模块。 | 您可以使用该域内的任何使用对目标计算机拥有管理员访问权限的域用户的计算机。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-DomainComputers</pre>输出 .csv 文件以前缀名称 `DomainComputers_MigrationAutomations_YYYY-MM-DDTHH-MM-SS` 保存在 `MigrationValidatorToolkit\Outputs\folder` 中。 | 系统管理员 | 

## 问题排查
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| `MigrationValidatorToolkit` 将有关执行、命令和错误的信息写入正在运行的主机上的日志文件。 | 您可以通过以下方式之一手动查看日志文件。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html) | 

## 相关资源
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-resources"></a>
+ [将 Microsoft 工作负载迁移到 AWS 的选项、工具和最佳实践](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-microsoft-workloads-aws/introduction.html)（AWS 规范指引）
+ [Microsoft 迁移模式](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migration-migration-patterns-by-workload-microsoft-pattern-list.html)（AWS 规范指引）
+ [AWS 上的免费云迁移服务](https://aws.amazon.com/free/migration/)（AWS 文档）
+ [预定义的发布后操作](https://docs.aws.amazon.com/mgn/latest/ug/predefined-post-launch-actions.html)（应用程序营销文档）

## 附加信息
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-additional"></a>

**常见问题**

*在哪里可以运行迁移验证工具包 PowerShell 模块？*

您可以在 Microsoft Windows Server 2012 R2 或更高版本上运行该模块。

*我什么时候运行这个模块？*

我们建议您在迁移过程的[评侧阶段](https://aws.amazon.com/cloud-migration/how-to-migrate/)运行该模块。

*该模块会修改我的现有服务器吗？*

否。此模块中的所有操作均为只读。

*运行该模块需要多长时间？*

运行该模块通常需要 1-5 分钟，但这取决于服务器的资源分配。

*该模块需要什么权限来运行？*

您必须使用本地管理员账户运行该模块。

*我可以在物理服务器上运行该模块吗？*

是的，只要操作系统是 Microsoft Windows Server 2012 R2 或更高版本就行。

*如何为多台服务器大规模运行该模块？*

要在多台加入域的计算机上大规模运行该模块，请按照本指南中 “在*多个目标上运行迁移验证器工具包” PowerShell 模块*中的步骤进行操作。对于未加入域的计算机，请使用远程调用或按照本指南中在*单个目标长篇故事上运行迁移验证器工具包 PowerShell 模块中的步骤在本地运行该*模块。

# 在重新托管迁移到的过程中，为防火墙请求创建批准流程 AWS
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws"></a>

*Srikanth Rangavajhala，Amazon Web Services*

## Summary
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-summary"></a>

如果要使用云迁移工厂[AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)或开启[云迁移工厂](https://aws.amazon.com/solutions/implementations/cloud-migration-factory-on-aws/) AWS 云，则前提条件之一是必须保持 TCP 端口 443 和 1500 处于打开状态。 AWS通常，打开这些防火墙端口需要获得您的信息安全 (InfoSec) 团队的批准。

此模式概述了在将防火墙重新托管迁移到防火墙期间获得 InfoSec 团队批准的 AWS 云流程。您可以使用此流程来避免 InfoSec 团队拒绝您的防火墙请求，这可能会变得昂贵且耗时。防火墙请求流程有两个审查和批准步骤，由 AWS 迁移顾问和负责人与您 InfoSec 和应用程序团队合作打开防火墙端口。

此模式假设您正在与贵组织的 AWS 顾问或迁移专家一起计划重新托管迁移。如果您的组织没有防火墙审批流程或防火墙请求一揽子审批表单，则可以使用此模式。有关此内容的更多信息，请参阅此模式的*限制*部分。有关应用程序迁移服务的网络要求的更多信息，请参阅应用程序迁移服务文档中的[网络要求](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html)。

## 先决条件和限制
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-prereqs"></a>

**先决条件**
+ 由贵组织的 AWS 顾问或迁移专家进行计划中的重新托管迁移
+ 迁移堆栈所需端口和 IP 信息
+ 现有和未来状态架构图
+ 有关本地和目标基础架构、端口和流 zone-to-zone量的防火墙信息
+ 防火墙请求审查清单（随附）
+ 根据贵组织要求配置的防火墙请求文档
+ 防火墙审阅者和审批者的联系人列表，包括以下角色：
  + **防火墙请求提交者** — AWS 迁移专家或顾问。防火墙请求提交者也可以是您组织中的迁移专家。
  + **防火墙请求审阅者** — 通常，这是来自的单点联系人 (SPOC)。 AWS
  + **防火墙请求批准者**- InfoSec 团队成员。

**限制**
+ 此模式描述了一个通用防火墙请求审批过程。各个组织的要求可能有所不同。
+ 请确保跟踪对防火墙请求文档的更改。

下表显示了此模式的用例。


| 
| 
| 您的组织是否有现有的防火墙审批流程？ | 您的组织是否有现有的防火墙请求表单？  | 建议采取的措施 | 
| --- |--- |--- |
| 支持 | 是 | 与 AWS 顾问或迁移专家合作，实施贵组织的流程。 | 
| 否 | 是 | 使用此模式的防火墙审批流程。请贵组织的 AWS 顾问或迁移专家提交防火墙申请一揽子批准表。 | 
| 否 | 否 | 使用此模式的防火墙审批流程。请贵组织的 AWS 顾问或迁移专家提交防火墙申请一揽子批准表。 | 

## 架构
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-architecture"></a>

下图显示了防火墙请求审批过程的步骤。

![\[在重新托管迁移到 AWS Cloud 期间，防火墙请求 InfoSec 团队批准的流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/cf9b58ad-ab6f-43d3-92da-968529c8d042/images/c672f7ce-6e9f-4dbc-bf2c-4272a6c4432b.png)


## 工具
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-tools"></a>

您可以使用诸如 [Palo Alto Network](https://www.paloaltonetworks.com/) s 之类的扫描器工具 [SolarWinds](https://www.solarwinds.com/)，也可以分析和验证防火墙和 IP 地址。

## 操作说明
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-epics"></a>

### 分析防火墙请求
<a name="analyze-the-firewall-request"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 分析端口和 IP 地址。 | 防火墙请求提交者完成初步分析，以了解所需防火墙端口和 IP 地址。完成后，他们会要求您的 InfoSec 团队打开所需的端口并映射 IP 地址。 | Amazon Web Services Cloud 工程师、迁移专家 | 

### 验证防火墙请求
<a name="validate-the-firewall-request"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证防火墙信息。 |  AWS 云 工程师安排与您的 InfoSec 团队会面。在此会议期间，工程师将检查并验证防火墙请求信息。通常情况下，防火墙请求提交者与防火墙请求者是同一个人。如果发现任何问题或提出任何建议，则此验证阶段可以根据审批者给出的反馈进行迭代。 | Amazon Web Services Cloud 工程师、迁移专家 | 
| 更新防火墙请求文档。 |  InfoSec 团队分享反馈后，将编辑、保存并重新上传防火墙请求文档。本文档在每次迭代后都会更新。我们建议您将此文档存储在受版本控制的存储文件夹中。这意味着所有更改都会被跟踪并正确应用。 | Amazon Web Services Cloud 工程师、迁移专家 | 

### 提交防火墙请求
<a name="submit-the-firewall-request"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 提交防火墙请求。 | 在防火墙请求批准者批准防火墙一揽子批准请求后， AWS 云 工程师提交防火墙请求。该请求指定了必须打开的端口以及映射和更新 AWS 账户所需 IP 地址。您可以在提交防火墙请求后提出建议或提供反馈。我们建议您自动执行此反馈流程，并通过定义的工作流机制发送任何编辑内容。  | Amazon Web Services Cloud 工程师、迁移专家 | 

## 附件
<a name="attachments-cf9b58ad-ab6f-43d3-92da-968529c8d042"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/cf9b58ad-ab6f-43d3-92da-968529c8d042/attachments/attachment.zip)

# 将 EC2 Windows 实例提取并迁移到 AWS Managed Services 账户
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account"></a>

*Anil Kunapareddy 和 Venkatramana Chintha，Amazon Web Services*

## Summary
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-summary"></a>

此模式解释了将亚马逊弹性计算云 (Amazon EC2) Windows 实例迁移和提取到亚马逊网络服务 (AWS) 托管服务 (AMS) 账户的 step-by-step过程。AMS 可帮助您更高效、更安全地管理实例。AMS 可提供操作灵活性，增强安全性和合规性，并帮助您优化容量和降低成本。

这种模式从您的 AMS 账户中迁移到暂存子网的 EC2 Windows 实例开始。多种迁移服务和工具可用于执行此任务，例如 AWS 应用程序迁移服务。

若要对 AMS 托管环境进行更改，您为特定操作或操作创建并提交更改请求 (RFC)。使用 AMS 工作负载摄取 (WIGS) RFC，您可以将实例摄取到 AMS 账户并创建自定义亚马逊机器映像（AMI）。然后，您可以通过提交另一个 RFC 来创建堆栈，从而创建 AMS 托管的 EC2 实例。 EC2 有关更多信息，请参阅 AMS 文档中的 [AMS 工作负载摄取](https://docs.aws.amazon.com/managedservices/latest/appguide/ams-workload-ingest.html)。

## 先决条件和限制
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-prereqs"></a>

**先决条件**
+ 由 AMS 托管的活跃 Amazon Web Services account 
+ 现有的登录区
+ 在 AMS 托管的 VPC 中进行更改的权限
+ 您的 AM EC2 S 账户中暂存子网中的亚马逊 Windows 实例
+ 完成使用 AMS WIGS 迁移工作负载的[一般先决条件](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-migrate-instance-prereqs.html)
+ 完成使用 AMS WIGS 迁移工作负载的 [Windows 先决条件](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-migrate-prereqs-win.html)

**限制**
+ 这种模式适用于运行 Windows 服务器的 EC2 实例。此模式不适用于运行其他操作系统 (例如 Linux) 的实例。

## 架构
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-architecture"></a>

**源技术堆栈**

您的 AM EC2 S 账户中暂存子网中的 Amazon Windows 实例

**目标技术堆栈**

由 AWS Managed Services (AMS) 管理的亚马逊 EC2 Windows 实例

**目标架构**

![\[将亚马逊 EC2 Windows 实例迁移和提取到 AWS Managed Services 账户的流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/393c21cb-b6c6-4446-b597-b62e29fdb7f8/images/0b2fa855-7460-49f8-9e7f-3485e6ce1745.png)


## 工具
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-tools"></a>

**AWS 服务**
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/concepts.html) 在 AWS 云中提供可扩展的计算容量。您可以根据需要使用 Amazon EC2 启动任意数量或数量的虚拟服务器，也可以进行横向扩展或扩展。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [AWS Managed Services (AMS)](https://docs.aws.amazon.com/managedservices/?id=docs_gateway) 通过为您的 AWS 基础设施提供持续管理，包括监控、事件管理、安全指导、补丁支持和 AWS 工作负载备份，帮助您更高效、更安全地运营。

**其他服务**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)是一款在 Windows、Linux 和 macOS 上运行的微软自动化和配置管理程序。

## 操作说明
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-epics"></a>

### 在实例上配置设置
<a name="configure-settings-on-the-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 更改 DNS 客户端设置。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 迁移工程师 | 
| 更改 Windows 更新设置。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 迁移工程师 | 
| 启用防火墙。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 迁移工程师 | 

### 准备 AMS WIGS 实例
<a name="prepare-the-instance-for-ams-wigs"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 清理和准备实例。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 迁移工程师 | 
| 修复 sppnp.dll 文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 迁移工程师 | 
| 运行 WiG 前验证脚本。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 迁移工程师 | 
| 创建故障安全 AMI。 | WiG 前验证通过后，请按如下方式创建预摄取 AMI：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html)有关更多信息，请参阅 AMS 文档中的 [AMI \$1 创建](https://docs.aws.amazon.com/managedservices/latest/ctref/deployment-advanced-ami-create.html)。 | 迁移工程师 | 

### 摄取和验证实例
<a name="ingest-and-validate-the-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 提交 RFC，以创建工作负载摄取堆栈。 | 提交变更申请 (RFC)，以启动 AMS WIGS。有关说明，请参阅 AMS 文档中的[工作负载摄取堆栈：创建](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-workload-ingest-col.html)。这将启动工作负载摄取并安装 AMS 所需的所有软件，包括备份工具、Amazon EC2 管理软件和防病毒软件。 | 迁移工程师 | 
| 验证迁移是否成功。 | 工作负载摄取完成后，您可看到 AMS 托管的实例和 AMS 摄取的 AMI。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 迁移工程师 | 

### 在目标 AMS 账户启动实例
<a name="launch-the-instance-in-the-target-ams-account"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 提交 RFC 以创建 EC2 堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 迁移工程师 | 

## 相关资源
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-resources"></a>

**AWS 规范指引**
+ [在 AWS Managed Services on Windows 上自动执行工作负载前摄取活动](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/automate-pre-workload-ingestion-activities-for-aws-managed-services-on-windows.html)
+ [使用 Python 在 AMS 中自动创建 RFC](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/automatically-create-an-rfc-in-ams-using-python.html?did=pg_card&trk=pg_card)

**AWS 文档**
+ [AMS 工作负载摄取](https://docs.aws.amazon.com/managedservices/latest/appguide/ams-workload-ingest.html)
+ [迁移如何改变您的资源](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-migrate-changes.html)
+ [迁移工作负载：标准流程](https://docs.aws.amazon.com/managedservices/latest/appguide/mp-migrate-stack-process.html)

**营销资源**
+ [AWS 托管服务](https://aws.amazon.com/managed-services/)
+ [AWS 托管服务 FAQs](https://aws.amazon.com/managed-services/faqs/)
+ [AWS 托管服务资源](https://aws.amazon.com/managed-services/resources/)
+ [AWS 托管服务功能](https://aws.amazon.com/managed-services/features/)

# 将 Couchbase 服务器数据库迁移到亚马逊 EC2
<a name="migrate-couchbase-server-ec2"></a>

*Subhani Shaik，Amazon Web Services*

## Summary
<a name="migrate-couchbase-server-ec2-summary"></a>

此模式描述了如何在上将 Couchbase Server 从本地环境迁移到亚马逊弹性计算云 (Amazon EC2)。 AWS

Couchbase Server 是一个分布式 NoSQL（JSON 文档）数据库，提供关系数据库功能。将 Couchbase Server 数据库迁移到 AWS 可以提高可扩展性、提高性能、提高成本效益、增强安全性、简化管理和覆盖全球，从而使需要高可用性和低延迟数据访问的应用程序受益。您还可以通过 AWS 托管服务访问高级功能。

开启的 Couchbase 服务器 AWS 提供以下主要功能： 
+ 内存优先架构
+ 高可用性、灾难恢复和负载均衡
+ 多主机、多区域部署以实现最佳性能

有关主要优势的更多信息，请参阅[其他信息](#migrate-couchbase-server-ec2-additional)部分和 [Couchbase 网站](https://www.couchbase.com/partners/amazon/)。

## 先决条件和限制
<a name="migrate-couchbase-server-ec2-prereqs"></a>

**先决条件**
+  AWS 账户 具有虚拟私有云 (VPC)、两个可用区、私有子网和一个安全组的处于活动状态。有关说明，请参阅 Amazon Virtual Private Cloud（Amazon VPC）文档中的[创建 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)。
+ 源环境与目标环境之间已启用连接。有关 Couchbase Server 所用的 TCX 端口的信息，请参阅 [Couchbase 文档](https://docs.couchbase.com/server/current/install/install-ports.html)。

## 架构
<a name="migrate-couchbase-server-ec2-architecture"></a>

下图显示了将 Couchbase Server 迁移到的高级架构。 AWS

![\[在 AWS 上重新托管 Couchbase Server 的迁移架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4cedced2-3528-4f12-b19e-7d389e820cc1/images/ac22133a-895f-4999-b1e1-57f69e83a326.png)


数据从本地 Couchbase 集群通过 [AWS Direct Connect](https://aws.amazon.com/directconnect/) 经由客户网关传输。数据通过路由器和 Direct Connect 路由，然后通过 [AWS Virtual Private Network (Site-to-Site VPN)](https://aws.amazon.com/vpn/) 网关到达 VPC。VPC 包含一个正在运行 Couchbase 服务器的 EC2 实例。该 AWS 基础设施还包括用于访问控制[的AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)、用于数据加密的 [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/)、用于区块存储的[亚马逊弹性区块存储 (Amazon EBS) B](https://aws.amazon.com/ebs/) lock Store，以及用于数据存储的[亚马逊简单存储服务 (Amazon S3) Service](https://aws.amazon.com/s3/)。

## 工具
<a name="migrate-couchbase-server-ec2-tools"></a>

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

## 最佳实践
<a name="migrate-couchbase-server-ec2-best-practices"></a>
+ 在不同的操作平台[安装和配置 Couchbase](https://docs.couchbase.com/server/current/install/install-intro.html)
+ 在上部署 Couchbase 服务器@@ [的最佳实践](https://docs.couchbase.com/server/current/cloud/couchbase-cloud-deployment.html#aws-best-practices) AWS
+ [创建 Couchbase 集群](https://docs.couchbase.com/server/current/manage/manage-nodes/create-cluster.html)
+ Couchbase 应用程序的[性能最佳实践](https://docs.couchbase.com/dotnet-sdk/current/project-docs/performance.html)
+ Couchbase Server 的[安全最佳实践](https://docs.couchbase.com/server/current/learn/security/security-overview.html)
+ Couchbase Server 数据库的[存储最佳实践](https://www.couchbase.com/forums/t/what-is-the-best-document-storage-strategy-in-couchbase/1573)

## 操作说明
<a name="migrate-couchbase-server-ec2-epics"></a>

### 为 Couchbase EC2 服务器部署 Amazon 实例
<a name="deploy-an-ec2-instance-for-couchbase-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 打开 Amazon EC2 控制台。 | 登录[AWS 管理控制台](https://console.aws.amazon.com/)并打开 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2/)。 | DevOps 工程师，Couchbase 管理员 | 
| 部署 Amazon EC2 实例。 | 启动与本地 Couchbase 服务器配置相匹配的 EC2 实例。有关如何部署 EC2 实例的更多信息，请参阅亚马逊 EC2 文档中的[启动亚马逊 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)。 | DevOps 工程师，Couchbase 管理员 | 

### 在亚马逊上安装和配置 Couchbase 服务器 EC2
<a name="install-and-configure-couchbase-server-on-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 Couchbase 集群。 | 在亚马逊上安装 [Couchbase 服务器之前，请查看 Couchbase 服务器部署指南](https://docs.couchbase.com/server/current/install/install-production-deployment.html)。 EC2要安装 Couchbase Server，请参阅 [Couchbase Server 文档](https://docs.couchbase.com/server/current/install/install-intro.html) | Couchbase 管理员 | 
| 配置集群。 | 要配置集群，请参阅 Couchbase 文档中的[集群配置选项](https://docs.couchbase.com/cloud/clusters/databases.html#cluster-configuration-options)。 | Couchbase 管理员 | 

### 添加新节点并重新平衡 Couchbase 集群
<a name="add-a-new-node-and-rebalance-the-couchbase-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 EC2 实例添加节点。 | 将安装了 Couchbase 的新部署 EC2 实例添加到现有的本地集群中。有关说明，请参阅 Couchbase Server 文档中的[添加节点和重新平衡](https://docs.couchbase.com/server/current/manage/manage-nodes/add-node-and-rebalance.html)。 | Couchbase 管理员 | 
| 重新平衡集群。 | 重新平衡过程使新添加的带有该 EC2 实例的节点成为 Couchbase 集群的活跃成员。有关说明，请参阅 Couchbase Server 文档中的[添加节点和重新平衡](https://docs.couchbase.com/server/current/manage/manage-nodes/add-node-and-rebalance.html)。 | Couchbase 管理员 | 

### 重新配置连接
<a name="reconfigure-connections"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 移除本地节点并重新平衡。 | 现在，您可以从集群移除本地节点。移除节点后，请遵循重新平衡流程，在集群中的可用节点间重新分配数据、索引、事件处理及查询处理任务。有关说明，请参阅 Couchbase Server 文档中的[移除节点和重新平衡](https://docs.couchbase.com/server/current/manage/manage-nodes/remove-node-and-rebalance.html)。 | Couchbase 管理员 | 
| 更新连接参数。 | 更新应用程序的连接参数以使用新的 Amazon EC2 IP 地址，这样您的应用程序就可以连接到新节点。 | Couchbase 应用程序开发人员 | 

## 相关资源
<a name="migrate-couchbase-server-ec2-resources"></a>
+ [Couchbase Server 服务](https://docs.couchbase.com/server/current/learn/services-and-indexes/services/services.html)
+ [使用部署 Couchbase 服务器 AWS Marketplace](https://docs.couchbase.com/server/current/cloud/couchbase-aws-marketplace.html)
+ [连接到 Couchbase Server](https://docs.couchbase.com/server/current/guides/connect.html)
+ [管理存储桶](https://docs.couchbase.com/server/current/manage/manage-buckets/bucket-management-overview.html)
+ [跨数据中心复制（XDCR）](https://docs.couchbase.com/server/current/learn/clusters-and-availability/xdcr-overview.html)
+ [Couchbase Inc. 许可协议](https://www.couchbase.com/LA20190115/)

## 附加信息
<a name="migrate-couchbase-server-ec2-additional"></a>

**主要优势**

将 Couchbase 数据库迁移到 AWS 具有以下优势：

**可扩展性**。您可以根据需要向上或向下扩展 Couchbase 集群，而无需管理物理硬件，因此您可以轻松适应不断波动的数据量和应用程序使用情况。 AWS 提供：
+ 垂直及水平缩放选项
+ [全球部署](https://aws.amazon.com/about-aws/global-infrastructure/)能力
+ 跨越负载均衡 AWS 区域
+ [数据库扩展解决方案](https://aws.amazon.com/blogs/database/scaling-your-amazon-rds-instance-vertically-and-horizontally/)
+ [内容分发](https://aws.amazon.com/solutions/content-delivery/)优化

**性能优化**。 AWS 提供高性能的网络基础设施和[优化的实例类型](https://aws.amazon.com/ec2/instance-types/)，确保您的 Couchbase 数据库实现快速数据访问和低延迟。
+ [高性能计算（HPC）](https://aws.amazon.com/hpc/)选项
+ 通过 [Amazon](https://aws.amazon.com/cloudfront/) 交付全球内容 CloudFront
+ 多种[存储选项](https://aws.amazon.com/products/storage/)
+ 高级[数据库服务](https://aws.amazon.com/products/databases/)，包括 Amazon Relational Database Service（Amazon RDS）和 Amazon DynamoDB
+ 通过 [Direct Connect](https://aws.amazon.com/directconnect/) 实现低延迟连接

**成本优化。**选择适当的实例类型和配置，根据工作负载平衡性能和成本。您只需为实际使用的资源付费。这样就无需管理本地硬件并利用规模 AWS 云 经济，从而有可能降低您的运营成本。
+ 当您在 AWS上使用 Couchbase 时，[预留实例](https://aws.amazon.com/ec2/pricing/reserved-instances/)可以帮助您提前规划并大幅降低成本。
+ [自动扩展](https://aws.amazon.com/autoscaling/)功能可防止资源预调配过度，并帮助您优化资源利用率和成本效益。

**增强安全性**。受益于强大的安全功能 AWS，例如数据加密、访问控制和安全组，以帮助保护您存储在 Couchbase 中的敏感数据。其他优势：
+ [责任AWS 共担模型](https://aws.amazon.com/compliance/shared-responsibility-model/)*明确区分*了*云安全（AWS 责任）和云安全（客户责任）。*
+ [AWS 合规性](https://aws.amazon.com/compliance/)支持主要的安全标准。
+ AWS 提供高级[加密](https://docs.aws.amazon.com/prescriptive-guidance/latest/encryption-best-practices/welcome.html)选项。
+ [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/) 可帮助您管理对资源的安全访问。

**简化了管理**。 AWS 为 Couchbase 提供托管服务，因此您可以专注于应用程序开发而不是管理底层基础架构。

**覆盖全球**。您可以跨多个集群部署 Couchbase 集群 AWS 区域 ，为世界各地的用户实现低延迟。可以将数据库完全部署在云端或混合环境中。您可以通过内置的企业级安全防护来保障数据安全，并实现从边缘到云端数据的快速高效双向同步。与此同时，可以借助一致的编程模型构建 Web 和移动应用程序，从而简化开发。

**业务连续性**：
+ **数据备份和恢复**。如果出现问题，您可以使用 [AWS Backup](https://aws.amazon.com/backup/) 确保数据弹性并轻松恢复数据。有关灾难恢复选项，请参阅 [AWS Well-Architected Framework 文档](https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html)。
+ **Couchbase 多区域部署**：要在多区域 AWS 环境中部署 Couchbase 数据库，您可以在中订阅 Couchbase Server [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-zy5g2wqmqdyzw)，使用[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)模板在每个区域中创建单独的 Couchbase 集群，然后配置跨区域复制以同步跨区域的数据。此配置可确保在多个区域内实现高可用性和地理冗余。有关更多信息，请参阅 Couchbase 文档中的[使用 AWS Marketplace部署 Couchbase Server](https://docs.couchbase.com/server/current/cloud/couchbase-aws-marketplace.html)。

**基础设施敏捷性**：
+ 快速[资源预调配](https://aws.amazon.com/products/management-and-governance/use-cases/provisioning-and-orchestration/)和取消预调配
+ 覆盖[全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)
+ 根据需求[自动扩展](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html)
+ [基础设施即代码（IaC）](https://aws.amazon.com/what-is/iac/)，实现部署一致性
+ 针对不同工作负载优化的多种[实例类型](https://aws.amazon.com/ec2/instance-types/)

**创新支持**：
+ 访问最新技术，包括 [AI/ML](https://aws.amazon.com/ai/generative-ai/)、[物联网](https://aws.amazon.com/iot/)和[分析](https://aws.amazon.com/big-data/datalakes-and-analytics/)
+ [托管服务](https://aws.amazon.com/blogs/architecture/reduce-operational-load-using-aws-managed-services-for-your-data-solutions/)，助力降低运营开销
+ [现代应用程序](https://aws.amazon.com/modern-apps/)开发实践
+ [无服务器](https://aws.amazon.com/serverless/)计算选项

**卓越运营**：
+ [集中监控和记录](https://docs.aws.amazon.com/prescriptive-guidance/latest/designing-control-tower-landing-zone/logging-monitoring.html)
+ [自动资源管理](https://aws.amazon.com/systems-manager/)
+ [预测性维护](https://aws.amazon.com/what-is/predictive-maintenance/)功能
+ [提高资源使用情况的可见性](https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-cloudwatch-provides-centralized-visibility-telemetry-configurations/)
+ [简化部署流程](https://aws.amazon.com/blogs/mt/streamline-change-processes-and-improve-governance-with-aws-well-architected/)

**现代化机会**：
+ [微服务](https://aws.amazon.com/microservices/)架构
+ [DevOps](https://aws.amazon.com/devops/)实践实施
+ [云原生](https://aws.amazon.com/what-is/cloud-native/)应用程序开发
+ [传统应用程序现代化](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-modernizing-applications/welcome.html)

**竞争优势**：
+ [缩短上市时间](https://aws.amazon.com/blogs/smb/accelerate-time-to-market-and-business-growth-with-an-automated-software-as-a-service-platform/)
+ 改善[客户体验](https://aws.amazon.com/blogs/publicsector/improving-customer-experience-for-the-public-sector-using-aws-services/)
+ [数据驱动](https://aws.amazon.com/data/data-driven-decision-making/)的决策方式
+ 增强[商业智能](https://aws.amazon.com/what-is/business-intelligence/)

# 使用日志传送将适用于 LUW 的 Db2 迁移 EC2 到 Amazon 以减少中断时间
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time"></a>

*Feng Cai、Ambarish Satarkar 和 Saurabh Sharma，Amazon Web Services*

## Summary
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-summary"></a>

当客户将他们的 IBM Db2 for LUW（Linux、UNIX 和 Windows）工作负载迁移到亚马逊网络服务 (AWS) 时，使用带有自带许可 (BYOL EC2) 模式的亚马逊弹性计算云 (Amazon) 是最快的方法。不过，将大量数据从本地 Db2 迁移到 AWS 可能是一项挑战，尤其是在停机窗口很短的情况下。许多客户尝试将停机窗口设置为 30 分钟以下，这样留给数据库本身的时间就很少了。

此模式涵盖如何使用事务日志传送在较短的中断窗口内完成 Db2 迁移。此方法适用于小端 Linux 平台上的 Db2。

## 先决条件和限制
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 在与本地文件系统布局相匹配的 EC2 实例上运行的 Db2 实例
+ 实例可以访问的亚马逊简单存储服务 (Amazon S3) Service 存储桶 EC2 
+ 用于向 Amazon S3 进行程序化调用的 AWS Identity and Access Management（IAM）策略和角色
+ Amazon EC2 和本地服务器上的时区和系统时钟同步
+ 通过 AWS [ Site-to-SiteVPN](https://aws.amazon.com/vpn/) 或 AWS Di [rect Connect 连接到 AWS](https://aws.amazon.com/directconnect/) 的本地网络

**限制**
+ Db2 本地实例和 Amazon EC2 必须位于同一个[平台系列](https://www.ibm.com/docs/en/db2/11.1?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)上。
+ 必须记录 Db2 本地工作负载。若要阻止任何未记录的事务，请在数据库配置中设置 `blocknonlogged=yes`。

**产品版本**
+ 适用于 LUW 版本 11.5.9 及以上版本的 Db2

## 架构
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-architecture"></a>

**源技术堆栈**
+ Linux 上的 Db2** **x86\$164

**目标技术堆栈**
+ Amazon EBS
+ Amazon EC2
+ AWS Identity and Access Management (IAM)
+ Amazon S3
+ AWS Site-to-Site VPN 或直接连接

**目标架构**

下图显示了一个在本地运行的 Db2 实例，该实例通过虚拟专用网络 (VPN) 连接到 Amazon 上的 Db2。 EC2虚线代表您的数据中心和 Amazon Web Services Cloud 之间的 VPN 隧道。

![\[使用事务日志传送在较短的中断窗口内完成 Db2 迁移的工作流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/7dec6e4a-a92e-4204-9e42-f89d7dcafbfa/images/a7e1c1d6-2ec1-4271-952d-a58260ad7c81.png)


## 工具
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-tools"></a>

**Amazon Web Services**
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 通过标准的以太网光纤电缆将内部网络链接到 Direct Connect 位置。通过此连接，您可以直接创建连接到公有 Amazon Web Services 的虚拟接口，同时绕过网络路径中的互联网服务提供商。
+ [亚马逊弹性区块存储 (Amazon EBS) E](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) lastic Block Store 提供块级存储卷，用于亚马逊弹性计算云 (Amazon) 实例。 EC2
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 可帮助您在您在 AWS 上启动的实例和您自己的远程网络之间传递流量。

**其他工具**
+ [db2cli](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli) 是 Db2 交互式 CLI 命令。

## 最佳实践
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-best-practices"></a>
+ 在目标数据库上，使用 [Amazon S3 网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)访问 Amazon S3 中的数据库备份映像和日志文件。
+ 在源数据库上，使用[ PrivateLink 适用于 Amazon S3 的 AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html) 将数据库备份映像和日志文件发送到 Amazon S3。

## 操作说明
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-epics"></a>

### 设置环境变量
<a name="set-environment-variables"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置环境变量。 | 此模式使用以下名称：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.html)您可更改它们以适应您的环境。 | 数据库管理员 | 

### 配置本地 Db2 服务器
<a name="configure-the-on-premises-db2-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS CLI。 | 要下载并安装最新版本的 AWS CLI，请运行以下命令：<pre>$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />unzip awscliv2.zip<br />sudo ./aws/install</pre> | Linx 管理员 | 
| 设置 Db2 归档日志的本地目标。 | 要使 Amazon EC2 上的目标数据库与本地源数据库保持同步，需要从源数据库检索最新的事务日志。在此设置中，`/db2logs` 由 `LOGARCHMETH2` 在源上设置作为暂存区域。此目录中的存档日志将同步到 Amazon S3 中，并由亚马逊上的 Db2 访问。 EC2使用 `LOGARCHMETH2` 模式，原因是 `LOGARCHMETH1` 可能已配置为使用 AWS CLI 命令无法访问的第三方供应商工具。若要检索日志，请运行以下命令：<pre>db2 connect to sample<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 disk:/db2logs</pre> | 数据库管理员 | 
| 运行在线数据库备份。 | 运行在线数据库备份，并将其保存至本地备份文件系统：<pre>db2 backup db sample online to /backup </pre> | 数据库管理员 | 

### 设置 S3 存储桶和 IAM policy
<a name="set-up-the-s3-bucket-and-iam-policy"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | 为本地服务器创建 S3 存储桶，以便将备份 Db2 映象和日志文件发送到 AWS 上。Amazon 也将访问该存储桶 EC2：<pre>aws s3api create-bucket --bucket logshipmig-db2 --region us-east-1 </pre> | AWS 系统管理员 | 
|  创建一个 IAM 策略。 | `db2bucket.json` 文件包含用于访问 Amazon S3 存储桶的 IAM 策略：<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "kms:GenerateDataKey",<br />                "kms:Decrypt",<br />                "s3:PutObject",<br />                "s3:GetObject",<br />                "s3:AbortMultipartUpload",<br />                "s3:ListBucket",<br />                "s3:DeleteObject",<br />                "s3:GetObjectVersion",<br />                "s3:ListMultipartUploadParts"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::logshipmig-db2/*",<br />                "arn:aws:s3:::logshipmig-db2"<br />            ]<br />        }<br />    ]<br />}</pre>要创建策略，请使用以下 AWS CLI 命令：<pre>aws iam create-policy \<br />      --policy-name db2s3policy \<br />      --policy-document file://db2bucket.json </pre> JSON 输出显示策略的 Amazon 资源名称（ARN），其中 `aws_account_id` 代表您的账户 ID：<pre>"Arn": "arn:aws:iam::aws_account_id:policy/db2s3policy"</pre> | AWS 管理员、AWS 系统管理员 | 
| 将 IAM 策略附加到 EC2 实例使用的 IAM 角色。 | 在大多数 AWS 环境中，正在运行的 EC2 实例都由您的系统管理员设置的 IAM 角色。如果未设置 IAM 角色，请创建该角色并在 EC2 控制台上选择 M **odify IAM 角色**以将该角色与托管 Db2 数据库的 EC2 实例相关联。使用策略 ARN 将 IAM 策略附加到 IAM 角色：<pre>aws iam attach-role-policy \<br />    --policy-arn "arn:aws:iam::aws_account_id:policy/db2s3policy"  \<br />    --role-name db2s3role  </pre>附加策略后，任何与 IAM 角色关联的 EC2 实例都可以访问 S3 存储桶。 | AWS 管理员、AWS 系统管理员 | 

### 将源数据库备份映象和日志文件发送到 Amazon S3
<a name="send-the-source-database-backup-image-and-log-files-to-amazon-s3"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在本地 Db2 服务器上配置 AWS CLI。 | 使用在前面的步骤中生成的 `Access Key ID` 和 `Secret Access Key` 配置 AWS CLI：<pre>$ aws configure <br />AWS Access Key ID [None]: *************<br />AWS Secret Access Key [None]: ***************************<br />Default region name [None]: us-east-1<br />Default output format [None]: json</pre>  | AWS 管理员、AWS 系统管理员 | 
| 将备份映象发送到 Amazon S3。 | 早些时候，联机数据库备份已保存至 `/backup` 本地目录中。要将备份映象发送到 S3 存储桶，请运行以下命令：<pre>aws s3 sync /backup s3://logshipmig-db2/SAMPLE_backup</pre> | AWS 管理员、迁移工程师 | 
| 将 Db2 存档日志发送至 Amazon S3。 | 将本地 Db2 存档日志与 Amazon 上的目标 Db2 实例可以访问的 S3 存储桶同步： EC2<pre>aws s3 sync /db2logs s3://logshipmig-db2/SAMPLE_LOG</pre>使用 cron 或其他计划工具定期以运行此命令。频率取决于源数据库归档事务日志文件的频率。 | AWS 管理员、迁移工程师 | 

### 将亚马逊上的 Db2 连接 EC2 到 Amazon S3 并开始数据库同步
<a name="connect-db2-on-amazon-ec2-to-amazon-s3-and-start-the-database-sync"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 PKCS12 密钥库。 | Db2 使用公钥加密标准 (PKCS) 加密密钥库，保障 AWS 访问密钥的安全。创建密钥库并配置源 Db2 实例，以将其用于：<pre>gsk8capicmd_64 -keydb -create -db "/home/db2inst1/.keystore/db2s3.p12" -pw "<password>" -type pkcs12 -stash <br /> <br />db2 "update dbm cfg using keystore_location /home/db2inst1/.keystore/db2s3.p12 keystore_type pkcs12"</pre> | 数据库管理员 | 
| 创建 Db2 存储访问别名。 | 若要创建[存储访问别名](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)，请使用以下脚本语法：`db2 "catalog storage access alias <alias_name> vendor S3 server <S3 endpoint> container '<bucket_name>'"`例如，您的脚本可能如下所示：`db2 "catalog storage access alias DB2AWSS3 vendor S3 server s3.us-east-1.amazonaws.com container 'logshipmig-db2'" ` | 数据库管理员 | 
| 设置暂存区域。 | 默认情况下，Db2 使用 `DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH` 作为过渡区域，向 Amazon S3 上传和从 Amazon S3 下载文件。默认路径位于实例主目录 `sqllib/tmp/RemoteStorage.xxxx` 下，`xxxx` 引用 Db2 分区号。请注意，暂存区域必须有足够的容量来容纳备份映象和日志文件。您可使用注册表将暂存区域指向其他目录。我们还建议使用 `DB2_ENABLE_COS_SDK=ON`、`DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore` 和 `awssdk` 库链接，绕过 Amazon S3 暂存区进行数据库备份和恢复：<pre>#By root:<br />cp -rp /home/db2inst1/sqllib/lib64/awssdk/RHEL/7.6/* /home/db2inst1/sqllib/lib64/<br /><br />#By db2 instance owner:<br />db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/db2stage<br />db2set DB2_ENABLE_COS_SDK=ON<br />Db2set DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore<br />db2stop<br />db2start</pre> | 数据库管理员 | 
| 从备份映象恢复数据库。 |  EC2 从 S3 存储桶中的备份映像还原 Amazon 上的目标数据库：<pre>db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup replace existing</pre> | 数据库管理员 | 
| 前滚数据库。 | 恢复完成后，目标数据库进入向前滚挂起状态。配置 `LOGARCHMETH1` 和 `LOGARCHMETH2`，以便 Db2 知道从何处获取事务日志文件：<pre>db2 update db cfg for SAMPLE using LOGARCHMETH1 'DB2REMOTE://DB2AWSS3//SAMPLE_LOGS/'<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 OFF</pre>启动数据库前滚：<pre>db2 ROLLFORWARD DATABASE sample to END OF LOGS</pre>此命令处理已传输至 S3 存储桶的所有日志文件。根据本地 Db2 服务器上 `s3 sync` 命令的频率定期运行该命令。例如，如果 `s3 sync` 每小时运行一次，并且同步所有日志文件需要 10 分钟，则将命令设置为每小时后运行 10 分钟。 | 数据库管理员 | 

### 在转换窗口期间，让 Amazon 上的 Db2 上 EC2 线
<a name="bring-db2-on-amazon-ec2-online-during-the-cutover-window"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将目标数据库联机。 | 在割接窗口中，执行下列操作之一：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.html)将最后一个事务日志同步到 Amazon S3 后，最后一次运行 `ROLLFORWARD` 命令：<pre>db2 rollforward DB sample to END OF LOGS<br />db2 rollforward DB sample complete<br /><br />                                 Rollforward Status<br />....<br /> Rollforward status                     = not pending<br />....<br />DB20000I  The ROLLFORWARD command completed successfully.<br /><br />db2 activate db sample<br />DB20000I  The ACTIVATE DATABASE command completed successfully.</pre>将目标数据库联机，并将应用程序连接指向 Amazon EC2 上的 Db2。 | 数据库管理员 | 

## 问题排查
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 如果多个数据库在不同的主机 (DEV、QA、PROD) 上具有相同的实例名和数据库名称，则备份和日志可能会进入同一个子目录。 | 为 DEV、QA 和 PROD 使用不同的 S3 存储桶，并添加主机名作为子目录前缀，以避免混淆。 | 
| 如果在同一位置有多个备份映象，则恢复时会出现以下错误：`SQL2522N More than one backup file matches the time stamp value provided for the backed up database image.` | 在 `restore` 命令中，添加备份的时间戳：`db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup taken at 20230628164042 replace existing` | 

## 相关资源
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-resources"></a>
+ [不同操作系统和硬件平台之间的 Db2 备份与恢复操作](https://www.ibm.com/docs/en/db2/11.5?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)
+ [设置 Db2 存储访问别名和远程 DB2](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)
+ [db2 前滚命令](https://www.ibm.com/docs/en/db2/11.5?topic=commands-rollforward-database)
+ [Db2 辅助日志存档方法](https://www.ibm.com/docs/en/db2/11.5?topic=parameters-logarchmeth2-secondary-log-archive-method)

# 通过高可用性灾难恢复将 Db2 for LUW 迁移到 Amazon EC2
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery"></a>

*Feng Cai、Aruna Gangireddy 和 Venkatesan Govindan，Amazon Web Services*

## Summary
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-summary"></a>

如果客户要将 IBM Db2 LUW（Linux、UNIX 和 Windows）工作负载迁移至 Amazon Web Services（AWS），采用 Amazon Elastic Compute Cloud（Amazon EC2）并结合自带许可（BYOL）模式是最快捷的途径。不过，将大量数据从本地 Db2 迁移到 AWS 可能是一项挑战，尤其是在停机窗口很短的情况下。许多客户尝试将停机窗口设置为 30 分钟以下，这样留给数据库本身的时间就很少了。

此模式涵盖如何使用 Db2 高可用性灾难恢复 (HADR) 在较短的中断窗口内完成 Db2 迁移。此方法适用于小端 Linux 平台上且不使用数据分区功能 (DPF) 的 Db2 数据库。

## 先决条件和限制
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 在 Amazon EC2 实例上运行且与本地文件系统布局匹配的 Db2 实例
+ EC2 实例可访问的 Amazon Simple Storage Service (Amazon S3) 存储桶
+ 用于向 Amazon S3 进行程序化调用的 AWS Identity and Access Management（IAM）策略和角色
+ Amazon EC2 和本地服务器上的同步时区和系统时钟
+ 通过 AWS [ Site-to-SiteVPN](https://aws.amazon.com/vpn/) 或 AWS Di [rect Connect 连接到 AWS](https://aws.amazon.com/directconnect/) 的本地网络
+ 本地服务器与 Amazon EC2 在 HADR 端口上的通信

**限制**
+ Db2 本地实例和 Amazon EC2 必须位于同一[平台系列](https://www.ibm.com/docs/en/db2/11.1?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)上。
+ 分区数据库环境不支持 HADR。
+ HADR 不支持对数据库日志文件使用原始 I/O （直接磁盘访问）。
+ HADR 不支持无限的日志记录。
+ `LOGINDEXBUILD` 必须设置为 `YES`，这将增加重建索引的日志使用量。
+ 必须记录 Db2 本地工作负载。在数据库配置中设置 `blocknonlogged=yes` 以阻止任何未记录的事务。

**产品版本**
+ 适用于 LUW 版本 11.5.9 及以上版本的 Db2

## 架构
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-architecture"></a>

**源技术堆栈**
+ Linux 上的 Db2 ** **x86\$164

**目标技术堆栈**
+ Amazon EC2
+ AWS Identity and Access Management (IAM)
+ Amazon S3
+ AWS Site-to-Site VPN

**目标架构**

在下图中，本地 Db2 作为主服务器在 `db2-server1` 运行。它包含两个 HADR 备用目标。一个备用目标位于本地，并且是可选。另一个备用目标 `db2-ec2` 位于 Amazon EC2 上。将数据库割接到 AWS 后，`db2-ec2` 成为主数据库。

![\[使用 Db2 HADR 在短暂的中断窗口内迁移本地 Db2 的工作流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2db43e4b-f0ea-4a92-96da-4cafb7d3368b/images/5295420e-3cd8-4127-9a18-ade971c36339.png)


1. 日志从主本地数据库流式传输至备用本地数据库。

1. 使用 Db2 HADR，日志通过 Site-to-Site VPN 从主本地数据库流式传输到 Amazon EC2 上的 Db2。

1. Db2 备份和存档日志从主本地数据库发送至 AWS 上的 S3 存储桶。

## 工具
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-tools"></a>

**Amazon Web Services**
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 通过标准的以太网光纤电缆将内部网络链接到 Direct Connect 位置。通过此连接，您可以直接创建连接到公有 Amazon Web Services 的虚拟接口，同时绕过网络路径中的互联网服务提供商。
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 Amazon Web Services Cloud 中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 可帮助您在您在 AWS 上启动的实例和您自己的远程网络之间传递流量。

**其他工具**
+ [db2cli](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli) 是 Db2 交互式 CLI 命令。

## 最佳实践
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-best-practices"></a>
+ 在目标数据库上，使用 [Amazon S3 网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)访问 Amazon S3 中的数据库备份映像和日志文件。
+ 在源数据库上，使用[ PrivateLink 适用于 Amazon S3 的 AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html) 将数据库备份映像和日志文件发送到 Amazon S3。

## 操作说明
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-epics"></a>

### 设置环境变量
<a name="set-environment-variables"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置环境变量。 | 此模式使用以下名称和端口：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.html)您可更改它们以适应您的环境。 | 数据库管理员 | 

### 配置本地 Db2 服务器
<a name="configure-the-on-premises-db2-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS CLI。 | 要下载并安装最新版本的 AWS CLI，请运行以下命令：<pre>$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />unzip awscliv2.zip<br />sudo ./aws/install</pre> | Linx 管理员 | 
| 设置 Db2 归档日志的本地目标。 | 大量更新批处理作业和网络速度减慢等情况可能会导致 HADR 备用服务器出现延迟。为了赶上进度，备用服务器需要来自主服务器的事务日志。请求日志位置顺序如下：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.html)在此设置中，`/db2logs` 由 `LOGARCHMETH2` 在源上设置作为暂存区域。此目录中的存档日志将同步至 Amazon S3 中，并由 Amazon EC2 上的 Db2 访问。此模式使用 `LOGARCHMETH2`，因为 `LOGARCHMETH1` 可能已配置为使用 AWS CLI 命令无法访问的第三方供应商工具：<pre>db2 connect to sample<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 disk:/db2logs</pre> | 数据库管理员 | 
| 运行在线数据库备份。 | 运行在线数据库备份，并将其保存至本地备份文件系统：<pre>db2 backup db sample online to /backup </pre> | 数据库管理员 | 

### 设置 S3 存储桶和 IAM policy
<a name="set-up-the-s3-bucket-and-iam-policy"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | 为本地服务器创建 S3 存储桶，以便将备份 Db2 映象和日志文件发送到 AWS 上。Amazon EC2 将访问此存储桶：<pre>aws s3api create-bucket --bucket hadrmig-db2 --region us-east-1 </pre> | AWS 管理员 | 
| 创建一个 IAM 策略。 | `db2bucket.json` 文件包含用于访问 S3 存储桶的 IAM 策略：<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "kms:GenerateDataKey",<br />                "kms:Decrypt",<br />                "s3:PutObject",<br />                "s3:GetObject",<br />                "s3:AbortMultipartUpload",<br />                "s3:ListBucket",<br />                "s3:DeleteObject",<br />                "s3:GetObjectVersion",<br />                "s3:ListMultipartUploadParts"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::hadrmig-db2/*",<br />                "arn:aws:s3:::hadrmig-db2"<br />            ]<br />        }<br />    ]<br />}</pre>要创建策略，请使用以下 AWS CLI 命令：<pre>aws iam create-policy \<br />      --policy-name db2s3hapolicy \<br />      --policy-document file://db2bucket.json </pre>JSON 输出显示策略的 Amazon 资源名称（ARN），其中 `aws_account_id` 代表您的账户 ID：<pre>"Arn": "arn:aws:iam::aws_account_id:policy/db2s3hapolicy"</pre> | AWS 管理员、AWS 系统管理员 | 
| 将 IAM 策略附加到 IAM 角色。 | 通常，运行 Db2 的 EC2 实例将具有系统管理员分配的 IAM 角色。如果未分配 IAM 角色，可以在 Amazon EC2 控制台上选择**修改 IAM 角色**。将 IAM 策略附加到与 EC2 实例关联的 IAM 角色。附加策略后，EC2 实例可以访问 S3 存储桶。<pre>aws iam attach-role-policy --policy-arn "arn:aws:iam::aws_account_id:policy/db2s3hapolicy" --role-name db2s3harole   </pre> |  | 

### 将源数据库备份映象和日志文件发送到 Amazon S3
<a name="send-the-source-database-backup-image-and-log-files-to-amazon-s3"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在本地 Db2 服务器配置 AWS CLI。 | 使用之前生成的 `Access Key ID` 和 `Secret Access Key` 配置 AWS CLI：<pre>$ aws configure <br />AWS Access Key ID [None]: *************<br />AWS Secret Access Key [None]: ***************************<br />Default region name [None]: us-east-1<br />Default output format [None]: json</pre> | AWS 管理员、AWS 系统管理员 | 
| 将备份映象发送到 Amazon S3。 | 早些时候，联机数据库备份已保存至 `/backup` 本地目录中。要将备份映象发送到 S3 存储桶，请运行以下命令：<pre>aws s3 sync /backup s3://hadrmig-db2/SAMPLE_backup</pre> | AWS 管理员、AWS 系统管理员 | 
| 将 Db2 存档日志发送至 Amazon S3。 | 将本地 Db2 存档日志与 Amazon EC2 上的目标 Db2 实例可以访问的 S3 存储桶同步：<pre>aws s3 sync /db2logs s3://hadrmig-db2/SAMPLE_LOGS</pre>使用 cron 或其他计划工具定期以运行此命令。频率取决于源数据库归档事务日志文件的频率。 |  | 

### 将 Amazon EC2 上的 Db2 连接至 Amazon S3 并开始初步数据库同步
<a name="connect-db2-on-amazon-ec2-to-amazon-s3-and-start-the-initial-database-sync"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 PKCS12 密钥库。 | Db2 使用公钥加密标准 (PKCS) 加密密钥库，保障 AWS 访问密钥的安全。创建密钥库并配置源 Db2，以进行使用：<pre>gsk8capicmd_64 -keydb -create -db "/home/db2inst1/.keystore/db2s3.p12" -pw "<password>" -type pkcs12 -stash <br /> <br />db2 "update dbm cfg using keystore_location /home/db2inst1/.keystore/db2s3.p12 keystore_type pkcs12"</pre> | 数据库管理员 | 
| 创建 Db2 存储访问别名。 | Db2 使用存储访问别名通过 `INGEST`、`LOAD`、`BACKUP DATABASE` 或 `RESTORE DATABASE` 命令直接访问 Amazon S3。因为您为 EC2 实例分配了 IAM 角色，`USER` 和 `PASSWORD` 并非必需：`db2 "catalog storage access alias <alias_name> vendor S3 server <S3 endpoint> container '<bucket_name>'"`例如，您的脚本可能如下所示：`db2 "catalog storage access alias DB2AWSS3 vendor S3 server s3.us-east-1.amazonaws.com container 'hadrmig-db2'" ` | 数据库管理员 | 
| 设置暂存区域。 | 我们建议使用 `DB2_ENABLE_COS_SDK=ON`、`DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore` 和 `awssdk` 库链接，绕过 Amazon S3 暂存区进行数据库备份和恢复：<pre>#By root:<br />cp -rp /home/db2inst1/sqllib/lib64/awssdk/RHEL/7.6/* /home/db2inst1/sqllib/lib64/<br /><br />#By db2 instance owner:<br />db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/db2stage<br />db2set DB2_ENABLE_COS_SDK=ON<br />db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/db2stage<br />db2stop<br />db2start</pre> | 数据库管理员 | 
| 从备份映象恢复数据库。 | 从 S3 存储桶中的备份映象恢复 Amazon EC2 上的目标数据库：<pre>db2 create db sample on /data1<br />db2 restore db sample from DB2REMOTE://DB2AWSS3/hadrmig-db2/SAMPLE_backup replace existing</pre> | 数据库管理员 | 

### 在本地无 HADR 的情况下设置 HADR
<a name="set-up-hadr-with-no-hadr-on-premises"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置本地 Db2 服务器为主服务器。 | 将 `db2-server1`（本地源）的 HADR 的数据库配置设置为主数据库。将 `HADR_SYNCMODE` 设置为 `SUPERASYNC` 模式，其事务响应时间最短：`db2 update db cfg for sample using HADR_LOCAL_HOST db2-server1 HADR_LOCAL_SVC 50010 HADR_REMOTE_HOST db2-ec2 HADR_REMOTE_SVC 50012 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully`本地数据中心与 AWS 之间预计会有一些网络延迟。(您可根据网络可靠性设置不同 `HADR_SYNCMODE` 值。有关更多信息，请参阅[相关资源](#migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-resources)部分)。 | 数据库管理员 | 
| 更改目标数据库日志归档目标。 | 更改目标数据库日志存档目标以匹配 Amazon EC2 环境：<pre>db2 update db cfg for SAMPLE using LOGARCHMETH1 'DB2REMOTE://DB2AWSS3//SAMPLE_LOGS/' LOGARCHMETH2 OFF<br />DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully</pre> | 数据库管理员 | 
| 在Amazon EC2 服务器上为 Db2 配置 HADR。 | 更新 `db2-ec2` HADR 的数据库配置，使其处于待机状态：`db2 update db cfg for sample using HADR_LOCAL_HOST db2-ec2 HADR_LOCAL_SVC 50012 HADR_REMOTE_HOST db2-server1 HADR_REMOTE_SVC 50010 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully` | 数据库管理员 | 
| 验证 HADR 设置。 | 验证源 Db2 服务器和目标 Db2 服务器上的 HADR 参数。若要验证 `db2-server1` 上的设置，请运行以下命令：<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = PRIMARY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-server1<br /> HADR local service name                (HADR_LOCAL_SVC) = 50010<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-ec2<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50012<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = <br /> HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre> 若要验证 `db2-ec2` 上的设置，请运行以下命令：<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = STANDBY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-ec2<br /> HADR local service name                (HADR_LOCAL_SVC) = 50012<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-server1<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50010<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = <br /> HADR log write synchronization mode     (HADR_SYNCMODE) = SUPERASYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre>`HADR_LOCAL_HOST`、`HADR_LOCAL_SVC`、`HADR_REMOTE_HOST`、和 `HADR_REMOTE_SVC` 参数表示一个主 HADR 设置和一个备用 HADR 设置。 | 数据库管理员 | 
| 启动 Db2 HADR 实例。 | 首先在备用服务器 `db2-ec2` 上启动 Db2 HADR 实例：<pre>db2 start hadr on db sample as standby<br />DB20000I  The START HADR ON DATABASE command completed successfully.</pre>在主（源）服务器 `db2-server1` 上启动 Db2 HADR：<pre>db2 start hadr on db sample as primary<br />DB20000I  The START HADR ON DATABASE command completed successfully.</pre>本地 Db2 和 Amazon EC2 上的 HADR 连接现已成功建立。Db2 主服务器 `db2-server1` 开始将事务日志记录实时传输至 `db2-ec2`。 | 数据库管理员 | 

### 当本地有 HADR 时设置 HADR
<a name="set-up-hadr-when-hadr-exists-on-premises"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Amazon EC2 添加 Db2 作为辅助备用。 | 如果 HADR 正在本地 Db2 实例上运行，则可以通过在 `db2-ec2` 上运行以下命令，使用 `HADR_TARGET_LIST` 将 Amazon EC2 上的 Db2 添加为辅助备用实例：`db2 update db cfg for sample using HADR_LOCAL_HOST db2-ec2 HADR_LOCAL_SVC 50012 HADR_REMOTE_HOST db2-server1 HADR_REMOTE_SVC 50010 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. db2 update db cfg for sample using HADR_TARGET_LIST "db2-server1:50010\|db2-server2:50011" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.` | 数据库管理员 | 
| 将辅助备用信息添加至本地服务器。 | 更新 `HADR_TARGET_LIST` 两台本地服务器（主服务器和备用服务器）。在 `db2-server1` 上，运行以下代码：`db2 update db cfg for sample using HADR_TARGET_LIST "db2-server2:50011\|db2-ec2:50012" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. SQL1363W One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.`在 `db2-server2` 上，运行以下代码：`db2 update db cfg for sample using HADR_TARGET_LIST "db2-server1:50010\|db2-ec2:50012" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. SQL1363W One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.` | 数据库管理员 | 
| 验证 HADR 设置。 | 验证源 Db2 服务器和目标 Db2 服务器上的 HADR 参数。在 `db2-server1` 上，运行以下代码：<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = PRIMARY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-server1<br /> HADR local service name                (HADR_LOCAL_SVC) = 50010<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-server2<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50011<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = db2-server2:50011|db2-ec2:50012<br /> HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre>在 `db2-server2` 上，运行以下代码：<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = STANDBY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-server2<br /> HADR local service name                (HADR_LOCAL_SVC) = 50011<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-server1<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50010<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = db2-server1:50010|db2-ec2:50012<br /> HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre>在 `db2-ec2` 上，运行以下代码：<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = STANDBY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-ec2<br /> HADR local service name                (HADR_LOCAL_SVC) = 50012<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-server1<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50010<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = db2-server1:50010|db2-server2:50011<br /> HADR log write synchronization mode     (HADR_SYNCMODE) = SUPERASYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre>`HADR_LOCAL_HOST`、`HADR_LOCAL_SVC`、`HADR_REMOTE_HOST`、`HADR_REMOTE_SVC`、`HADR_TARGET_LIST` 参数表示一个主 HADR 设置和两个备用 HADR 设置。 |  | 
| 停止和启动 Db2 HADR。 | `HADR_TARGET_LIST` 现在已在所有三台服务器上进行设置。每个 Db2 服务器都了解其他两个。停止并重启 HADR（短暂停机）以利用新配置。在 `db2-server1` 上，运行以下命令：<pre>db2 stop hadr on db sample<br />db2 deactivate db sample<br />db2 activate db sample</pre>在 `db2-server2` 上，运行以下命令：<pre>db2 deactivate db sample<br />db2 start hadr on db sample as standby<br />SQL1766W  The command completed successfully</pre>在 `db2-ec2` 上，运行以下命令：<pre>db2 start hadr on db sample as standby<br />SQL1766W  The command completed successfully</pre>在 `db2-server1` 上，运行以下命令：<pre>db2 start hadr on db sample as primary<br />SQL1766W  The command completed successfully</pre>现在，本地 Db2 和 Amazon EC2 上的 HADR 连接已成功建立。Db2 主服务器 `db2-server1` 开始将事务日志记录实时流式传输至 `db2-server2` 和 `db2-ec2`。 | 数据库管理员 | 

### 割接窗口期间，将 Amazon EC2 上的 Db2 设置为主数据库
<a name="make-db2-on-amazon-ec2-as-primary-during-the-cutover-window"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确保备用服务器上无 HADR 延迟。 | 从主服务器 `db2-server1` 检查 HADR 状态。`HADR_STATE` 处于 `REMOTE_CATCHUP` 状态时不要惊慌，当 `HADR_SYNCMODE` 设置为 `SUPERASYNC` 时，这是正常的。`PRIMARY_LOG_TIME` 和 `STANDBY_REPLAY_LOG_TIME` 表示它们处于同步状态：<pre>db2pd -hadr -db sample<br />                            HADR_ROLE = PRIMARY<br />                          REPLAY_TYPE = PHYSICAL<br />                        HADR_SYNCMODE = SUPERASYNC<br />                           STANDBY_ID = 2<br />                        LOG_STREAM_ID = 0<br />                           HADR_STATE = REMOTE_CATCHUP<br />.....<br />                     PRIMARY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292)<br />                     STANDBY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292)<br />              STANDBY_REPLAY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292)</pre> | 数据库管理员 | 
| 运行 HADR 接管。 | 若要完成迁移，请运行 HADR takeover 命令创建 `db2-ec2` 主数据库。使用命令 `db2pd` 验证 `HADR_ROLE` 值：<pre>db2 TAKEOVER HADR ON DATABASE sample<br />DB20000I  The TAKEOVER HADR ON DATABASE command completed successfully.<br /><br />db2pd -hadr -db sample<br />Database Member 0 -- Database SAMPLE -- Active -- Up 0 days 00:03:25 -- Date 2022-10-26-02.46.45.048988<br /><br />                            HADR_ROLE = PRIMARY<br />                          REPLAY_TYPE = PHYSICAL</pre>要完成向 AWS 的迁移，请将应用程序连接指向 Amazon EC2 的 Db2。 |  | 

## 问题排查
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 如果您出于防火墙和安全原因使用 NAT，则主机可能有两个 IP 地址（一个内部地址和一个外部地址），这可能会导致 HADR IP 地址检查失败。`START HADR ON DATABASE` 命令将返回以下消息：`HADR_LOCAL_HOST:HADR_LOCAL_SVC (-xx-xx-xx-xx.:50011 (xx.xx.xx.xx:50011)) on remote database is different from HADR_REMOTE_HOST:HADR_REMOTE_SVC (xx-xx-xx-xx.:50011 (x.x.x.x:50011)) on local database.` | 要在 [NAT 环境中支持 HADR](https://www.ibm.com/docs/en/db2/11.5?topic=support-hadr-nat)，您可使用内部地址和外部地址 `HADR_LOCAL_HOST` 进行配置。例如，如果 Db2 服务器有内部名称 `host1` 和外部名称 `host1E`，则 `HADR_LOCAL_HOST` 可以是 `HADR_LOCAL_HOST: "host1 \| host1E"`。 | 

## 相关资源
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-resources"></a>
+ [不同操作系统和硬件平台之间的 Db2 备份与恢复操作](https://www.ibm.com/docs/en/db2/11.5?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)
+ [设置 Db2 存储访问别名和远程 DB2](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)
+ [Db2 高可用性灾难恢复](https://www.ibm.com/docs/en/db2/11.5?topic=server-high-availability-disaster-recovery-hadr)
+ [hadr\$1syncmode — 对等状态配置参数中日志写入的 HADR 同步模式](https://www.ibm.com/docs/en/db2/11.5?topic=dcp-hadr-syncmode-hadr-synchronization-mode-log-writes-in-peer-state)

# 使用 appcmd.exe 将 IIS 托管的应用程序迁移 EC2 到亚马逊
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd"></a>

*Deepak Kumar，Amazon Web Services*

## Summary
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-summary"></a>

当您将互联网信息服务 (IIS) 托管的应用程序迁移到亚马逊弹性计算云 (Amazon EC2) 实例时，您需要解决一些身份验证难题。这些挑战包括重新输入应用程序池标识的域凭证，以及可能需要重新生成机器密钥以确保网站功能正常运行。您可以使用 AWS Directory Service 与本地 Active Directory 建立信任关系，也可以在中创建新的托管 Active Directory AWS。此模式描述了一种干净的迁移方法，该方法在 Amazon EC2 实例上使用 IIS 的备份和还原功能。该方法使用 appcmd.exe 在目标 EC2 实例上卸载并重新安装 IIS，从而成功迁移 IIS 托管的网站、应用程序池标识和计算机密钥。

## 先决条件和限制
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-prereqs"></a>

**先决条件**
+ 目标服务器处于活动状态 AWS 账户 。
+ 一个正常运作的源 IIS 服务器，上面托管有网站。
+ 了解 IIS 工作原理，例如管理和配置。
+ 系统管理员可以访问源服务器及目标服务器。
+ 已完成源 IIS 服务器向目标服务器的迁移 AWS 账户。您可以使用迁移工具 AWS Application Migration Service，例如基于快照的 Amazon 系统映像 (AMI) 方法或其他迁移工具。

**限制**
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

**产品版本**
+ IIS 8.5 或 IIS 10.0

## 架构
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-architecture"></a>

**源技术堆栈**
+ 安装了 IIS 8.5 或 IIS 10.0 的 Windows Server

**目标技术堆栈**
+ 安装了 IIS 8.5 或 IIS 10.0 的 Windows Server
+ Application Migration Service

**目标架构**

下图显示了此模式的工作流和架构组件。

![\[将 IIS 托管的应用程序迁移到 Amazon 的工作流程。 EC2\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2f9f7757-b2bc-4077-b51a-700de521424c/images/36aa9b7a-d0aa-4fa4-be47-9fee43b53c22.png)


此解决方案包括以下步骤：

1. 在公司数据中心的源 IIS 服务器上@@ [安装](https://docs.aws.amazon.com/mgn/latest/ug/agent-installation.html)和配置 AWS 复制代理。此代理启动复制过程并管理向的数据传输。 AWS

1.  AWS 复制代理与应用程序迁移服务建立[安全连接](https://docs.aws.amazon.com/mgn/latest/ug/Agent-Related-FAQ.html#How-Communication-Secured)，并开始复制源服务器数据，包括 IIS 配置、网站和应用程序文件。

1. 应用程序迁移服务使用复制的数据启动应用程序子网中的 EC2 实例。目标 EC2 实例运行 IIS，包含已迁移的应用程序及其关联的 Amazon Elastic Block Store (Amazon EBS) 卷。初始复制完成后，Application Migration Service 继续同步更改，直至您[准备好切换](https://docs.aws.amazon.com/mgn/latest/ug/migration-dashboard.html#ready-for-cutover1)到新环境为止。

## 工具
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-tools"></a>

**AWS 服务**
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)帮助您将应用程序重新托管*（移动*）到， AWS 云 无需更改且停机时间最短。
+ [Amazon Elastic Block Store (Amazon](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html) EBS) 提供用于亚马逊实例的块级存储卷。 EC2 
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 在中提供可扩展的计算容量 AWS 云。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。

**其他工具**
+ 适用于 Windows Server 的 [Internet Information Services（IIS）](https://www.iis.net/overview)是具备可扩展开放式架构的 Web 服务器，用于在网络上托管内容。IIS 提供了一组管理工具，包括管理和命令行工具（例如 appcmd.exe）、托管代码和脚本 APIs以及 Windows PowerShell 支持。

## 操作说明
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-epics"></a>

### 迁移前在源端备份 IIS
<a name="back-up-iis-at-source-prior-to-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 IIS 托管的网站、配置密钥和 `WAS` 密钥的备份。 | 要为 IIS 托管的网站、配置密钥（`iisConfigurationKey`）和 `WAS` 密钥（`iisWasKey`）创建备份，请在源服务器上使用 appcmd.exe。使用以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html)要导出配置密钥和 `WAS` 密钥，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html) | ISS 管理员 | 

### 在目标服务器上卸载并重新安装 IIS
<a name="uninstall-and-reinstall-iis-on-the-target-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在目标服务器上卸载 IIS | 要在目标服务器上卸载 IIS，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html) | ISS 管理员 | 
| 在目标服务器上安装 IIS。 | 要在目标服务器上安装 IIS，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html) | ISS 管理员 | 

### 从备份中恢复 IIS 网站和配置
<a name="restore-iis-websites-and-configuration-from-the-backups"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 恢复 IIS 网站和配置。 | 要在目标服务器上恢复从源服务器创建的 IIS 备份，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html) | ISS 管理员 | 

## 相关资源
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-resources"></a>

**AWS 文档**
+ [安装 AWS 复制代理](https://docs.aws.amazon.com/mgn/latest/ug/agent-installation.html)（AWS Application Migration Service 文档）

**AWS 规范性指导**
+ [使用将本地虚拟机迁移到 Amazon EC2 AWS Application Migration Service](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html)
+ [使用 AMIs 或 Amazon EBS 快照进行备份](https://docs.aws.amazon.com/prescriptive-guidance/latest/backup-recovery/ec2-backup.html#amis-snapshots)

**Microsoft 资源**
+ [应用程序池标识](https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/was-service-svchost-process-operation/understanding-identities#application-pool-identities)
+ [IIS 文档](https://learn.microsoft.com/en-us/iis/)
+ [IIS 8 appcmd.exe 文档](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/jj635852(v=ws.11))
+ [IIS 10 appcmd.exe 文档](https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/new-features-introduced-in-iis-10)
+ [强大的管理工具](https://learn.microsoft.com/en-us/iis/overview/powerful-admin-tools)

# EC2 使用应用程序迁移服务将本地 Microsoft SQL Server 数据库迁移到亚马逊
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn"></a>

*Senthil Ramasamy，Amazon Web Services*

## Summary
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-summary"></a>

此模式描述了将 Microsoft SQL Server 数据库从本地数据中心迁移到亚马逊弹性计算云 (Amazon EC2) 实例的步骤。它使用 AWS Application Migration Service (AWS MGN) 通过自动 lift-and-shift迁移来重新托管您的数据库。 AWS MGN 对源数据库服务器执行块级复制。

## 先决条件和限制
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 本地数据中心的源 Microsoft SQL Server 数据库

**限制**
+ 您的本地数据中心与 AWS之间的网络带宽可能有限。
+ AWS MGN 仅限于托管在具有专用存储空间的独立服务器上的数据库。它不支持迁移集群数据库系统和变化率超过网络吞吐量的数据库系统。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)页面，然后选择相应服务的链接。

**产品版本**
+ Microsoft SQL Server 数据库的所有版本
+ [支持 AWS MG](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html) N 的 Windows 和 Linux 操作系统

## 架构
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-architecture"></a>

**源技术堆栈**

本地 Microsoft SQL Server 数据库

**目标技术堆栈**

亚马逊 EC2 实例上的微软 SQL Server 数据库

**目标架构**

![\[将数据从本地企业数据中心复制到 AWS。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/a459eaef-c256-4691-a7ec-2304f634228c/images/d8d6cee7-f42c-4686-bf92-6e6d39adfb17.png)


此架构使用 AWS MGN 将数据从本地企业数据中心复制到。 AWS图中显示了数据复制过程、API 通信以及测试和割接阶段。

1. 数据复制：
   + AWS MGN 将数据从本地企业数据中心复制到 AWS 并启动变更的持续复制。
   + 暂存子网中的复制服务器接收和处理数据。

1. API 通信：
   + 复制服务器通过 TCP 端口 443 连接到 AWS MGN EC2、亚马逊和亚马逊简单存储服务 (Amazon S3) Simple Storage API 终端节点。
   + AWS MGN 负责管理迁移。
   + Amazon EC2 管理实例操作。

1. 测试和割接：
   + 测试实例使用复制的数据在运行子网中启动。
   + 成功测试后， AWS MGN 会为最终迁移创建直接转换实例。

## 工具
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-tools"></a>
+ [AWS Application Migration Service (AWS MGN)](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html) 可帮助您将应用程序重新托管*（移动*）到， AWS 云 无需更改且停机时间最短。
+ [Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 通过标准的以太网光纤电缆将内部网络链接到 Direct Connect 位置。通过此连接，您可以直接创建通往公共 AWS 服务的虚拟接口，同时绕过网络路径中的互联网服务提供商。
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 在中提供可扩展的计算容量 AWS 云。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

## 最佳实践
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-best-practices"></a>
+ 在虚拟私有云 (VPC) 中为 AWS MGN EC2、Amazon 和 Amazon S3 设置 API 区域终端节点，以禁止公共访问互联网。
+ 设置 AWS MGN 启动设置以启动私有子网中的目标数据库服务器。
+ 数据库安全组中仅允许必需的端口。
+ 遵循最低权限原则，并授予执行任务所需的最低权限。有关详情，请参阅 IAM 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 操作说明
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-epics"></a>

### 设置 AWS MGN
<a name="set-up-aws-mgn"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 AWS MGN。 |  AWS Application Migration Service 在中搜索 AWS 管理控制台，然后启动设置过程。这将创建一个复制模板并将您重定向到 MGN 控制台的**源服务器**页面。配置 MGN 服务时，从生成的列表中选择一个服务角色。 | 数据库管理员、迁移工程师 | 
| 添加源服务器。 | 添加本地源数据库服务器的详细信息，然后添加服务器。 | 数据库管理员、迁移工程师 | 
| 在源服务器上安装 AWS MGN 代理。 | 将 AWS MGN 代理安装程序下载到本地系统，然后将安装程序传输到源数据库服务器。要验证安装程序哈希值，请参阅验证所下载的 [Windows 2012 版AWS 复制代理安装程序](https://docs.aws.amazon.com/mgn/latest/ug/windows-agent.html#installer-hash-table-2012)。 | 数据库管理员、迁移工程师 | 

### 在源计算机上安装 AWS MGN 代理
<a name="install-aws-mgn-agent-on-source-machines"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 生成客户端 IAM 凭证。 | 在安装 AWS MGN 代理之前，请通过创建具有相应权限的新 IAM 用户来生成 AWS 证书。有关更多信息，请参阅 [AWS 托管策略 AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/security-iam-awsmanpol.html)和[生成所需 AWS 证书](https://docs.aws.amazon.com/mgn/latest/ug/credentials.html)。 | 数据库管理员、迁移工程师 | 
| 在源服务器上安装代理。 | 将代理安装至托管 Microsoft SQL Server 数据库的源计算机上。有关更多信息，请参阅[在 Windows 服务器上安装 AWS 复制代理](https://docs.aws.amazon.com/mgn/latest/ug/windows-agent.html)。提供以下 AWS 凭证：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html)您的唯一 AWS 凭证使 AWS MGN 代理能够进行身份验证和执行迁移任务。 | 应用程序所有者、数据库管理员、迁移工程师 | 
| 选择要复制的磁盘。 | 输入您的 AWS 凭据后，安装程序会验证您的服务器是否满足代理安装的最低要求（例如，服务器是否有足够的磁盘空间来安装 AWS MGN 代理）。安装程序会显示卷标和存储详情。要使用 AWS MGN 服务复制数据库，请在源服务器上选择适用的磁盘。输入每个磁盘的路径（以逗号分隔）。若要复制所有磁盘，请将路径留空。确认所选磁盘后，安装即会继续。 | 数据库管理员、迁移工程师 | 
| 监控同步进度。 | AWS Replication Agent 首先拍摄所选磁盘的快照，然后复制数据，从而启动同步过程。您可以从 AWS MGN 控制台的**源服务器**页面监控同步进度。有关更多信息，请参阅[监控迁移生命周期中的服务器](https://docs.aws.amazon.com/mgn/latest/ug/migration-dashboard.html)。 | 数据库管理员、迁移工程师 | 

### 使用 AWS MGN 复制
<a name="replication-using-aws-mgn"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 管理复制进度。 | 开始初始同步后，您的源服务器将出现在 AWS MGN 控制台中，您可以在其中管理和监控迁移。控制台显示完成复制的预计时间，该时间基于所选磁盘的总容量和可用网络带宽计算得出。 | 数据库管理员、迁移工程师 | 
| 验证同步。 | 源服务器上的磁盘完全同步后，确认所有选定磁盘都列为已完全同步，并且控制台中没有报告错误。然后， AWS MGN 控制台将自动将迁移生命周期状态转换 AWS 为 “**准备测试**”，这表明中的复制环境已准备好进行性能和功能测试。 | 应用程序所有者、数据库管理员、迁移工程师 | 

### 测试和割接
<a name="test-and-cut-over"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置启动设置。 | 在 AWS MGN 控制台中选择源服务器，然后更新目标测试实例的启动设置。在源**服务器详细信息**页面上，导航到**启动设置**选项卡以配置测试实例。选择经济高效的实例类型和 Amazon Elastic Block Store（Amazon EBS）卷类型，然后配置安全组和网络要求。有关更多信息，请参阅[启动设置](https://docs.aws.amazon.com/mgn/latest/ug/launch-settings.html)。 | 数据库管理员、迁移工程师 | 
| 启动目标测试实例。 | 导航到同步源计算机的 AWS MGN 控制台，然后选择测试**并切换，然后启动测试**实例，**启动目标测试实例**。这将创建一个启动作业，使用您配置的设置部署测试实例。该实例将在中启动 AWS 云 并复制您的源数据库服务器的环境。从**启动历史记录**页面监控启动进度，您可以在其中跟踪实例创建情况并解决任何问题。 | 数据库管理员、迁移工程师 | 
| 验证目标测试实例。 | 验证 Amazon EC2 数据库服务器：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html)执行验证测试以确保数据库按预期运行。 | 数据库管理员、迁移工程师 | 
| 对服务器进行重命名。 | AWS MGN 迁移涉及本地源服务器的存储级副本。您的 SQL Server EC2 实例在其二进制文件中仅包含原始源服务器的详细信息，因此请更新二进制信息以反映新服务器的名称。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html) | 数据库管理员、迁移工程师 | 
| 启动割接实例。 | 在 AWS MGN 控制台的 “**源服务器**” 页面上，确认服务器的迁移生命周期状态为 “**准备切**换”。配置割接实例的启动设置，确保这些设置与您的本地环境相符。在启动割接之前，请关闭本地数据库，以确保：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html)在 AWS MGN 控制台中启动转换实例。当割接实例处于运行状态时，登录该实例并执行以下测试：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html) | 应用程序所有者、数据库管理员、迁移工程师、迁移主管 | 

## 问题排查
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 初始同步在身份验证步骤失败。 | 这是网络连接问题。复制服务器无法连接到 AWS MGN。 | 

## 相关资源
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-resources"></a>

**AWS 文档**
+ [入门 AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/getting-started.html)
+ [将本地微软 SQL Server 数据库迁移到亚马逊 EC2](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.html)
+ [亚马逊上的微软 SQL Server EC2 是什么？](https://docs.aws.amazon.com/sql-server-ec2/latest/userguide/sql-server-on-ec2-overview.html)

**视频**
+ [使用 AWS Application Migration Service执行直接迁移](https://www.youtube.com/watch?v=tB0sAR3aCb4)（视频）

# 将 F5 BIG-IP 工作负载迁移到 F5 BIG-IP VE AWS 云
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud"></a>

*Deepak Kumar，Amazon Web Services*

## Summary
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-summary"></a>

Organizations希望迁移 AWS 云 到以提高其敏捷性和弹性。将 [F5 BIG-IP](https://www.f5.com/products/big-ip-services) 安全和流量管理解决方案迁移到后 AWS 云，您可以专注于在企业架构中提高敏捷性并采用高价值运营模型。

此模式介绍了如何在 AWS 云上将 F5 BIG-IP 工作负载迁移至 [F5 BIG-IP Virtual Edition（VE）](https://www.f5.com/products/big-ip-services/virtual-editions)工作负载。将通过为现有环境更换主机并利用更换平台的各个方面（例如服务发现和 API 集成）来迁移工作负载。[AWS CloudFormation 模板](https://github.com/F5Networks/f5-aws-cloudformation)可加快您的工作负载迁移至 AWS 云的速度。

此模式适用于正在迁移 F5 安全和流量管理解决方案的技术工程和架构团队，并附有规范性指南网站上的《[从 F5 BIG-IP 迁移到 F5 BIG-IP VE](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-f5-big-ip/welcome.html)》指南。 AWS 云 AWS 

## 先决条件和限制
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-prereqs"></a>

**先决条件**
+ 现有的本地 F5 BIG-IP 工作负载。
+ 现有 BIG-IP VE 版本 F5 许可证。
+ 活跃 AWS 账户的.
+ 一种现有的虚拟私有云 (VPC)，配置通过 NAT 网关或弹性 IP 地址的出口，并配置为访问以下终端节点：亚马逊简单存储服务 (Amazon S3) Simple Storage Service、Amazon Elastic Compute Cloud (Amazon AWS Security Token Service EC2)、AWS STS() 和亚马逊。 CloudWatch您还可以修改[模块化和可扩展 VPC 架构](https://aws.amazon.com/quickstart/architecture/vpc/) Quick Start，将其作为部署的基块。 
+ 一个或两个可用现有区，具体取决于您的要求。 
+ 每个可用区内包含三个私有子网。
+ AWS CloudFormation 模板，[在 F5 GitHub 存储库中可用](https://github.com/F5Networks/f5-aws-cloudformation/blob/master/template-index.md)。 

在迁移过程中，您还可以根据需要使用以下内容：
+ [F5 云故障转移扩展](https://clouddocs.f5.com/products/extensions/f5-cloud-failover/latest/)用于管理弹性 IP 地址映射、辅助 IP 映射以及路由表更改。 
+ 如果您使用多个可用区，则需要使用 F5 云故障转移扩展来处理与虚拟服务器的弹性 IP 映射。
+ 您应考虑使用 [F5 应用程序服务 3 (AS3)](https://clouddocs.f5.com/products/extensions/f5-appsvcs-extension/latest/)、[F5 应用程序服务模板 (FAST)](https://clouddocs.f5.com/products/extensions/f5-appsvcs-templates/latest/) 或其他基础设施即代码 (IaC) 模型来管理配置。在 IaC 模型中准备配置，并使用代码存储库帮助迁移和持续的管理工作。

**专业知识**
+ 这种模式需要熟悉 VPCs 如何将一个或多个数据中心连接到现有的数据中心。有关这方面的更多信息，请参阅 Amazon [Network-to-Amazon VPC 文档中的 VPC 连接选项](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)。 
+ [还需要熟悉 F5 产品和模块，包括[Traffic Management Operating System (TMOS)](https://www.f5.com/services/resources/white-papers/tmos-redefining-the-solution)、[Local Traffic Manager (LTM)](https://www.f5.com/products/big-ip-services/local-traffic-manager)、[Global Traffic Manager (GTM)](https://techdocs.f5.com/kb/en-us/products/big-ip_gtm/manuals/product/gtm-concepts-11-5-0/1.html#unique_9842886)、[Access Policy Manager (APM)](https://www.f5.com/products/security/access-policy-manager)、[Application Security Manager (ASM)](https://www.f5.com/pdf/products/big-ip-application-security-manager-overview.pdf)、[Advanced Firewall Manager (AFM)](https://www.f5.com/products/security/advanced-firewall-manager) 以及 BIG-IQ](https://www.f5.com/products/automation-and-orchestration/big-iq)。

**产品版本**
+ 我们建议您使用 F5 BIG-IP [13.1](https://techdocs.f5.com/kb/en-us/products/big-ip_ltm/releasenotes/product/relnote-bigip-ve-13-1-0.html)或更高版本，尽管该模式支持 F5 BIG-IP [12.1](https://techdocs.f5.com/kb/en-us/products/big-ip_ltm/releasenotes/product/relnote-bigip-12-1-4.html)或更高版本。

## 架构
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-architecture"></a>

**源技术堆栈**
+ F5 BIG-IP 工作负载

**目标技术堆栈**
+ Amazon CloudFront
+ CloudWatch
+ Amazon EC2
+ Amazon S3
+ Amazon VPC
+ AWS Global Accelerator
+ AWS STS
+ AWS Transit Gateway
+ F5 BIG-IP VE

**目标架构**

![\[将 F5 BIG-IP 工作负载迁移到 F5 BIG-IP VE 工作负载的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/586fe806-fac1-48d3-9eb1-45a6c86430dc/images/16d7fc09-1ffe-4721-b503-d971db84cbae.png)


## 工具
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-tools"></a>
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) 通过全球数据中心网络交付您的网页内容，从而降低延迟并提高性能，从而 CloudFront加快网络内容的分发。  
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 可帮助您实时监控您的 AWS 资源和运行的应用程序 AWS 的指标。
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在中 AWS 云 提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速向上或向下扩展。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) 可帮助您为用户申请临时的、有限权限的证书。
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)是连接虚拟私有云 (VPCs) 和本地网络的中央集线器。
+ [Amazon Virtual Private Cloud（亚马逊 VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)可帮助您将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络，并具有使用 AWS的可扩展基础设施的优势。

## 操作说明
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-epics"></a>

### 发现与评测
<a name="discovery-and-assessment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 评测 F5 BIG-IP 性能。 | 收集并记录虚拟服务器上应用程序的性能指标，以及将要迁移系统的指标。这将有助于正确调整目标 AWS 基础架构的规模，从而实现更好的成本优化。 | F5 架构师、工程师和网络架构师以及工程师 | 
| 评估 F5 BIG-IP 操作系统和配置。 | 评估将迁移哪些对象以及是否需要维护网络结构，例如 VLANs。 | F5 架构师、工程师 | 
| 评估 F5 许可证选项。 | 评估您所需许可证和使用模式 此评测应基于您对 F5 BIG-IP 操作系统与配置的评估。 | F5 架构师、工程师 | 
| 评估公用应用程序。 | 确定哪些需要公有 IP 地址的应用程序。将这些应用程序与所需实例和集群对齐，以满足性能和服务水平协议（SLA）要求。 | F5 架构师、云架构师、网络架构师、工程师、应用团队 | 
| 评估内部应用程序。 | 评估内部用户将使用的应用程序。确保您了解这些内部用户在组织中的位置，以及这些环境如何连接至 AWS 云。您还应确保这些应用程序在默认域中使用域名系统（DNS）。 | F5 架构师、云架构师、网络架构师、工程师、应用团队 | 
| 完成 AMI。 | 并非所有 F5 BIG-IP 版本都是以 Amazon 机器映像 () 的形式创建的。AMIs如果您有特定的快速修复工程 (QFE) 版本，则可以使用 F5 BIG-IP Image Generator Tool。如需了解关此工具的更多信息，请参阅“相关资源”部分。 | F5 架构师、云架构师、工程师 | 
| 最终确定实例类型和架构。 | 决定实例类型、VPC 架构和互连架构。 | F5 架构师、云架构师、网络架构师、工程师 | 

### 完成与安全和合规相关的活动
<a name="complete-security-and-compliance-related-activities"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 记录现有 F5 安全策略。 | 收集并记录现有 F5 安全策略。确保在安全的代码存储库中创建副本。 | F5 架构师、工程师 | 
| 加密 AMI。 | （可选）您的组织可能需要静态数据加密。关于创建自带许可（BYOL）映像的更多信息，请参阅“相关资源”部分。 | F5 架构师、工程师云架构师、工程师 | 
| 强化设备。 | 这将有助于防范潜在漏洞。 | F5 架构师、工程师 | 

### 配置您的新 AWS 环境
<a name="configure-your-new-aws-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建边缘和安全账户。 | 登录并创建 AWS 账户 将提供 AWS 管理控制台 和运营边缘和安全服务的。这些帐户可能不同于 VPCs 为共享服务和应用程序运行的帐户。此步骤可以作为登录区的一部分。 | 云架构师、工程师 | 
| 部署边缘和安全性 VPCs。 | 设置和配置交付边缘和安全服务 VPCs 所需的内容。 | 云架构师、工程师 | 
| 连接至源数据中心。 | 连接至托管 F5 BIG-IP 工作负载的源数据中心。 | 云架构师、网络架构师、工程师 | 
| 部署 VPC 连接。 | 将 Edge 和安全服务 VPCs 连接到应用程序 VPCs。 | 网络架构师、工程师 | 
| 部署实例。 | 使用 “相关资源” 部分中的 CloudFormation 模板部署实例。 | F5 架构师、工程师 | 
| 测试和配置实例故障转移。 | 确保 AWS 高级 HA iApp 模板或 F5 云故障转移扩展已配置且运行正常。 | F5 架构师、工程师 | 

### 配置联网
<a name="configure-networking"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备 VPC 拓扑。 | 打开 Amazon VPC 控制台，确保您的 VPC 具有 F5 BIG-IP VE 部署所需所有子网与保护。 | 网络架构师、F5 架构师、云架构师、工程师 | 
| 准备好 VPC 端点。 | 为 Amazon EC2、Amazon S3 以及 AWS STS F5 BIG-IP 工作负载无法访问 TMM 接口上的 NAT 网关或弹性 IP 地址时准备 VPC 终端节点。 | 云架构师、工程师 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 迁移配置。 | 将 F5 BIG-IP 配置迁移至 AWS 云上的 F5 BIG-IP VE。 | F5 架构师、工程师 | 
| 关联次要节点 IPs。 | 虚拟服务器 IP 地址与分配至实例的辅助 IP 地址关联。分配辅助 IP 地址，并确保选中“允许重新映射/重新分配”。 | F5 架构师、工程师 | 

### 测试配置
<a name="test-configurations"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证虚拟服务器配置。 | 测试虚拟服务器。 | F5 架构师、应用团队 | 

### 完成操作
<a name="finalize-operations"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建备份策略。 | 必须关闭系统才可创建完整快照。有关更多信息，请参阅“相关资源”部分中的“更新 F5 BIG-IP 虚拟机”。 | F5 架构师、云架构师、工程师 | 
| 创建集群故障转移运行手册。 | 确保故障转移运行手册进程已完成。 | F5 架构师、工程师 | 
| 设置和验证日志记录。 | 配置 F5 Telemetry Streaming 以将日志发送至所需目标。 | F5 架构师、工程师 | 

### 完成割接
<a name="complete-the-cutover"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 割接到新的部署。 |  | F5 架构师、云架构师、网络架构师、工程师 AppTeams | 

## 相关资源
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-resources"></a>

**迁移指南**
+ [在 F5 BIG-IP 迁移到 F5 BIG-IP VE AWS 云](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-f5-big-ip/welcome.html)

**F5 资源**
+ [CloudFormation F5 GitHub 存储库中的模板](https://github.com/F5Networks/f5-aws-cloudformation)
+ [F5 输入 AWS Marketplace](https://aws.amazon.com/marketplace/seller-profile?id=74d946f0-fa54-4d9f-99e8-ff3bd8eb2745)
+ [F5 BIG-IP VE 概述](https://www.f5.com/products/big-ip-services/virtual-editions) 
+ [快速入门示例 - BIG-IP Virtual Edition with WAF (LTM \$1 ASM)](https://github.com/F5Networks/f5-aws-cloudformation-v2/tree/main/examples/quickstart)
+ [F5 应用程序服务开启 AWS：概述（视频）](https://www.youtube.com/watch?v=kutVjRHOAXo)
+ [F5 应用程序服务 3 扩展用户指南](https://clouddocs.f5.com/products/extensions/f5-appsvcs-extension/latest/)
+ [F5 云文档](https://clouddocs.f5.com/training/community/public-cloud/html/intro.html)
+ [F5 iControl REST wiki](https://clouddocs.f5.com/api/icontrol-rest/)
+ [F5 单一配置文件（11.x - 15.x）概述](https://support.f5.com/csp/article/K13408)
+ [F5 白皮书](https://www.f5.com/services/resources/white-papers)
+ [F5 BIG-IP Image Generator Tool](https://clouddocs.f5.com/cloud/public/v1/ve-image-gen_index.html)
+ [更新 F5 BIG-IP VE 虚拟机](https://techdocs.f5.com/kb/en-us/products/big-ip_ltm/manuals/product/bigip-ve-setup-vmware-esxi-11-5-0/3.html)
+ [UCS 存档“平台迁移”选项概述](https://support.f5.com/csp/article/K82540512)

# 使用二进制方法将本地 Go Web 应用程序迁移至 AWS Elastic Beanstalk
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method"></a>

*Suhas Basavaraj 和 Shumaz Mukhtar Kazi，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-summary"></a>

此模式介绍如何将本地 Go Web 应用程序迁移至 AWS Elastic Beanstalk。应用程序迁移后，Elastic Beanstalk 会为源包构建二进制文件，并将其部署到亚马逊弹性计算云 (Amazon) 实例。 EC2

根据更换主机迁移策略，该模式的方法速度很快，并且不需要更改代码，这意味着更少的测试和迁移时间。 

## 先决条件和限制
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 本地 Go Web 应用程序。
+ 包含 Go 应用程序源代码的 GitHub 存储库。如果您不使用 GitHub，还有其他方法可以为 Elasti [c Beanstalk 创建应用程序源包](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-sourcebundle.html)。

**产品版本**
+ Elastic Beanstalk 支持最新 Go 版本。有关更多信息，请参阅 [Elastic Beanstalk 文档](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.go)。

## 架构
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-architecture"></a>

**源技术堆栈**
+ 本地 Go Web 应用程序 

**目标技术堆栈**
+ AWS Elastic Beanstalk
+ Amazon CloudWatch

**目标架构*** *

![\[将 Go 应用程序迁移至 Elastic Beanstalk 的架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/cd8d660d-5621-4ea7-8f97-7a1e321c57d3/images/1df543d9-7073-43d8-abd3-f1f7e57278eb.png)


## 工具
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-tools"></a>
+ [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.html) 可在 Amazon Web Services Cloud 中快速部署和管理应用程序，用户不必了解运行这些应用程序的基础设施。Elastic Beanstalk 可降低管理的复杂性，但不会影响选择或控制。
+ [GitHub](https://github.com/)是一个开源的分布式版本控制系统。

## 操作说明
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-epics"></a>

### 创建 Go Web 应用程序源捆绑包 .zip 文件
<a name="create-the-go-web-application-source-bundle-zip-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Go 应用程序创建源捆绑包。 | 打开包含 Go 应用程序源代码的 GitHub 存储库并准备源包。源捆绑包在根目录中包含 `application.go` 源文件，该文件托管 Go 应用程序的主软件包。如果您不使用 GitHub，请参阅此模式前面的 “*先决条件*” 部分，了解创建应用程序源包的其他方法。 | 系统管理员、应用程序开发人员 | 
| 创建配置文件。 | 在源捆绑包中创建 `.ebextensions` 文件夹，然后在该文件夹中创建 `options.config` 文件。有关更多信息，请参阅 [Elastic Beanstalk 文档](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html)。 | 系统管理员、应用程序开发人员 | 
|  创建源捆绑包 .zip 文件。 | 运行如下命令。<pre>git archive -o ../godemoapp.zip HEAD</pre>这将创建源捆绑包 .zip 文件。下载 .zip 文件并将其另存为本地文件。.zip 文件不能超过 512 MB，并且不能包含父文件夹或顶级目录。 | 系统管理员、应用程序开发人员 | 

### 将 Go Web 应用程序迁移至 Elastic Beanstalk
<a name="migrate-the-go-web-application-to-elastic-beanstalk"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 选择 Elastic Beanstalk 应用程序。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.html)有关如何创建 Elastic Beanstalk 应用程序的说明，请参阅 [Elastic Beanstalk 文档](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.CreateApp.html)。 | 系统管理员、应用程序开发人员 | 
| 初始化 Elastic Beanstalk Web 服务器环境。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.html) | 系统管理员、应用程序开发人员 | 
| 将源捆绑包 .zip 文件上传到 Elastic Beanstalk。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.html) | 系统管理员、应用程序开发人员 | 
| 测试已部署的 Go Web 应用程序。 | 您将被重定向至 Elastic Beanstalk 应用程序概述页面。在概述顶部的**环境 ID** 旁边，选择结尾为 `elasticbeanstalk.com` 的 URL，以导航到您的应用程序。您的应用程序必须在其配置文件中使用此名称作为环境变量，并将其显示在网页上。 | 系统管理员、应用程序开发人员 | 

## 问题排查
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 无法通过应用程序负载均衡器访问应用程序 | 检查包含 Elastic Beanstalk 应用程序的目标群体。如果运行状况不佳，请登录您的 Elastic Beanstalk 实例并检查 `nginx.conf` 文件配置，以验证其路由到的运行状况网址是否正确。您可能需要更改目标群组的运行状况检查 URL。 | 

## 相关资源
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-resources"></a>
+ [Elastic Beanstalk 支持的 Go 平台版本](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.go)
+ [在 Elastic Beanstalk 中使用配置文件](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html)
+ [在 Elastic Beanstalk 中创建示例应用程序](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.CreateApp.html) 

# 将本地 SFTP 服务器迁移到使用 AWS AWS Transfer for SFTP
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp"></a>

*Akash Kumar，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-summary"></a>

此模式描述了如何使用该 AWS Transfer for SFTP 服务将使用安全外壳 (SSH) 文件传输协议 (SFTP) 的本地文件传输解决方案迁移到。 AWS 云 用户通常通过其域名或固定 IP 连接至 SFTP 服务器。此模式涵盖了两种情况。

AWS Transfer for SFTP 是... 的成员 AWS Transfer Family。它是一种安全的传输服务，可用于通过 SFTP 将文件传入和传出 AWS 存储服务。您可以使用亚马逊简单存储服务 ( AWS Transfer for SFTP Amazon S3) Service 或亚马逊弹性文件系统 (Amazon EFS)。此模式使用了 Amazon S3 存储。

## 先决条件和限制
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的.
+ 现有 SFTP 域名或固定 SFTP IP。

**限制**
+ 当前，您可在一个请求中传输的最大对象为 5 GiB。对于大于 100 MiB 的文件，可以考虑使用 [Amazon S3 分段上传](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)。

## 架构
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-architecture"></a>

**源技术堆栈**
+ 本地平面文件或数据库转储文件。

**目标技术堆栈**
+ AWS Transfer for SFTP
+ Amazon S3
+ Amazon Virtual Private Cloud(Amazon VPC)
+ AWS Identity and Access Management (IAM) 角色和策略
+ 弹性 IP 地址
+ 安全组
+ Amazon CloudWatch 日志（可选）

**目标架构 **

![\[使用适用于 SFTP 的 AWS Transfer 将本地 SFTP 服务器迁移至 AWS 云。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/ec0a905c-edef-48ba-9b5e-ea4a4040d320/images/f42aa711-bfe0-4ac6-9f66-5c18a1dd1c7a.png)


**自动化和扩展**

要自动执行此模式的目标架构，请使用随附的 CloudFormation 模板：
+ `amazon-vpc-subnets.yml` 预置具有两个公有子网和两个私有子网的虚拟私有云（VPC）。
+ `amazon-sftp-server.yml` 预置 SFTP 服务器。
+ `amazon-sftp-customer.yml` 添加用户。

## 工具
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-tools"></a>

**AWS 服务**
+ [Amazon CloudWatch Lo](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) gs 可帮助您集中所有系统和应用程序的日志， AWS 服务 这样您就可以监控它们并安全地将其存档。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。此模式使用了 Amazon S3 作为文件传输存储系统。
+ [AWS Transfer for SFTP](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html)帮助您通过 SFTP 协议将文件传入和传出 AWS 存储服务。
+ [Amazon Virtual Private Cloud（亚马逊 VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)可帮助您将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络，并具有使用 AWS的可扩展基础设施的优势。

## 操作说明
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-epics"></a>

### 创建 VPC
<a name="create-a-vpc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建带有子网的 VPC。 | 打开 [Amazon VPC 控制台](https://console.aws.amazon.com/vpc/)。创建具有两个公共子网的虚拟私有云（VPC）。（第二个子网具有高可用性。)—或者—您可以在[CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)中部署附加的 CloudFormation 模板`amazon-vpc-subnets.yml`，以自动执行此长篇故事中的任务。 | 开发人员、系统管理员 | 
| 添加互联网网关。 | 预置互联网网关，并将其连接至 VPC。 | 开发人员、系统管理员 | 
| 迁移现有 IP。 | 将现有 IP 连接至弹性 IP 地址。您可从地址池创建弹性 IP 地址，并使用该地址。 | 开发人员、系统管理员 | 

### 预置 SFTP 服务器
<a name="provision-an-sftp-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 SFTP 服务器。 | 打开 [AWS Transfer Family 控制台](https://console.aws.amazon.com/transfer/)。按照 AWS Transfer Family 文档中为[服务器创建面向 Internet 的终端节点中的说明，创建带有面向](https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#create-internet-facing-endpoint)互联网的终端节点的 SFTP 服务器。对于**端点类型**，请选择 **VPC 托管**。对于**访问**，请选择**面向 Internet**。对于 **VPC**，请选择您在上一操作中创建的 VPC。—或者—您可以在[CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)中部署附加的 CloudFormation 模板`amazon-sftp-server.yml`，以自动执行此长篇故事中的任务。 | 开发人员、系统管理员 | 
| 迁移域名。 | 将现有域名附加至自定义主机名。如果正在使用新域名，请使用 **Amazon Route 53 DNS** 别名。对于现有域名，请选择**其他 DNS**。有关更多信息，请参阅 AWS Transfer Family 文档中的[使用自定义主机名](https://docs.aws.amazon.com/transfer/latest/userguide/requirements-dns.html)。 | 开发人员、系统管理员 | 
| 添加 CloudWatch 日志角色。 | （可选）如果要启用 CloudWatch 日志记录，请使用 CloudWatch 日志 API 操作创建一个`Transfer`角色`logs:CreateLogGroup``logs:CreateLogStream`、` logs:DescribeLogStreams`、和`logs:PutLogEvents`。有关更多信息，请参阅 AWS Transfer Family 文档 CloudWatch中的[使用记录活动](https://docs.aws.amazon.com/transfer/latest/userguide/monitoring.html#monitoring-enabling)。 | 开发人员、系统管理员 | 
| 保存并提交。 | 选择**保存**。对于**操作**，请选择**启动**，然后等待 SFTP 服务器的创建状态为**联机**。 | 开发人员、系统管理员 | 

### 将弹性 IP 地址映射至 SFTP 服务器
<a name="map-elastic-ip-addresses-to-the-sftp-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 停止服务器，以便修改设置。 | 在 [AWS Transfer Family 控制台](https://console.aws.amazon.com/transfer/)上，选择**服务器**，然后选择您创建的 SFTP 服务器。对于**操作**，请选择**停止**。当服务器处于离线状态时，选择**编辑**以修改其设置。 | 开发人员、系统管理员 | 
| 选择可用区和子网。 | 在**可用区**部分中，为您的 VPC 选择可用区和子网。 | 开发人员、系统管理员 | 
| 添加弹性 IP 地址。 | 对于**IPv4 地址**，为每个子网选择一个弹性 IP 地址，然后选择**保存**。 | 开发人员、系统管理员 | 

### 添加用户
<a name="add-users"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为用户访问 S3 存储桶创建 IAM 角色。 | 为 `Transfer` ****创建 IAM 角色，并添加将 S3 存储桶名称作为资源的 ` s3:ListBucket`、` s3:GetBucketLocation` 和 `s3:PutObject`。有关更多信息，请参阅 AWS Transfer Family 文档中的[创建 IAM 角色和策略](https://docs.aws.amazon.com/transfer/latest/userguide/requirements-roles.html)。—或者—您可以在[CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)中部署附加的 CloudFormation 模板`amazon-sftp-customer.yml`，以自动执行此长篇故事中的任务。 | 开发人员、系统管理员 | 
| 创建 S3 存储桶。 | 为应用程序创建 S3 存储桶。 | 开发人员、系统管理员 | 
| 创建可选文件夹。 | （可选）如果您想将用户的文件单独存储在特定的 Amazon S3 文件夹中，则根据需要添加文件夹。 | 开发人员、系统管理员 | 
| 创建 SSH 公有密钥。 | 要创建 SSH 密钥对，请参阅 AWS Transfer Family 文档中的[生成 SSH 密钥](https://docs.aws.amazon.com/transfer/latest/userguide/key-management.html#sshkeygen)。 | 开发人员、系统管理员 | 
| 添加用户。 | 在 [AWS Transfer Family 控制台](https://console.aws.amazon.com/transfer/)上，选择**服务器**，选择您创建的 SFTP 服务器，然后选择**添加用户**。对于**主目录**，请选择您创建的 S3 存储桶。对于**SSH 公有密钥**，请输入 SSH 密钥对的 SSH 公有密钥部分。为 SFTP 服务器添加用户，然后选择**添加**。 | 开发人员、系统管理员 | 

### 测试 SFTP 服务器。
<a name="test-the-sftp-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 更新安全组。 | 在 SFTP 服务器的**安全组**部分中，添加测试计算机的 IP 以获得 SFTP 访问权限。 | 开发者版 | 
| 使用 SFTP 客户端实用程序测试服务器。 | 使用任何 SFTP 客户端实用程序测试文件传输功能。有关客户端和说明的列表，请参阅文档中的[使用客户端传输 AWS Transfer Family 文件](https://docs.aws.amazon.com/transfer/latest/userguide/transfer-file.html)。 | 开发者版 | 

## 相关资源
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-resources"></a>
+ [AWS Transfer Family 用户指南](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html)
+ [Amazon S3 用户指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)
+ Amazon EC2 文档中的@@ [弹性 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)

## 附件
<a name="attachments-ec0a905c-edef-48ba-9b5e-ea4a4040d320"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/ec0a905c-edef-48ba-9b5e-ea4a4040d320/attachments/attachment.zip)

# 使用 AWS 应用程序迁移服务将本地虚拟机迁移到 Amazon EC2
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service"></a>

*Thanh Nguyen，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-summary"></a>

就应用程序迁移而言，组织可以采取不同的方法将应用程序服务器从本地环境重新托管（直接迁移）至 Amazon Web Services (AWS) Cloud。一种方法是配置新的亚马逊弹性计算云 (Amazon EC2) 实例，然后从头开始安装和配置应用程序。另一种方法是通过第三方或 AWS 原生迁移服务同时迁移多台服务器。

此模式概述了使用 AWS 应用程序迁移服务将支持的虚拟机 (VM) 迁移到 AWS 云上的 Amazon EC2 实例的步骤。您可以使用此模式中的方法，手动迁移一个或多个虚拟机（逐一），还可以根据概述的步骤创建适当的自动化脚本执行自动迁移。

## 先决条件和限制
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-prereqs"></a>

**先决条件**
+ 支持应用程序迁移服务的 AWS 区域的有效 Amazon Web Services account
+ 通过使用 AWS Direct Connect 或虚拟专用网络 (VPN) 的私有网络，或者通过互联网实现源 EC2 服务器和目标服务器之间的网络连接

**限制**
+ 有关支持区域的最新列表，请参阅[支持的 AWS 区域](https://docs.aws.amazon.com/mgn/latest/ug/supported-regions.html)。
+ 有关支持的操作系统的列表，请参阅 [Amazon](https://aws.amazon.com/ec2/faqs/) 的 “[支持的操作系统](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html)” 和 “*常规*” 部分 EC2 FAQs。

## 架构
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-architecture"></a>

**源技术堆栈**
+ 运行 Amazon 支持的操作系统的物理、虚拟或云托管服务器 EC2

**目标技术堆栈**
+ 与源虚拟机运行相同操作系统的 Amazon EC2 实例
+ Amazon Elastic Block Store（Amazon EBS）

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

下图显示了解决方案的高级架构以及主要组件。本地数据中心中存在带有本地磁盘的虚拟机。在 AWS 上，有一个带有复制服务器的暂存区和一个带有用于测试和切换的 EC2 实例的迁移资源区域。两个子网都包含 EBS 卷。

![\[用于将支持的虚拟机迁移到 AWS 云上的 Amazon EC2 实例的主要组件。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/58c8bafd-9a6d-42d4-a5ce-08c4b9a286a3/images/f8396fad-7ee9-4f75-800f-e819f509e151.png)


1. 初始化 AWS Application Migration Service。

1. 设置暂存区域服务器配置和报告，包括暂存区域资源。

1. 在源服务器上安装代理，并使用连续块级数据复制（压缩和加密）。

1. 自动编排和系统转换，以缩短割接窗口。

**网络架构**

下图从联网角度显示了此解决方案的高级架构和主要组件，包括本地数据中心和 AWS 主要组件之间通信所需协议和端口。

![\[网络组件，包括用于数据中心与 AWS 之间的通信的协议和端口。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/58c8bafd-9a6d-42d4-a5ce-08c4b9a286a3/images/2f594daa-ddba-4841-8785-6067e8d83c2f.png)


## 工具
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-tools"></a>
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html) 可帮助您将应用程序更换主机（*直接迁移*）到 Amazon Web Services Cloud 中，无需更改且停机时间最短。

## 最佳实践
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-best-practices"></a>
+ 在向目标 EC2 实例的直接转换完成之前，请勿使源服务器离线或重新启动。
+ 为用户提供充足的机会，使其在目标服务器上执行用户验收测试 (UAT)，以识别和解决任何问题。理想情况下，此测试至少应在割接前两周开始。
+ 经常在应用程序迁移服务控制台上监控服务器复制状态，以便尽早发现问题。
+ 使用临时的 AWS Identity and Access Management (IAM) 凭证安装代理，而非永久 IAM 用户凭证。

## 操作说明
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-epics"></a>

### 生成 AWS 凭证
<a name="generate-aws-credentials"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS Replication Agent IAM 角色。 | 使用 Amazon Web Services Account 的管理权限登录。在 AWS Identity and Access Management (IAM) [控制台](https://console.aws.amazon.com/iam/)，创建 IAM 角色：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html) | AWS 管理员、迁移工程师 | 
| 生成临时安全凭证。 | 在安装了 AWS 命令行界面（AWS CLI）的计算机上，使用管理权限登录。或者（在支持的 AWS 区域内），在 AWS 管理控制台上，使用 AWS 账户的管理权限登录，然后打开 AWS CloudShell。使用以下命令生成临时凭证，将 `<account-id>` 替换为 Amazon Web Services account ID。`aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/MGN_Agent_Installation_Role --role-session-name mgn_installation_session_role`从命令输出，复制 `AccessKeyId`、** **`SecretAccessKey` 以及** **`SessionToken` 的值。** **将其存储于安全的地方，以备后用。这些临时凭证将在一小时后过期。如果一小时后需要凭证，请重复前面的步骤。 | AWS 管理员、迁移工程师 | 

### 初始化应用程序迁移服务，并创建复制设置模板
<a name="initialize-application-migration-service-and-create-the-replication-settings-template"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 初始化此服务。 | 在控制台上，使用 Amazon Web Services Account 的管理权限登录。选择**应用程序迁移服务**，然后选择 **开始使用**。 | AWS 管理员、迁移工程师 | 
| 创建并配置复制设置模板。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html)Application Migration Service 将自动创建促进数据复制和启动迁移服务器所需所有 IAM 角色。 | AWS 管理员、迁移工程师 | 

### 在源计算机上安装 AWS Replication Agents
<a name="install-aws-replication-agents-on-source-machines"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备好所需 AWS 凭证。 | 在源服务器上运行安装程序文件时，需要输入之前生成的临时凭证，包括 `AccessKeyId`、`SecretAccessKey` 和 `SessionToken`。 | 迁移工程师、AWS 管理员 | 
| 对于 Linux 服务器，请安装代理。 | 复制安装程序命令，登录至源服务器，并运行安装程序。有关详细说明，请参阅 [AWS 文档](https://docs.aws.amazon.com/mgn/latest/ug/linux-agent.html)。 | AWS 管理员、迁移工程师 | 
| 对于 Windows 服务器，请安装代理。 | 将安装程序文件下载至每台服务器，然后运行安装程序命令。有关详细说明，请参阅 [AWS 文档](https://docs.aws.amazon.com/mgn/latest/ug/windows-agent.html)。 | AWS 管理员、迁移工程师 | 
| 等待初始数据复制完成。 | 代理完成安装后，源服务器将出现在 Application Migration Service 控制台的**源服务器**部分。服务器正在执行初始数据复制，请稍候。 | AWS 管理员、迁移工程师 | 

### 配置启动设置
<a name="configure-launch-settings"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 指定服务器的详细信息。 | 在 Application Migration Service 控制台上，选择**源服务器**部分，然后从列表中选择服务器名称，以访问服务器详细信息。 | AWS 管理员、迁移工程师 | 
| 配置启动设置。 | 选择**启动设置**选项卡。您可以配置各种设置，包括常规启动设置和 EC2 启动模板设置。有关详细说明，请参阅 [AWS 文档](https://docs.aws.amazon.com/mgn/latest/ug/launch-settings.html)。 | AWS 管理员、迁移工程师 | 

### 执行测试
<a name="perform-a-test"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试源服务器。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html)将启动服务器。 | AWS 管理员、迁移工程师 | 
| 验证测试是否成功完成。 | 测试服务器完全启动后，页面上的**警报**状态将显示每台服务器**已启动**。 | AWS 管理员、迁移工程师 | 
| 测试服务器。 | 执行测试服务器测试，以确保其按预期运行。 | AWS 管理员、迁移工程师 | 

### 计划并执行割接
<a name="schedule-and-perform-a-cutover"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 计划割接时段。 | 与相关团队计划适当的割接时间表。 | AWS 管理员、迁移工程师 | 
| 执行割接。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html)源服务器的**迁移生命周期**将更改为**正在进行割接**。 | AWS 管理员、迁移工程师 | 
| 验证割接是否成功完成。 | 割接服务器完全启动后，**源服务器**页面上的**警报**状态将显示每台服务器**已启动**。 | AWS 管理员、迁移工程师 | 
| 测试服务器。 | 执行割接服务器测试，以确保其按预期运行。 | AWS 管理员、迁移工程师 | 
| 完成割接。 | 选择**测试并割接**，然后选择**完成割接**以完成迁移过程。 | AWS 管理员、迁移工程师 | 

## 相关资源
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-resources"></a>
+ [AWS Application Migration Service](https://aws.amazon.com/application-migration-service/)
+ [AWS Application Migration Service 用户指南](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)

# 使用以下命令将小型数据集从本地迁移到 Amazon S3 AWS SFTP
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp"></a>

*Charles Gibson 和 Sergiy Shevchenko，Amazon Web Services*

## Summary
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-summary"></a>

此模式描述了如何 AWS Transfer for SFTP 使用AWS SFTP() 将小型数据集（5 TB 或更少）从本地数据中心迁移到亚马逊简单存储服务 (Amazon S3)。 数据可以是数据库转储文件，也可以是平面文件。

## 先决条件和限制
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 在您的数据中心和之间建立的 AWS Direct Connect 链接 AWS

**限制**
+ 数据文件必须小于 5 TB 对于超过 5 TB 的文件，您可以分段上传至 Amazon S3 或选择其他数据传输方法。 

## 架构
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-architecture"></a>

**源技术堆栈**
+ 本地平面文件或数据库转储文件。

**目标技术堆栈**
+ Amazon S3

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

![\[Diagram showing data flow from on-premises servers to AWS 云 services via Direct Connect and VPN.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/a9c016ff-3e68-4714-ac51-46cb4727397a/images/5c5bb9ea-d552-44e8-8d0d-df341f84f55d.png)


## 工具
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-tools"></a>
+ [AWS SFTP](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html)— 允许使用安全文件传输协议 (SFTP) 将文件直接传入和传出 Amazon S3。
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)— 建立从您的本地数据中心到的专用网络连接 AWS。
+ [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) — AWS PrivateLink 无需互联网网关、网络地址转换 (NAT) 设备、VPN 连接或 Direct Connect 连接，即可将 VPC 私密连接到支持的 AWS 服务 和由其提供支持的 VPC 终端节点服务。VPC 中的实例无需公有 IP 地址便可与服务中的资源进行通信。

## 操作说明
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 记录当前 SFTP 要求。 |  | 应用程序所有者，系统管理员 | 
| 识别身份验证要求。 | 要求可能包括基于密钥的身份验证、用户名或密码或身份提供者（IdP）。 | 应用程序所有者，系统管理员 | 
| 确定应用程序集成要求。 |  | 应用程序所有者 | 
| 确定需要服务的用户。 |  | 应用程序所有者 | 
| 确定 SFTP 服务器端点 DNS 名称。 |  | Networking | 
| 确定备份策略。 |  | 系统管理员、数据库管理员（如果传输了数据）  | 
| 确定应用程序迁移或割接策略。 |  | 应用程序所有者、系统管理员、数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在中创建一个或多个虚拟私有云 (VPCs) 和子网。 AWS 账户 |  | 应用程序所有者，AMS | 
| 创建安全组和网络访问控制列表（ACL）。 |  | 安全，联网，AMS | 
| 创建 Amazon S3 存储桶。 |  | 应用程序所有者，AMS | 
| 创建 AWS Identity and Access Management (IAM) 角色。 | 创建一个 IAM 策略，其中包括允许 AWS SFTP 访问您的 Amazon S3 存储桶的权限。此 IAM policy 确定您为 SFTP 用户提供的访问级别。创建另一个 IAM 策略以与之建立信任关系 AWS SFTP。 | 安全、AMS | 
| 关联已注册的域名（可选）。 | 如果您拥有自己的注册域，您可以将其与 SFTP 服务器关联。您可以将 SFTP 流量从域或子域路由到 SFTP 服务器端点。 | 联网、AMS | 
| 创建 SFTP 服务器。 | 指定服务用于对用户进行身份验证的身份提供程序类型。 | 应用程序所有者，AMS | 
| 打开 SFTP 客户端。 | 打开 SFTP 客户端并将连接配置为使用 SFTP 端点主机。 AWS SFTP 支持任何标准 SFTP 客户端。常用的 SFTP 客户端包括 OpenSSH、WinSCP、Cyberduck 和。 FileZilla您可以从 AWS SFTP 控制台获取 SFTP 服务器的主机名。 | 应用程序所有者，AMS | 

### 计划和测试
<a name="plan-and-test"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 计划应用程序迁移。 | 规划所需任何应用程序配置更改，设置迁移日期并确定测试安排。 | 应用程序所有者，AMS | 
| 测试基础设施。 | 在非生产环境中测试。 | 应用程序所有者，AMS | 

## 相关资源
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-resources"></a>

**参考**
+ [AWS Transfer for SFTP 用户指南](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html)
+ [AWS Direct Connect resources](https://aws.amazon.com/directconnect/resources/) 
+ [VPC 端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)

**教程和视频**
+ [AWS Transfer for SFTP （视频）](https://www.youtube.com/watch?v=wcnGez5PP1E)
+ [AWS Transfer for SFTP 用户指南](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html)
+ [AWS SA 白板- Direct Connect （视频）](https://www.youtube.com/watch?v=uP68iqyuqTg)

# 将本地 Oracle 数据库迁移到亚马逊上的 Oracle EC2
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2"></a>

*Baji Shaik 和 Pankaj Choudhary，Amazon Web Services*

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

此模式将引导您完成在亚马逊弹性计算云 (Amazon EC2) 实例上将本地 Oracle 数据库迁移到 Oracle 的步骤。它描述了两种迁移选项：使用 AWS 数据迁移服务 (AWS DMS) 或使用原生 Oracle 工具，例如 RMAN、数据泵导入/导出、可传输表空间和 Oracle。 GoldenGate

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

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心中的 Oracle 源数据库

**限制**
+ Amazon 必须支持目标操作系统 (OS) EC2。有关支持系统的完整列表，请参阅 [Amazon EC2 FAQs](https://aws.amazon.com/ec2/faqs/)。

**产品版本**
+ Oracle 10.2 和更高版本（对于版本 10.x）、11g 直至 12.2 版本以及 18c 版本（Enterprise、Standard、Standard One 和 Standard Two 版）。有关 AWS DMS 支持的最新版本列表，请参阅 AWS DMS 文档中[数据迁移来源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)中的 “本地和 Amazon EC2 实例数据库”。  

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

**源技术堆栈**
+ 本地 Oracle 数据库

**目标技术堆栈**
+ 亚马逊上的 Oracle 数据库实例 EC2

**目标架构**

![\[在亚马逊上为 Oracle 数据库设置复制。 EC2\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/66c98694-6580-4ffb-9f16-84de58cf8b07/images/386d5b14-8633-4ecc-98fb-59872de99d41.png)


**数据迁移架构**

*使用 AWS DMS：*

![\[EC2 使用 AWS DMS 将本地 Oracle 数据库迁移到亚马逊。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/66c98694-6580-4ffb-9f16-84de58cf8b07/images/14954066-d22b-486a-a432-265296752878.png)


*使用原生 Oracle 工具：*

![\[EC2 使用 Oracle 工具将本地 Oracle 数据库迁移到亚马逊。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/66c98694-6580-4ffb-9f16-84de58cf8b07/images/82ba5fcb-8640-45fa-b432-2702dedc0774.png)


## 工具
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2-tools"></a>
+ **AWS DMS – **[AWS Database Migration Service](https://docs.aws.amazon.com/dms/index.html) (AWS DMS) 支持多种不同的源数据库和目标数据库。有关支持的数据库版本和版本的信息，请参阅[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。 
+ **Oracle 原生工具-** RMAN、数据泵导入/导出、可传输表空间、Oracle GoldenGate                                                         

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

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
|  验证源数据库和目标数据库的版本。 |  | 数据库管理员 | 
|  识别目标操作系统的版本。 |  | 数据库管理员， SysAdmin | 
| 根据 Oracle 兼容性列表和容量要求，确定目标服务器实例的硬件要求。 |  | 数据库管理员， SysAdmin | 
| 识别存储需求（存储类型和容量）。 |  | 数据库管理员， SysAdmin | 
| 确定网络要求（延迟与带宽）。 |  | 数据库管理员， SysAdmin | 
| 根据容量、存储功能和网络功能选择正确的实例类型。 |  | 数据库管理员， SysAdmin | 
| 确定源数据库和目标数据库的 network/host 访问安全要求。 |  | 数据库管理员， SysAdmin | 
| 确定安装 Oracle 软件所需操作系统用户列表。 |  | 数据库管理员， SysAdmin | 
| 下载 AWS Schema Conversion Tool（AWS SCT）和驱动程序。 |  | 数据库管理员 | 
| 为工作负载创建 AWS SCT 项目，然后连接至源数据库。 |  | 数据库管理员 | 
| 生成用于创建对象（表、索引、序列等）的 SQL 文件。 |  | 数据库管理员 | 
| 确定备份策略。 |  | 数据库管理员， SysAdmin | 
| 确定可用性要求。 |  | 数据库管理员 | 
| 确定应用程序迁移/切换策略。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Amazon Web Services account 中创建虚拟私有云（VPC）和子网。 |  | SysAdmin | 
| 创建安全组和网络访问控制列表 (ACLs)。 |  | SysAdmin | 
| 配置并启动实 EC2 例。 |  | SysAdmin | 

### 安装 Oracle 软件
<a name="install-the-oracle-software"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建运行 Oracle 软件所需操作系统用户和组。 |  | 数据库管理员， SysAdmin | 
| 下载必要版本的 Oracle 软件。 |  |  | 
| 在 EC2 实例上安装 Oracle 软件。 |  | 数据库管理员， SysAdmin | 
| 使用 AWS SCT 生成的脚本创建表、主键、视图和序列等对象。 |  | 数据库管理员 | 

### 迁移数据 - 选项 1
<a name="migrate-data---option-1"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用原生 Oracle 工具或第三方工具迁移数据库对象和数据。 | Oracle 工具包括数据泵导入/导出、RMAN、可传输表空间和。 GoldenGate | 数据库管理员 | 

### 迁移数据 - 选项 2
<a name="migrate-data---option-2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定迁移方法。 |  | 数据库管理员 | 
| 使用 AWS DMS 控制台创建复制实例。 |  | 数据库管理员 | 
| 创建源和目标端点。 |  | 数据库管理员 | 
| 创建复制任务。 |  | 数据库管理员 | 
| 启用变更数据捕获 (CDC) 以捕获变更，从而进行持续复制。 |  | 数据库管理员 | 
| 运行复制任务和监控日志。 |  | 数据库管理员 | 
| 完全加载完成后，创建索引和外键等辅助对象。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序迁移策略。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序割接/切换策略。 |  | DBA、 SysAdmin、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭 AWS Secrets Manager 的临时资源。 |  | 数据库管理员， SysAdmin | 
| 查看和验证项目文档。 |  | DBA、 SysAdmin、应用程序所有者 | 
| 收集与迁移时间、手动与工具各自的百分比、成本节约等相关的指标。 |  | DBA、 SysAdmin、应用程序所有者 | 
| 关闭项目并提供反馈。 |  |  | 

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

**参考**
+ [将 Oracle 数据库迁移至 AWS 的策略](https://docs.aws.amazon.com/whitepapers/latest/strategies-migrating-oracle-db-to-aws/strategies-migrating-oracle-db-to-aws.html) 
+ [将 Oracle 数据库迁移至 AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/)
+ [亚马逊 EC2 网站](https://aws.amazon.com/ec2/)
+ [AWS DMS 网站](https://aws.amazon.com/dms/)
+ [AWS DMS 博客文章](https://aws.amazon.com/blogs/database/category/dms/)
+ [亚马逊 EC2 定价](https://aws.amazon.com/ec2/pricing/)
+ [在云计算环境内许可 Oracle 软件](http://www.oracle.com/us/corporate/pricing/cloud-licensing-070579.pdf)

**教程和视频**
+ [亚马逊入门 EC2](https://aws.amazon.com/ec2/getting-started/)
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/)
+ [Amazon 简介 EC2 -使用 AWS 实现弹性云服务器和托管（视频）](https://www.youtube.com/watch?v=TsRBftzZsQo) 

# 使用 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)

# 使用 AWS MGN 将 RHEL BYOL 系统迁移至 AWS License-Included 实例
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn"></a>

*Mike Kuznetsov，Amazon Web Services*

## Summary
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-summary"></a>

当您使用 AWS Application Migration Service (AWS MGN) 将工作负载迁移至 AWS 时，可能需要在迁移期间直接迁移（更换主机）您的 Red Hat Enterprise Linux (RHEL) 实例，并将许可从默认的自带许可（BYOL）模型更改为 AWS License Included (LI) 模型。AWS MGN 支持使用亚马逊机器映像（AMI） ID 的可扩展方法。本示例介绍了在大规模更换主机迁移期间，如何在 RHEL 服务器上完成许可证变更。它还解释如何更改已在 Amazon Elastic Compute Cloud (Amazon EC2) 上运行的 RHEL 系统许可。

## 先决条件和限制
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-prereqs"></a>

**先决条件**
+ 访问目标 Amazon Web Services account 
+ AWS MGN 已在目标 Amazon Web Services account 和区域中初始化，以进行迁移（如果您已经从本地系统迁移至 AWS，则无需这样做）
+ 具有有效 RHEL 许可的源 RHEL 服务器

## 架构
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-architecture"></a>

此示例介绍了两种场景：
+ 使用 AWS MGN 将系统从本地直接迁移至 AWS LI 实例。对于这种情况，请按照第一篇操作说明（*迁移至 LI 实例 - 选项 1*）和第三篇操作说明中的说明进行操作。
+ 将之前在 Amazon EC2 上运行的 RHEL 系统的许可模式从 BYOL 更改为 LI。对于这种情况，请按照第二篇操作说明（*迁移至 LI 实例*-*选项 2*）和第三篇操作说明中进行操作。

**注意**  
第三篇操作说明涉及重新配置新的 RHEL 实例，使其使用 AWS 提供的 Red Hat Update Infrastructure（RHUI）服务器。这两个场景的进程相同。

## 工具
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-tools"></a>

**Amazon Web Services**
+ [AWS Application Migration Service (AWS MGN)](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html) 可帮助您将应用程序更换主机（直接迁移）到 Amazon Web Services Cloud 中，无需更改且停机时间最短。

## 操作说明
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-epics"></a>

### 迁移到 LI 实例 - 选项 1（适用于本地 RHEL 系统）
<a name="migrate-to-li-instance---option-1-for-an-on-premises-rhel-system"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在目标区域中查找 RHEL AWS LI 实例 AMI ID。 | 访问 [Amazon Web Services Marketplace](https://aws.amazon.com/marketplace) 或使用 [Amazon EC2 console](https://console.aws.amazon.com/ec2/) 查找与 RHEL 源系统版本匹配的 RHEL AMI ID（例如 RHEL-7.7），并写入 AMI I。在 Amazon EC2 控制台上 AMIs ，您可以使用以下搜索词之一进行筛选：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | 云管理员 | 
| 配置 AWS MGN 启动设置。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html)AWS MGN 现在将使用此版本启动模板来启动测试或直接割接实例。有关更多信息，请参阅 [AWS MGN 文档](https://docs.aws.amazon.com/mgn/latest/ug/ec2-launch.html)。 | 云管理员 | 
| 验证设置。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | 云管理员 | 
| 启动新的 LI 实例。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | 云管理员 | 

### 迁移到 LI 实例 - 选项 2（对于 RHEL BYOL EC2 实例）
<a name="migrate-to-li-instance---option-2-for-a-rhel-byol-ec2-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 RHEL BYOL EC2 实例迁移至 AWS LI 实例。 | 您可以将之前作为 BYOL 迁移至 AWS 的 RHEL 系统切换到 AWS LI 实例，方法是移动其磁盘（Amazon Elastic Block Store 卷）并将其连接到新的 LI 实例。若要进行此切换，请按照以下步骤操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | 云管理员 | 

### 将 RHEL 操作系统重新配置：为使用 AWS 提供的 RHUI — 这两个选项都是
<a name="reconfigure-rhel-os-to-use-aws-provided-rhui-ndash-both-options"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 Red Hat 订阅和许可中注销操作系统。 | 迁移并成功割接后，必须从 Red Hat 订阅中删除 RHEL 系统，以停止使用 Red Hat 许可证并避免双重计费。要从 Red Hat 订阅中删除 RHEL 操作系统，请按照 [Red Hat 订阅管理（RHSM）文档](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/installation_guide/chap-subscription-management-unregistering)中描述的流程进行操作。使用 CLI 命令： <pre>subscription-manager unregister</pre>您也可禁用订阅管理器插件，停止在每次 **yum** 调用时检查订阅状态。为此，请编辑配置文件 `/etc/yum/pluginconf.d/subscription-manager.conf`，并将参数 `enabled=1` 更改为 `enabled=0`。 | Linux 或系统管理员 | 
| 用 AWS 提供的 RHUI 替换旧更新配置（RHUI、Red Hat Satellite 网络、yum 存储库）。 | 您必须重新配置迁移的 RHEL 系统才可使用 AWS 提供的 RHUI 服务器。这样，您无需外部更新基础设施即可访问 AWS 区域 内的 RHUI 服务器。该更改涉及到以下过程：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html)以下是详细步骤和命令：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | Linux 或系统管理员 | 
| 验证配置。 | 在目标迁移实例上，验证新配置是否正确：<pre>sudo yum clean all <br />sudo yum repolist </pre> | Linux 或系统管理员 | 

## 相关资源
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-resources"></a>
+ [AWS Application Migration Service (AWS MGN) 用户指南](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)
+ [获取支持的 AWS RHUI 客户端软件包 IMDSv2](https://access.redhat.com/solutions/5009491)（红帽知识库文章）
+ [Amazon EC2 启动模板](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)（Amazon EC2 文档）

# 将本地微软 SQL Server 数据库迁移到亚马逊 EC2
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2"></a>

*Senthil Ramasamy，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-summary"></a>

此模式描述了如何将本地微软 SQL Server 数据库迁移到亚马逊弹性计算云 (亚马逊 EC2) 实例上的微软 SQL Server。它涵盖了两个迁移选项：使用 AWS Database Migration Service (AWS DMS) 或使用本机 Microsoft SQL Server 工具，例如备份和恢复、复制数据库向导或复制并附加数据库。

## 先决条件和限制
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ 亚马逊支持的操作系统 EC2 （有关支持的操作系统版本的完整列表，请参阅[亚马逊 EC2 FAQs](https://aws.amazon.com/ec2/faqs/)）
+ 本地数据中心的 Microsoft SQL Server 源数据库

**产品版本**
+ 对于本地和 Amazon EC2 实例数据库， AWS DMS 支持：
  + SQL Server 版本 2005、2008、2008R2、2012、2014、2016、2017 和 2019 
  + Enterprise、Standard、Workgroup、Developer 和 Web 版本
+ 有关受支持版本的最新列表，请参阅[使用 Microsoft SQL Server 数据库作为 AWS DMS的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.SQLServer.html)。  

## 架构
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-architecture"></a>

**源技术堆栈**
+ 本地 Microsoft SQL Server 数据库

**目标技术堆栈**
+  EC2 实例上的微软 SQL Server 数据库

**目标架构**

![\[两个可用区的实例上的主实例和备用 Microsoft SQL Server EC2 实例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f0a155b3-4977-4e1f-8332-89eab29c1e25/images/53e2c27d-ceb4-4d88-a022-93dd0b343eaf.png)


**数据迁移架构**
+ 使用 AWS DMS

![\[使用 AWS DMS 将本地 SQL Server 数据迁移到 EC2 实例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f0a155b3-4977-4e1f-8332-89eab29c1e25/images/1cbe32ea-e285-4cac-9153-4428bad9b229.png)

+ 使用原生 SQL Server 工具 

![\[使用本地 SQL Server 工具将本地 SQL Server 数据迁移到 EC2 实例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f0a155b3-4977-4e1f-8332-89eab29c1e25/images/ad2caf54-7399-4038-91a3-acba9fa7da29.png)


## 工具
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/) 可帮助您将数据迁移到广泛使用的商业和开源数据库，包括 Oracle、SQL Server、MySQL 和 PostgreSQL。您可以使用将数据迁移 AWS DMS 到 AWS 云、本地实例之间（通过 AWS 云 设置），或者在云和本地设置的组合之间迁移数据。
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。
+ 原生 Microsoft SQL Server 工具包括备份和恢复、复制数据库向导以及复制和附加数据库。

## 操作说明
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库版本。 |  | 数据库管理员 | 
| 确定目标操作系统版本。 |  | 数据库管理员、系统管理员 | 
| 根据 Microsoft SQL Server 兼容性列表和容量要求确定目标服务器实例的硬件要求。 |  | 数据库管理员、系统管理员 | 
| 确定类型和容量的存储要求。 |  | 数据库管理员、系统管理员 | 
| 确定网络需求，包括延迟和带宽。 |  | 数据库管理员、系统管理员 | 
| 根据容量、存储功能和网络功能选择 EC2 实例类型。 |  | 数据库管理员、系统管理员 | 
| 确定源数据库和目标数据库的网络和主机访问安全要求。 |  | 数据库管理员、系统管理员 | 
| 确定安装 Microsoft SQL 软件所需用户列表。 |  | 数据库管理员、系统管理员 | 
| 确定备份策略。 |  | 数据库管理员 | 
| 确定可用性要求。 |  | 数据库管理员 | 
| 确定应用程序迁移和割接策略。 |  | 数据库管理员、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）和子网。 |  | 系统管理员 | 
| 创建安全组和网络访问控制列表（ACL）。 |  | 系统管理员 | 
| 配置并启动实 EC2 例。 |  | 系统管理员 | 

### 安装软件
<a name="install-the-software"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Microsoft SQL Server 软件创建所需用户和组。 |  | 数据库管理员、系统管理员 | 
| 下载 Microsoft SQL Server 软件。 |  | 数据库管理员、系统管理员 | 
| 在 EC2 实例上安装 Microsoft SQL Server 软件并配置服务器。 |  | 数据库管理员、系统管理员 | 

### 迁移数据 - 选项 1
<a name="migrate-the-data---option-1"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用原生 Microsoft SQL Server 工具或第三方工具迁移数据库对象和数据。 | 工具包括备份和恢复、Copy Database Wizard 以及复制与附加数据库。有关更多信息，请参阅《[将 Microsoft SQL Server 数据库迁移到 AWS 云](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/)》指南。 | 数据库管理员 | 

### 迁移数据 - 选项 2
<a name="migrate-the-data---option-2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS DMS 迁移数据。 | 有关使用的更多信息 AWS DMS，请参阅 “[相关资源](#migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-resources)” 部分中的链接。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序迁移策略。 | 使用 AWS Schema Conversion Tool (AWS SCT) 分析和修改嵌入在应用程序源代码中的 SQL 代码。 | 数据库管理员、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序切换策略。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭所有临时 AWS 资源。 | 临时资源包括 AWS DMS 复制实例和的 EC2 实例 AWS SCT。 | 数据库管理员、系统管理员 | 
| 查看和验证项目文档。 |  | 数据库管理员、应用程序所有者、系统管理员 | 
| 收集与迁移时间、手动与工具占比、成本节约等相关的指标。 |  | 数据库管理员、应用程序所有者、系统管理员 | 
| 关闭项目并提供反馈。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-resources"></a>

**参考**
+ [将微软 SQL Server 数据库迁移到 AWS 云](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/)
+ [Amazon EC2](https://aws.amazon.com/ec2/)
+ [Amazon EC2 FAQs](https://aws.amazon.com/ec2/faqs/)
+ [亚马逊 EC2 定价](https://aws.amazon.com/ec2/pricing/)
+ [AWS Database Migration Service](https://aws.amazon.com/dms/)
+ [微软产品开启 AWS](https://aws.amazon.com/windows/products/)
+ [微软许可开启 AWS](https://aws.amazon.com/windows/resources/licensing/)
+ [微软 SQL Server 开启 AWS](https://aws.amazon.com/windows/products/sql/)

**教程和视频**
+ 亚马逊@@ [入门](https://aws.amazon.com/ec2/getting-started/) EC2
+ [https://aws.amazon.com/dms/getting-started/](https://aws.amazon.com/dms/getting-started/) 入门AWS Database Migration Service
+ [将亚马逊 EC2 实例加入您的 Simple AD 活动目录](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/simple_ad_join_instance.html)
+ [将 Amazon EC2 实例加入您的 AWS Managed Microsoft AD 活动目录](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_join_instance.html)
+ [AWS Database Migration Service](https://www.youtube.com/watch?v=zb4GcjEdl8U)（视频）
+ [Amazon 简介 EC2 — 弹性云服务器和托管 AWS](https://www.youtube.com/watch?v=TsRBftzZsQo)（视频）

# 在 Amazon Web Services Cloud 中重新托管本地工作负载：迁移核对清单
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist"></a>

*Srikanth Rangavajhala，Amazon Web Services*

## Summary
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-summary"></a>

在 Amazon Web Services (AWS) Cloud 中重新托管本地工作负载涉及以下迁移阶段：规划、预发现、发现、构建、测试和割接。该模式概述了各个阶段及其相关任务。这些任务进行了高层描述，支持大约 75% 的应用程序工作负载。您可以在敏捷冲刺周期中，用两到三周的时间实施这些任务。

您应该与迁移团队和顾问一起审查这些任务。审核后，您可收集意见，根据需要删除或重新评估任务以满足您的要求，还可以修改其他任务以支持您的投资组合中至少 75% 的应用程序工作负载。然后，您可使用 Atlassian Jira 或 Rally Software 等敏捷项目管理工具导入任务，将其分配至资源并跟踪您的迁移活动。 

该模式假设您正在使用 [AWS Cloud Migration Factory](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/solution-overview.html) 来重新托管工作负载，但您可使用自己选择的迁移工具。

Amazon Macie 可以帮助识别知识库中的敏感数据，这些数据以数据来源、模型调用日志和提示信息的形式存储在 Amazon Simple Storage Service（Amazon S3）存储桶中。有关更多信息，请参阅 [Macie 文档](https://docs.aws.amazon.com/macie/latest/user/data-classification.html)。

## 先决条件和限制
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-prereqs"></a>

**先决条件**
+ 用于跟踪迁移任务的项目管理工具（例如 Atlassian Jira 或 Rally Software）
+ 用于在 AWS 上重新托管工作负载的迁移工具（例如 [Cloud Migration Factory](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/solution-overview.html)）

## 架构
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-architecture"></a>

**源平台  **
+ 本地源堆栈（包括技术、应用程序、数据库和基础设施）  

**目标平台**
+ Amazon Web Services Cloud 目标堆栈（包括技术、应用程序、数据库和基础设施） 

**架构**

下图说明了使用 Cloud Migration Factory 和 AWS Application Migration Service 进行重新托管（发现服务器并将其从本地源环境迁移到 AWS）。

![\[使用 Cloud Migration Factory 和 Application Migration Service 在 AWS 上重新托管服务器\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/8e2d2d72-30cc-4e98-8abd-ac2ef95e599b/images/735ad65b-2646-4803-82c9-f7f93369b3a5.png)


## 工具
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-tools"></a>
+ 您可使用您选择的迁移和项目管理工具。

## 操作说明
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-epics"></a>

### 规划阶段
<a name="planning-phase"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 整理发现前的待办事项。 | 与部门领导和应用程序所有者一起召开发现前待办事项整理工作会议。  | 项目经理、敏捷 Scrum 领导者 | 
|  召开冲刺计划工作会话。 | 作为范围界定练习，在冲刺和波次之间分发您想要迁移的应用程序。 | 项目经理、敏捷 Scrum 领导者 | 

### 发现前阶段
<a name="pre-discovery-phase"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确认应用程序知识。 | 确认并记录应用程序所有者及其对应用程序的了解。确定是否还有其他负责技术问题关键人物。 | 迁移专家（面试官） | 
| 确定应用程序合规要求。 | 与应用程序所有者确认该应用程序不必遵守支付卡行业数据安全标准 (PCI DSS)、萨班斯-奥克斯利法案 (SOX)、个人身份信息（PII）或其他标准的要求。如果存在合规性要求，团队必须完成对将迁移的服务器的合规性检查。 | 迁移专家（面试官） | 
| 确认生产版本的要求。 | 向应用程序所有者或技术联系人确认将迁移的应用程序发布到生产环境的要求（例如发布日期和停机时间）。 | 迁移专家（面试官） | 
| 获取服务器列表。 | 获取与此目标应用程序关联的服务器列表。 | 迁移专家（面试官） | 
| 获取显示当前状态的逻辑图。 | 从企业架构师或应用程序所有者处获取应用程序的当前状态图。 | 迁移专家（面试官） | 
| 创建显示目标状态的逻辑图。 | 创建应用程序的逻辑图，显示 AWS 上的目标架构。该图应说明服务器、连接性和映射因素。 | 企业架构师、企业主 | 
| 获取服务器信息。 | 收集与应用程序关联的服务器相关信息，包括其配置详细信息。 | 迁移专家（面试官） | 
| 将服务器信息添加至发现模板中。 | 将详细的服务器信息添加到应用程序发现模板 `mobilize-application-questionnaire.xlsx` 中（有关此模式，请参阅附件中的）。此模板包括所有与应用程序相关的安全、基础设施、操作系统和联网详细信息。 | 迁移专家（面试官） | 
| 发布应用程序发现模板。 | 与应用程序所有者和迁移团队共享应用程序发现模板，以便共同访问和使用。 | 迁移专家（面试官） | 

### 发现阶段
<a name="discovery-phase"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确认服务器列表。 | 与应用程序所有者或技术主管确认服务器列表以及每个服务器的用途。 | 迁移核对清单 | 
| 识别和添加服务器组。 | 识别服务器组（例如 Web 服务器或应用程序服务器），并将此信息添加到应用程序发现模板中。选择每台服务器应属于的应用程序层（Web、应用程序、数据库）。 | 迁移核对清单 | 
| 填写应用程序发现模板。 | 在迁移团队、应用程序团队和 AWS 的帮助下，完成应用程序发现模板详细信息。 | 迁移核对清单 | 
| 添加缺少的服务器详细信息（中间件和操作系统团队）。 | 要求中间件和操作系统 (OS) 团队检查应用程序发现模板并添加任何缺少的服务器详细信息，包括数据库信息。 | 迁移核对清单 | 
| 获取 inbound/outbound 流量规则（网络小组）。 | 请网络团队获取源服务器和目标服务器的 inbound/outbound 流量规则。网络团队还应添加现有的防火墙规则，将其导出为安全组格式，并将现有的负载均衡器添加到应用程序发现模板中。 | 迁移核对清单 | 
| 确定所需标记。 | 确定应用程序标签要求。 | 迁移核对清单 | 
| 创建防火墙请求详细信息。 | 捕获并过滤与应用程序通信所需防火墙规则。  | 迁移专家、解决方案架构师、网络主管  | 
| 更新 EC2 实例类型。 | 根据基础设施和服务器要求，更新要在目标环境中使用的亚马逊弹性计算云 (Amazon EC2) 实例类型。  | 迁移专家、解决方案架构师、网络主管 | 
| 确定当前状态图。 | 识别或创建显示应用程序当前状态图表。此图表将用于信息安全 (InfoSec) 请求。  | 迁移专家、解决方案架构师 | 
| 完成未来状态图。 | 完成显示应用程序未来（目标）状态的示意图。此图表也将在 InfoSec 请求中使用。  | 迁移专家、解决方案架构师 | 
| 创建防火墙或安全组服务请求。 | 创建防火墙或安全组服务请求（用于开发/QA、预生产和生产）。如果您使用的是 Cloud Migration Factory，请包括特定于复制的端口（如果它们尚未打开）。  | 迁移专家、解决方案架构师、网络主管 | 
| 查看防火墙或安全组请求（InfoSec 团队）。 | 在此步骤中， InfoSec 团队将审查并批准在上一步中创建的防火墙或安全组请求。  | InfoSec 工程师，迁移专家 | 
| 实施防火墙安全组请求（网络小组）。 | 在 InfoSec 团队批准防火墙请求后，网络团队将实施所需的 inbound/outbound 防火墙规则。  | 迁移专家、解决方案架构师、网络主管 | 

### 构建阶段（在开发/QA、预生产和生产环境中重复执行）
<a name="build-phase-repeat-for-development-qa-pre-production-and-production-environments"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 导入应用程序与服务器数据。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist.html)如果您没有使用 Cloud Migration Factory，请按照说明设置迁移工具。 | 迁移专家、云管理员 | 
| 检查源服务器先决条件。 | 连接范围内的源服务器以验证先决条件，例如 TCP 端口 1500、TCP 端口 443、根卷可用空间、.NET Framework 版本以及其他参数。这些是复制要求。有关更多信息，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#prerequisites-2)。 | 迁移专家、云管理员 | 
| 创建安装复制代理服务请求。 | 创建服务请求，以在范围内的服务器上安装复制代理以进行开发/QA、预生产或生产。 | 迁移专家、云管理员 | 
| 安装复制代理。 | 在开发/QA、预生产或生产计算机范围内源服务器上安装复制代理。有关更多信息，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#install-the-replication-agents)。 | 迁移专家、云管理员 | 
| 推送启动后脚本。 | Application Migration Service 支持启动后脚本，以帮助您在启动目标实例后自动执行操作系统级别的活动，例如安装或卸载软件。此步骤将启动后的脚本推送至 Windows 或 Linux 计算机，具体取决于确定要迁移的服务器。有关说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#push-the-post-launch-scripts)。 | 迁移专家、云管理员 | 
| 验证复制状态。 | 使用提供的脚本自动确认范围内源服务器的复制状态。该脚本每五分钟重复一次，直到给定波次中所有源服务器的状态更改为**健康**。有关说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#verify-the-replication-status)。 | 迁移专家、云管理员 | 
| 创建管理员用户。 | 从范围内的源服务器迁移割接至 AWS 后，可能需要源计算机上的本地管理员或 sudo 用户来故障排除任何问题。当身份验证服务器（例如 DC 或 LDAP 服务器）无法访问时，迁移团队会使用此用户登录目标服务器。有关此步骤的说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/step4.html#add-a-user-to-the-admin-group)。 | 迁移专家、云管理员 | 
| 验证启动模板。 | 验证服务器元数据，以确保其成功运行且没有无效数据。此步骤将验证测试与割接元数据。有关说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#validate-launch-template-1)。 | 迁移专家、云管理员 | 

### 测试阶段（在开发/QA、预生产和生产环境中重复测试）
<a name="test-phase-repeat-for-development-qa-pre-production-and-production-environments"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建服务请求。 | 为基础设施团队和其他团队创建服务请求，以将应用程序割接到开发/QA、预生产或生产实例。  | 迁移专家、云管理员 | 
| 配置负载均衡器（可选）。 | 使用 iRules 配置所需负载均衡器，例如[应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)或 [F5 负载均衡器](https://www.f5.com/resources/white-papers/load-balancing-101-nuts-and-bolts)。 | 迁移专家、云管理员 | 
| 启动实例进行测试。 | 在测试模式下，在 Application Migration Service 中启动给定波次的所有目标计算机。有关更多信息，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#launch-instances-for-testing)。 | 迁移专家、云管理员 | 
| 验证目标实例状态。 | 通过检查同一波中所有范围内源服务器的启动过程，来验证目标实例的状态。目标实例启动可能需要多达 30 分钟。您可以通过登录 Amazon EC2 控制台、搜索源服务器名称并查看 “**状态检查” 列来手动检查状态**。通过状态 **2/2 检查**表明该实例从基础设施的角度来看是健康的。 | 迁移专家、云管理员 | 
| 修改 DNS 条目。 | 修改域名系统（DNS）条目。(对于 Microsoft Windows 环境，请使用 `resolv.conf` 或 `host.conf`。) 将每个 EC2 实例配置为指向该主机的新 IP 地址。请确保本地服务器和 AWS 云服务器之间没有 DNS 冲突。此步骤和以下步骤是可选的，具体取决于托管服务器环境。 | 迁移专家、云管理员 | 
| 测试 EC2 实例与后端主机的连接。 | 使用已迁移服务器的域凭证查验登录信息。 | 迁移专家、云管理员 | 
| 更新 DNS A 记录。 | 更新每台主机的 DNS A 记录，使其指向新的亚马逊 EC2 私有 IP 地址。 | 迁移专家、云管理员 | 
| 更新 DNS CNAME 记录。 | 更新虚拟 IPs （负载均衡器名称）的 DNS CNAME 记录，使其指向 Web 和应用程序服务器的集群。 | 迁移专家、云管理员 | 
| 在适用环境中测试应用程序。 | 登录新 EC2 实例，在开发/QA、预生产和生产环境中测试应用程序。 | 迁移专家、云管理员 | 
| 标记为已准备好进行割接。 | 测试完成后，更改源服务器的状态以表明它已准备好进行割接，这样用户就可以启动割接实例。有关说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#mark-as-ready-for-cutover)。 | 迁移专家、云管理员 | 

### 割接阶段
<a name="cutover-phase"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建生产部署计划。 | 制定生产部署计划（包括回退计划）。 | 迁移专家、云管理员 | 
| 将停机时间告知运营团队。 | 将服务器的停机时间表告知运营团队。有些团队可能需要变更请求或服务请求 (CR/SR) 票证才能收到此通知。 | 迁移专家、云管理员 | 
| 复制生产机器。 | 使用 Application Migration Service 或其他迁移工具复制生产计算机。 | 迁移专家、云管理员 | 
| 关闭范围内源服务器。 | 验证源服务器的复制状态后，您可以关闭源服务器以停止从客户端应用程序到服务器的事务。可在割接窗口中关闭源服务器。有关更多说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#shut-down-the-in-scope-source-servers)。 | 云管理员 | 
| 启动割接实例。 | 在应用程序迁移服务中以割接模式启动给定波次的所有目标计算机。有关更多说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#launch-instances-for-cutover)。 | 迁移专家、云管理员 | 
| 检索目标实例 IPs。 | 检索 IPs 目标实例的。如果 DNS 更新在您的环境中是手动过程，则需要获取所有目标实例的新 IP 地址。有关更多说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-command-prompt.html#retrieve-the-target-instance-ip)。 | 迁移专家、云管理员 | 
| 验证目标服务器连接。 | 更新 DNS 记录后，使用主机名连接到目标实例以验证连接。有关更多说明，请参阅 [Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-command-prompt.html#verify-the-target-server-connections)。 | 迁移专家、云管理员 | 

## 相关资源
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-resources"></a>
+ [如何迁移](https://aws.amazon.com/migrate-modernize-build/cloud-migration/how-to-migrate/)
+ [AWS Cloud Migration Factory 实施指南](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/solution-overview.html)
+ [使用 Cloud Migration Factory 自动化大规模服务器迁移](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-factory-cloudendure/welcome.html)
+ [AWS Application Migration Service 用户指南](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)
+ [AWS 迁移加速计划](https://aws.amazon.com/migration-acceleration-program/)

## 附件
<a name="attachments-8e2d2d72-30cc-4e98-8abd-ac2ef95e599b"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/8e2d2d72-30cc-4e98-8abd-ac2ef95e599b/attachments/attachment.zip)

# 使用 Amazon 为 SQL Server Always On FCI 设置多可用区基础架构 FSx
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx"></a>

*Manish Garg、T.V.R.L.Phani Kumar Dadi、Nishad Mankar 和 RAJNEESH TYAGI，Amazon Web Services*

## Summary
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-summary"></a>

如果你需要快速迁移大量 Microsoft SQL Server Always On 故障转移群集实例 (FCIs)，这种模式可以帮助你最大限度地缩短配置时间。通过使用自动化和 Amazon FSx for Windows File Server，它可以减少手动工作、人为错误和部署大量集群所需的时间。

这种模式 FCIs 在 Amazon Web Services (AWS) 上的多可用区（多可用区）部署中为 SQL Server 设置基础设施。使用 AWS CloudFormation 模板可以自动配置此基础设施所需的 [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 服务。使用 PowerShell 命令在[亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 实例上安装 SQL Server 和创建集群节点。

该解决方案使用高度可用的多可用区 A [mazon f FSx or Windows](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html) 文件系统作为存储 SQL Server 数据库文件的共享见证。亚马逊 FSx 文件系统和托管 SQL Server 的 EC2 Windows 实例加入了适用于微软 Active Directory 的同一 AWS 目录服务（AWS 托管的微软 AD）域。

## 先决条件和限制
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 具有足够权限的 AWS 用户，可以使用 AWS CloudFormation 模板配置资源
+ AWS Directory Service for Microsoft Active Directory
+ AWS Secrets Manager 中用于向键值对中的 AWS Managed Microsoft AD 进行身份验证的凭证：
  + `ADDomainName`: <域名>
  + `ADDomainJoinUserName`: <域用户名>
  + `ADDomainJoinPassword`:<域用户密码>
  + `TargetOU`: <目标 OU 值>
**注意**  
在 AWS Systems Manager Automation 中，您将在 AWS 托管 Microsoft AD 加入活动中使用相同的键名。
+ 用于创建 SQL Server 安装和 Windows 服务或域账户的 SQL Server 媒体文件，这些文件将在集群创建期间使用
+ 虚拟私有云（VPC），具有位于不同可用区的两个公有子网、可用区中的两个私有子网、一个互联网网关、NAT 网关、路由表关联和一个跳转服务器

**产品版本**
+ Windows Server 2012 R2 和 Microsoft SQL Server 2016

## 架构
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-architecture"></a>

**源技术堆栈**
+  FCIs 使用共享云端硬盘的本地 SQL Server

**目标技术堆栈**
+ AWS EC2 实例
+  FSx 适用于 Windows 文件服务器的亚马逊
+ AWS Systems Manager Automation 运行手册
+ 网络配置（VPC、子网、互联网网关、NAT 网关、跳转服务器、安全组）
+ AWS Secrets Manager
+ AWS 托管的 Microsoft AD
+ Amazon EventBridge
+ AWS Identity and Access Management (IAM)

**目标架构**

下图显示了单个 AWS 区域中的一个 AWS 账户，其中一个 VPC 包括两个可用区、两个带有 NAT 网关的公有子网、第一个公有子网中的跳转服务器、两个私有子网（每个子网都有一个用于节点安全组中的 SQL Server 节点的 EC2 实例）以及一个连接到每个 SQL Server 节点的 Amazon FSx 文件系统。还包括 AWS Directory Service EventBridge、亚马逊、AWS Secrets Manager 和 AWS Systems Manager。

![\[包含公有子网和私有子网中的资源且带有节点安全组的多可用区架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f09c0164-be2d-4665-a574-7ec29fd25082/images/543829a9-e130-4542-9c4e-7518c6cbe967.png)


**自动化和扩展**
+ 您可以使用 AWS Systems Manager 加入 AWS 托管 Microsoft AD 并执行 SQL Server 安装。

## 工具
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-tools"></a>

**AWS 服务**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 可帮助您设置 AWS 资源，快速一致地配置这些资源，并在 AWS 账户和区域的整个生命周期中对其进行管理。
+ [AWS Di](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html) rectory Service 提供了多种将微软活动目录 (AD) 与其他 AWS 服务配合使用的方式，例如亚马逊弹性计算云 (亚马逊 EC2)、适用于 SQL Server 的亚马逊关系数据库服务 (Amazon RDS) 和 FSx 适用于 Windows 文件服务器的亚马逊。
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 是一项无服务器事件总线服务，可帮助您将应用程序与来自各种来源的实时数据连接起来。例如，AWS Lambda 函数、使用 API 目标的 HTTP 调用端点或其他 Amazon Web Services account 中的事件总线。
+ [AWS Identity and Access Management (AWS IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 帮助您将代码中的硬编码凭证（包括密码）替换为对 Secrets Manager 的 API 调用，以便以编程方式检索密钥。
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) 可帮助您管理在 Amazon Web Services Cloud 中运行的应用程序和基础设施。它简化了应用程序和资源管理，缩短了检测和解决操作问题的时间，并帮助您大规模安全地管理 AWS 资源。

**其他工具**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)是一款在 Windows、Linux 和 macOS 上运行的微软自动化和配置管理程序。此模式使用 PowerShell 脚本。

**代码存储库**

此模式的代码可在 GitHub [aws-windows-failover-cluster-automat](https://github.com/aws-samples/aws-windows-failover-cluster-automation) ion存储库中找到。

## 最佳实践
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-best-practices"></a>
+ 用于部署此解决方案的 IAM 角色应遵守最低权限原则。有关更多信息，请参阅 [IAM 文档](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。
+ 遵循 A [WS CloudFormation 最佳实践](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)。

## 操作说明
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-epics"></a>

### 部署基础设施
<a name="deploy-the-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 部署 Systems Manager CloudFormation 堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | AWS DevOps， DevOps 工程师 | 
| 部署基础设施堆栈。 | 成功部署 Systems Manager 堆`infra`栈后，创建堆栈，其中包括 EC2 实例节点、安全组、Amazon FSx for Windows 文件服务器文件系统和 IAM 角色。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | AWS DevOps， DevOps 工程师 | 

### 设置 Windows SQL Server Always On FCI
<a name="set-up-the-windows-sql-server-always-on-fci"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 Windows 工具。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | AWS DevOps， DevOps 工程师，数据库管理员 | 
| 在 Active Directory 域服务中预存集群计算机的对象。 | 要在 Active Directory 域服务 (AD DS) 中预存集群名称对象 (CNO) 并为集群角色预留虚拟计算机对象 (VCO)，请按照 [Windows Server 文档](https://learn.microsoft.com/en-us/windows-server/failover-clustering/prestage-cluster-adds)中的说明进行操作。 | AWS DevOps、数据库管理员、工程师 DevOps  | 
| 创建 WSFC。 | 要创建 Windows Server Failover Clustering (WSFC) 集群，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | AWS DevOps、数据库管理员、工程师 DevOps  | 
| 安装 SQL Server 失效转移群集。 | 设置 WSFC 集群后，在主实例 (节点 1) 上安装 SQL Server 集群。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html)<pre>D:\setup.exe /Q  `<br />/ACTION=InstallFailoverCluster `<br />/IACCEPTSQLSERVERLICENSETERMS `<br />/FEATURES="SQL,IS,BC,Conn"  `<br />/INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"  `<br />/INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"  `<br />/RSINSTALLMODE="FilesOnlyMode"  `<br />/INSTANCEID="MSSQLSERVER" `<br />/INSTANCENAME="MSSQLSERVER"  `<br />/FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)"  `<br />/FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node1>;Cluster Network 1;<subnet mask>"  `<br />/FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>"  `<br />/INSTANCEDIR="C:\Program Files\Microsoft SQL Server"  `<br />/ENU="True"  `<br />/ERRORREPORTING=0  `<br />/SQMREPORTING=0  `<br />/SAPWD="<Domain User password>" `<br />/SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"  `<br />/SQLSYSADMINACCOUNTS="<domain\username>" `<br />/SQLSVCACCOUNT="<domain\username>"  /SQLSVCPASSWORD="<Domain User password>" `<br />/AGTSVCACCOUNT="<domain\username>"  /AGTSVCPASSWORD="<Domain User password>" `<br />/ISSVCACCOUNT="<domain\username>" /ISSVCPASSWORD="<Domain User password>"  `<br />/FTSVCACCOUNT="NT Service\MSSQLFDLauncher"  `<br />/INSTALLSQLDATADIR="\\<FSX DNS name>\share\Program Files\Microsoft SQL Server"  `<br />/SQLUSERDBDIR="\\<FSX DNS name>\share\data"  `<br />/SQLUSERDBLOGDIR="\\<FSX DNS name>\share\log" `<br />/SQLTEMPDBDIR="T:\tempdb"  `<br />/SQLTEMPDBLOGDIR="T:\log"  `<br />/SQLBACKUPDIR="\\<FSX DNS name>\share\SQLBackup" `<br />/SkipRules=Cluster_VerifyForErrors `<br />/INDICATEPROGRESS</pre> | AWS DevOps、数据库管理员、工程师 DevOps  | 
| 向集群添加一个辅助节点。 | 要将 SQL Server 添加到辅助节点（节点 2），请运行以下PowerShell 命令。<pre>D:\setup.exe /Q  `<br />/ACTION=AddNode `<br />/IACCEPTSQLSERVERLICENSETERMS `<br />/INSTANCENAME="MSSQLSERVER"  `<br />/FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)" `<br />/FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node2>;Cluster Network 2;<subnet mask>" `<br />/FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>" `<br />/CONFIRMIPDEPENDENCYCHANGE=1 `<br />/SQLSVCACCOUNT="<domain\username>"  /SQLSVCPASSWORD="<Domain User password>" `<br />/AGTSVCACCOUNT="domain\username>"  /AGTSVCPASSWORD="<Domain User password>" `<br />/FTSVCACCOUNT="NT Service\MSSQLFDLauncher" `<br />/SkipRules=Cluster_VerifyForErrors `<br />/INDICATEPROGRESS</pre> | AWS DevOps、数据库管理员、工程师 DevOps  | 
| 测试 SQL Server FCI。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | 数据库管理员、工程师 DevOps  | 

### 清理 资源
<a name="clean-up-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 清理资源。 | 要清理资源，请使用 AWS CloudFormation 堆栈删除流程：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html)堆栈删除过程完成之后，堆栈将处于 `DELETE_COMPLETE` 状态。默认情况下，处于该`DELETE_COMPLETE`状态的堆栈不会显示在 CloudFormation 控制台中。要显示已删除的堆栈，您必须按照在 [AWS CloudFormation 控制台上查看已删除](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-deleted-stacks.html)堆栈中所述更改堆栈视图筛选条件。如果删除失败，则堆栈将处于 `DELETE_FAILED` 状态。有关解决方案，请参阅 CloudFormation 文档中的[删除堆栈失败](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-delete-stack-fails)。 | AWS DevOps、数据库管理员、工程师 DevOps  | 

## 问题排查
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| AWS CloudFormation 模板失败 | 如果 CloudFormation 模板在部署过程中出现故障，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | 
| AWS Managed Microsoft AD | 若要解决加入问题，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | 

## 相关资源
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-resources"></a>
+ [使用 FSx 适用于 Windows 的亚马逊文件服务器简化微软 SQL Server 高可用性部署](https://aws.amazon.com/blogs/storage/simplify-your-microsoft-sql-server-high-availability-deployments-using-amazon-fsx-for-windows-file-server/)
+ [ FSx 用于搭载微软 SQL Server 的 Windows 文件服务器](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/sql-server.html)

# 使用 BMC Discovery 查询提取迁移数据以进行迁移规划
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning"></a>

*Ben Tailor-Hamblin、Emma Baldry、Simon Cunningham 和 Shabnam Khan，Amazon Web Services*

## Summary
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-summary"></a>

本指南提供查询示例和步骤，帮助您使用 BMC Discovery 从本地基础架构和应用程序中提取数据。该模式向您展示了如何使用 BMC Discovery 查询来扫描您的基础架构并提取软件、服务和依赖项信息。提取的数据是大规模迁移到 Amazon Web Services（AWS）云的评测和动员阶段所必需的。您可以使用此数据来做出关键决策，决定将哪些应用程序一起迁移作为迁移计划的一部分。

## 先决条件和限制
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-prereqs"></a>

**先决条件**
+ BMC Discovery（以前称为 BMC ADDM）或者软件即服务（SaaS）版本的 BMC Helix Discovery 的许可证
+ [已安装](https://docs.bmc.com/docs/discovery/221/installing-1050933835.html)本地或 SaaS 版本的 BMC Discovery 
**注意**  
对于本地版本的 BMC Discovery，您必须将应用程序安装到能够访问所有网络和服务器设备的客户端网络上，这些设备用于跨多个数据中心进行迁移。必须根据应用程序安装说明，提供对客户端网络的访问权限。如果需要扫描 Windows Server 信息，您必须在网络中设置 Windows 代理管理器设备。
+ 如果您在使用 BMC Helix Discovery，[网络访问](https://docs.bmc.com/docs/discovery/221/network-ports-used-for-discovery-communications-1050933821.html)将允许应用程序跨数据中心来扫描设备

**产品版本**
+ BMC Discovery 22.2 (12.5)
+ BMC Discovery 22.1 (12.4)
+ BMC Discovery 21.3 (12.3)
+ BMC Discovery 21.05 (12.2)
+ BMC Discovery 20.08 (12.1)
+ BMC Discovery 20.02 (12.0)
+ BMC Discovery 11.3
+ BMC Discovery 11.2
+ BMC Discovery 11.1
+ BMC Discovery 11.0
+ BMC Atrium Discovery 10.2
+ BMC Atrium Discovery 10.1
+ BMC Atrium Discovery 10.0

## 架构
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-architecture"></a>

下图显示了资产管理器如何使用 BMC Discovery 查询来扫描 SaaS 和本地环境中的 BMC 建模的应用程序。

![\[用于使用 BMC Discovery 来提取软件、服务和依赖项信息的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5e549882-8deb-4459-8891-e39bbf80e320/images/0ebb3e68-5828-45aa-86f4-c741c7b6cd94.jpeg)


此图显示了如下工作流：资产管理器使用 BMC Discovery 或 BMC Helix Discovery，扫描多个物理服务器上托管的虚拟服务器上运行的数据库和软件实例。该工具可以使用跨多个虚拟和物理服务器的组件对应用程序进行建模。

**技术堆栈**
+ BMC Discovery
+ BMC Helix Discovery

## 工具
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-tools"></a>
+ [BMC Discovery](https://docs.bmc.com/xwiki/bin/view/IT-Operations-Management/Discovery/BMC-Discovery/) 是一款数据中心发现工具，可帮助您自动发现数据中心。
+ [BMC Helix Discovery](https://www.bmc.com/it-solutions/bmc-helix-discovery.html) 是一个基于 SaaS 的发现和依赖关系建模系统，可帮助您对数据资产及其依赖关系进行动态建模。

## 最佳实践
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-best-practices"></a>

最佳做法是在迁移到云时映射应用程序、依赖项和基础结构数据。映射可帮助您了解当前环境的复杂性以及各种组件之间的依赖关系。

这些查询提供的资产信息很重要，原因如下：

1. **规划** – 了解组件之间的依赖关系有助于更有效地规划迁移过程。例如，您可能需要先迁移某些组件，以确保可以成功迁移其他组件。

1. **风险评测** – 映射组件之间的依赖关系可以帮助您识别迁移过程中可能出现的任何潜在风险或问题。例如，您可能会发现某些组件依赖于过时或不受支持的技术，这些技术可能会导致云端出现问题。

1. **云架构** – 映射应用程序和基础架构数据还可以帮助您设计合适的云架构，以满足您的组织需求。例如，您可能需要设计一个多层体系结构来支持高可用性或可扩展性要求。

总体而言，映射应用程序、依赖项和基础架构数据是云迁移过程中的关键步骤。映射练习可以帮助您更好地了解当前环境，识别任何潜在问题或风险，并设计合适的云体系结构。

## 操作说明
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-epics"></a>

### 识别和评估发现工具
<a name="identify-and-evaluate-discovery-tooling"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定 ITSM 所有者。 | 确定 IT 服务管理 (ITSM) 所有者（通常通过联系运营支持团队）。 | 迁移主管 | 
| 检查 CMDB。 | 确定包含资产信息的配置管理数据库 (CMDBs) 的数量，然后确定该信息的来源。 | 迁移主管 | 
| 识别发现工具并检查是否使用了 BMC Discovery。 | 如果您的组织正在使用 BMC Discovery 将有关您的环境的数据发送到 CMDB 工具，请检查其扫描的范围和覆盖范围。例如，检查 BMC Discovery 是否正在扫描所有数据中心，以及访问服务器是否位于外围区域中。 | 迁移主管 | 
| 检查应用程序建模的级别。 | 检查应用程序是否在 BMC Discovery 中建模。如果没有，建议使用 BMC Discovery 工具对哪些正在运行的软件实例提供应用程序和业务服务进行建模。 | 迁移工程师，迁移主管 | 

### 提取基础架构数据
<a name="extract-infrastructure-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在物理和虚拟服务器上提取数据。 | 要提取 BMC Discovery 扫描的物理服务器和虚拟服务器上的数据，请使用[查询生成器](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)来运行如下查询：<pre>search Host show key as 'Serverid', virtual, name as 'HOSTNAME', os_type as 'osName', os_version as 'OS Version', num_logical_processors as 'Logical Processor Counts', cores_per_processor as 'Cores per Processor', logical_ram as 'Logical RAM', #Consumer:StorageUse:Provider:DiskDrive.size as 'Size'</pre>您可以使用提取的数据来确定适合迁移的实例大小。 | 迁移工程师、迁移主管 | 
| 在建模的应用程序上提取数据。 | 如果您的应用程序是在 BMC Discovery 中建模的，则可以提取有关运行应用程序软件的服务器的数据。要获取服务器名称，请使用[查询生成器](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)来运行如下查询：<pre>search SoftwareInstance show key as 'ApplicationID', #RunningSoftware:HostedSoftware:Host:Host.key as 'ReferenceID', type, name</pre>系统使用一组正在运行的软件实例，在 BMC Discovery 中对应用程序进行建模。应用程序依赖于运行应用程序软件的所有服务器。 | BMC Discovery 应用程序所有者 | 
| 提取数据库上的数据。 | 若要获取所有已扫描数据库以及运行这些数据库的服务器的列表，请使用[查询生成器](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)运行以下查询：<pre>search Database show key as 'Key', name, type as 'Source Engine Type', #Detail:Detail:ElementWithDetail:SoftwareInstance.name as 'Software Instance', #Detail:Detail:ElementWithDetail:SoftwareInstance.product_version as 'Product Version', #Detail:Detail:ElementWithDetail:SoftwareInstance.edition as 'Edition', #Detail:Detail:ElementWithDetail:SoftwareInstance.#RunningSoftware:HostedSoftware:Host:Host.key as 'ServerID'</pre> | 应用程序所有者 | 
| 提取服务器通信数据。 | 若要从历史网络通信日志中获取有关 BMC Discovery 收集的服务器之间的所有网络通信的信息，请使用[查询生成器](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)运行以下查询：<pre>search Host<br /> TRAVERSE InferredElement:Inference:Associate:DiscoveryAccess<br /> TRAVERSE DiscoveryAccess:DiscoveryAccessResult:DiscoveryResult:NetworkConnectionList<br /> TRAVERSE List:List:Member:DiscoveredNetworkConnection<br /> PROCESS WITH networkConnectionInfo</pre> | BMC Discovery 应用程序所有者 | 
| 提取有关应用程序发现的数据。 | 若要获取有关应用程序依赖项的信息，请使用[查询生成器](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)运行以下查询：<pre>search SoftwareInstance show key as 'SRC App ID', #Dependant:Dependency:DependedUpon:SoftwareInstance.key as 'DEST App ID'</pre> | BMC Discovery 应用程序所有者 | 
| 提取有关业务服务的数据。 | 若要提取有关主机提供的业务服务的数据，请使用[查询生成器](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)运行以下查询：<pre>search Host show name, #Host:HostedSoftware:AggregateSoftware:BusinessService.name as 'Name'</pre> | BMC Discovery 应用程序所有者 | 

## 问题排查
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 查询无法运行或包含未填充的列。 | 查看 BMC Discovery 中的资产记录，并确定所需字段。然后，使用[查询生成器](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)替换查询中的这些字段。 | 
| 未填充从属资产的详细信息。 | 这可能是由于访问权限或网络连接造成的。发现工具可能没有访问某些资产所需权限，尤其是当它们位于不同的网络或不同的环境中时。我们建议您与发现主题专家密切合作，以确保识别所有相关资产。 | 

## 相关资源
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-resources"></a>

**参考**
+ [BMC Discovery 许可授权](https://docs.bmc.com/docs/discovery/bmc-discovery-licensing-entitlement-531336348.html)（BMC 文档）
+ [BMC Discovery 功能和组件](https://docs.bmc.com/docs/discovery/221/bmc-discovery-features-and-components-1052418000.html)（BMC 文档）
+ [BMC Discovery 用户指南](https://docs.bmc.com/xwiki/bin/view/IT-Operations-Management/Discovery/BMC-Discovery/)（BMC 文档）
+ [搜索数据（在 BMC Discovery 上）](https://docs.bmc.com/docs/discovery/120/searching-for-data-911457232.html)（BMC 文档）
+ [迁移的产品组合发现和分析](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-portfolio-discovery/welcome.html)（《AWS 规范指引》）

**教程和视频**
+ [BMC Discovery：网络研讨会-报告查询最佳实践（第 1 部分）(YouTube)](https://www.youtube.com/watch?v=iwXy6x40kO8)

# 重新定位
<a name="migration-relocate-pattern-list"></a>

**Topics**
+ [将 Amazon RDS for Oracle 数据库迁移到另一个 AWS 区域 数据库 AWS 账户 并 AWS DMS 用于持续复制](migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication.md)
+ [将 Amazon RDS 数据库实例迁移到另一个 VPC 或账户](migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.md)
+ [将 Amazon Redshift 集群迁移至中国的 AWS 区域](migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china.md)
+ [使用 pg\$1transport 在两个 Amazon RDS 数据库实例之间传输 PostgreSQL 数据库](transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.md)

# 将 Amazon RDS for Oracle 数据库迁移到另一个 AWS 区域 数据库 AWS 账户 并 AWS DMS 用于持续复制
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication"></a>

*Durga Prasad Cheepuri 和 Eduardo Valentim，Amazon Web Services*

## Summary
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-summary"></a>


| 
| 
| 警告：IAM 用户具有长期凭证，这会带来安全风险。为帮助减轻这种风险，我们建议仅向这些用户提供执行任务所需的权限，并在不再需要这些用户时将其移除。 | 
| --- |

此模式将引导您完成将适用于 Oracle 的亚马逊关系数据库服务 (Amazon RDS) 源数据库迁移到其他 AWS 账户 和的步骤 AWS 区域。该模式使用数据库快照进行一次性完整数据加载，并启用 AWS Database Migration Service (AWS DMS) 进行持续复制。

## 先决条件和限制
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-prereqs"></a>

**先决条件**
+  AWS 账户 包含源 Amazon RDS for Oracle 数据库的活动，该数据库已使用非默认 AWS Key Management Service (AWS KMS) 密钥进行加密
+ 在与源数据库不同的 AWS 区域 数据库 AWS 账户 中处于活动状态，用于目标 Amazon RDS for Oracle 数据库
+ 源和目标之间的虚拟私有云 (VPC) 对等 VPCs
+ 熟悉[使用 Oracle 数据库作为数据源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ 熟悉[使用 Oracle 数据库作为目标 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html) 

**产品版本**
+ Oracle 版本 11g（版本 11.2.0.3.v1 及更高版本）以及最高版本 12.2 和 18c。有关支持的版本和版本的最新列表，请参阅 AWS 文档 AWS DMS中的 “[使用 Oracle 数据库作为源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)以及[使用 Oracle 数据库作为目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html)”。有关 Amazon RDS 支持的 Oracle 版本，请参阅 [Oracle on Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)。

## 架构
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-architecture"></a>

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

![\[源 AWS 账户连接至包含源和目标区域的目标 AWS 账户\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5ecd5359-884e-455c-b5d0-ef08eda2ea1f/images/e17fa7fe-d924-4f35-9707-b93572fa1227.png)


**持续复制架构**

![\[通过 VPC 对等连接复制 EC2 实例和 Amazon RDS 的实例上的数据库。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5ecd5359-884e-455c-b5d0-ef08eda2ea1f/images/b60b3500-5d29-487a-bbab-0ae9f3f386aa.png)


## 工具
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-tools"></a>

**用于一次性完整数据加载的工具**
+ [Amazon Relational Database Service（Amazon RDS）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)创建数据库实例的存储卷快照，并备份整个数据库实例而不仅仅是单个数据库。创建数据库快照时，需要识别出将要备份的数据库实例，然后为数据库快照命名，以便稍后从此快照还原。创建快照所用时间因数据库大小而异。由于快照包含整个存储卷，因此，文件（如临时文件）的大小也会影响创建快照所需时间。有关创建数据库快照的信息，请参阅 Amazon RDS 文档中的[创建数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 为 A ********mazon RDS**** 加密创建密钥。 在创建加密数据库实例时，您还可以提供加密[AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)密钥的密钥标识符。如果没有指定 [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 密钥标识符，Amazon RDS 将对您的新数据库实例使用默认加密密钥。[AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 将为您的 AWS 账户创建默认加密密钥。每个 AWS 账户 都有不同的默认加密密钥 AWS 区域。对于这种模式，应使用非默认 [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 密钥对 Amazon RDS 数据库实例加密。有关使用 [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 密钥进行 Amazon RDS 加密的更多信息，请参阅 Amazon RDS 文档中的[加密 Amazon RDS 资源](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)。

**用于持续复制的工具**
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 用于复制正在进行的更改以及使源数据库和目标数据库保持同步。有关使用进行持续复制 AWS DMS 的更多信息，请参阅 AWS DMS 文档中的[使用 AWS DMS 复制实例](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html)。

## 操作说明
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-epics"></a>

### 配置您的来源 AWS 账户
<a name="configure-your-source-aws-account"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备源 Oracle 数据库实例。 | 使 Amazon RDS for Oracle 数据库实例在 ARCHIVELOG 模式下运行，然后设置保留期。有关详细信息，请参阅[使用 AWS 托管 Oracle 数据库作为源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Amazon-Managed)。 | 数据库管理员 | 
| 设置源 Oracle 数据库实例的补充日志记录。 | 为 Amazon RDS for Oracle 数据库实例设置数据库级与表级补充日志记录。有关详细信息，请参阅[使用 AWS 托管 Oracle 数据库作为源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Amazon-Managed)。 | 数据库管理员 | 
| 更新来源账户中的 AWS KMS 密钥政策。 | 更新源代码中的 AWS KMS 密钥策略 AWS 账户 以允许目标 AWS 账户 使用加密的 Amazon RDS AWS KMS 密钥。有关详细信息，请参阅 [AWS KMS 文档](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-external-accounts)。 | SysAdmin | 
| 创建手动拍摄的源数据库实例的 Amazon RDS 数据库快照。 |  | AWS IAM 用户 | 
| 与目标 AWS 账户共享手动加密的 Amazon RDS 快照。 | 有关详细信息，请参阅[共享数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html)。 | AWS IAM 用户 | 

### 配置你的目标 AWS 账户
<a name="configure-your-target-aws-account"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 附加策略。 | 在目标中 AWS 账户，将 AWS Identity and Access Management (IAM) 策略附加到根 IAM 用户，以允许 IAM 用户使用共享 AWS KMS 密钥复制加密的数据库快照。 | SysAdmin | 
| 切换至源 AWS 区域。 |  | AWS IAM 用户 | 
| 复制共享快照。 | 在 Amazon RDS 控制台的**快照**窗格中，选择**与我共享**，然后选择共享快照。使用源数据库使用的 AWS KMS 密钥的 Amazon 资源名称 (ARN)，将快照复制到与源数据库相同 AWS 区域 的位置。有关详细信息，请参阅[复制数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)。 | AWS IAM 用户 | 
| 切换到目标 AWS 区域，然后创建新 AWS KMS 密钥。 |  | AWS IAM 用户 | 
| 复制快照。 | 切换至源 AWS 区域。在 Amazon RDS 控制台的**快照**窗格中，选择**我拥有的**，然后选择已复制的快照。使用新目标 AWS 区域 的 AWS KMS 密钥将快照复制到目标 AWS 区域。 | AWS IAM 用户 | 
| 还原快照。 | 切换到目标 AWS 区域。在 Amazon RDS 控制台的**快照**窗格中，选择**我拥有的**。选择复制的快照并将其还原至 Amazon RDS for Oracle 数据库实例。有关详细信息，请参阅[从数据库快照恢复](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)。 | AWS IAM 用户 | 

### 为持续进行的复制准备源数据库
<a name="prepare-your-source-database-for-ongoing-replication"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建具有适当权限的 Oracle 用户。 | 创建 Oracle 用户，带将 Oracle 用作 AWS DMS源所需的权限。有关详细信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。 | 数据库管理员 | 
| 为 Oracle LogMiner 或 Oracle 二进制读取器配置源数据库。 |  | 数据库管理员 | 

### 为持续复制准备目标数据库
<a name="prepare-your-target-database-for-ongoing-replication"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建具有适当权限的 Oracle 用户。 | 创建 Oracle 用户，带将 Oracle 用作 AWS DMS目标所需的权限。有关详细信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html#CHAP_Target.Oracle.Privileges)。 | 数据库管理员 | 

### 创建 AWS DMS 组件
<a name="create-dms-components"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在目标系统中创建复制实例 AWS 区域。 | 在目标的 VPC 中创建复制实例 AWS 区域。有关详细信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.ReplicationInstance)。 | AWS IAM 用户 | 
| 创建具有所需加密的源端点和目标端点并测试连接。 | 有关详细信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.Endpoints)。 | 数据库管理员 | 
| 创建复制任务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication.html)有关详细信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.Tasks)。 | IAM 用户 | 
| 启动和监测任务。 | 有关详细信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)。 | AWS IAM 用户 | 
| 如果需要，可以对任务启用验证。 | 注意，启用验证确实会影响复制的性能。有关详细信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)。 | AWS IAM 用户 | 

## 相关资源
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-resources"></a>
+ [更改密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-external-accounts)
+ [创建手动 Amazon RDS 数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)
+ [共享手动 Amazon RDS 数据库快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html)
+ [复制快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html) 
+ [从 Amazon RDS 数据库快照还原](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html) 
+ [入门 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html) 
+ [使用 Oracle 数据库作为来源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 
+ [使用 Oracle 数据库作为目标 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html) 
+ [AWS DMS 使用 VPC 对等互连进行设置](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer) 
+ [如何与其他 AWS 账户共享手动 Amazon RDS 数据库快照或者数据库集群快照？](https://aws.amazon.com/premiumsupport/knowledge-center/rds-snapshots-share-account/) （AWS Knowledge Center 文章） 

# 将 Amazon RDS 数据库实例迁移到另一个 VPC 或账户
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account"></a>

*Dhrubajyoti Mukherjee，Amazon Web Services*

## Summary
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-summary"></a>

此示例介绍了以下操作指南：将 Amazon Relational Database Service (Amazon RDS) 数据库实例从虚拟私有云（VPC）迁移至同一 Amazon Web Services account 的其他项，或从 Amazon Web Services account 迁移至其他 Amazon Web Services account。

如果您出于分离或安全原因想要将 Amazon RDS 数据库实例迁移到另一个 VPC 或账户（例如，当您想将应用程序堆栈和数据库放在不同的 VPC 或账户中时 VPCs），这种模式非常有用。 

将数据库实例迁移至其他 Amazon Web Services account 涉及的步骤，包括拍摄手动快照、共享快照以及在目标账户中还原快照。此过程可能很耗时，具体取决于数据库更改和事务速率。其还会导致数据库停机，因此请提前做好迁移计划。考虑 blue/green 部署策略以最大限度地减少停机时间。 或者，您可以评估 AWS 数据迁移服务 (AWS DMS)，以最大限度地减少变更造成的停机时间。但是，此模式不包含此选项。要了解更多信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)。

## 先决条件和限制
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ VPC、子网和 Amazon RDS 控制台所需 AWS Identity and Access Management (IAM) 权限

**限制**
+ 对 VPC 的更改将会导致数据库重启，从而导致应用程序中断。建议您在低峰时段迁移。
+ 将 Amazon RDS 迁移至其他 VPC 时的限制：
  + 您要迁移的数据库实例必须为没有备用实例的单个实例。它不能是集群成员。
  + Amazon RDS 不得位于多个可用区。
  + Amazon RDS 不得包含任何只读副本。
  + 在目标 VPC 中创建的子网组必须包含来自源数据库运行的可用区的子网。
+ 将 Amazon RDS 迁移至其他 Amazon Web Services account 时的限制：
  + 目前不支持共享使用 Amazon RDS 默认服务密钥加密的快照。

## 架构
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-architecture"></a>

**在同一 Amazon Web Services account 中迁移至 VPC**

下图显示了将 Amazon RDS 数据库实例迁移至同一 Amazon Web Services account 中其他 VPC 的工作流。

![\[将 Amazon RDS 数据库实例迁移至同一 Amazon Web Services account 中的其他 VPC 的工作流\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/dabcee69-9cc6-47f9-9964-635e349caaaf/images/73e16544-6276-4f03-9ae2-42b8c7c20315.png)


包含以下步骤。有关详细说明，请参阅[操作](#migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-epics)部分。

1. 在目标 VPC 创建数据库子网组。数据库子网组是您在创建数据库实例时用于指定特定 VPC 的子网集合。

1. 将源 VPC 中的 Amazon RDS 数据库实例配置为使用新数据库子网组。

1. 应用更改将 Amazon RDS 数据库迁移至目标 VPC。

**迁移到不同的 Amazon Web Services account**

下图显示了将 Amazon RDS 数据库实例迁移至其他 Amazon Web Services account 的工作流。

![\[将 Amazon RDS 数据库实例迁移至其他 Amazon Web Services account 的工作流\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/dabcee69-9cc6-47f9-9964-635e349caaaf/images/5536e69e-3965-4ca2-8a0b-2573659b5f8f.png)


包含以下步骤。有关详细说明，请参阅[操作](#migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-epics)部分。

1. 在源 Amazon Web Services account 中访问 Amazon RDS 数据库实例。

1. 在源 Amazon Web Services account 中创建 Amazon RDS 快照。

1. 与目标 Amazon Web Services account 共享 Amazon RDS 快照。

1. 访问目标 Amazon Web Services account 中的 Amazon RDS 快照。

1. 在目标 Amazon Web Services account 中创建 Amazon RDS 数据库实例。

## 工具
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-tools"></a>

**Amazon Web Services**
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) 可帮助您将 AWS 资源启动到您定义的虚拟网络中。此虚拟网络类似于您在自己的数据中心内运行的传统网络，具有使用 AWS 可扩展基础设施的优势。

## 最佳实践
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-best-practices"></a>
+ 如果将 Amazon RDS 数据库实例迁移至另一个账户时担心数据库停机问题，我们建议您使用 [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)。该服务提供数据复制，导致停机时间少于五分钟。

## 操作说明
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-epics"></a>

### 使用同一 Amazon Web Services account 迁移至其他 VPC
<a name="migrate-to-a-different-vpc-in-the-same-aws-account"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建新的 VPC。 | 在 [Amazon VPC 控制台](https://console.aws.amazon.com/vpc/)，创建新的 VPC 和具有所需属性和 IP 地址范围的子网。有关详细说明，请参阅 [Amazon VPC 文档](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)。 | 管理员 | 
| 创建数据库子网组。 | 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds/)：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.html)有关更多信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#USER_VPC.CreateDBSubnetGroup)。 | 管理员 | 
| 修改 Amazon RDS 数据库实例，以使用新的子网组。 | 打开 Amazon RDS 控制台：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.html)向目标 VPC 的迁移完成后，目标 VPC 默认安全组将分配至 Amazon RDS 数据库实例。您可以为该 VPC 配置新的安全组，其中包含数据库实例所需入站和出站规则。或者，使用 AWS 命令行界面（AWS CLI），通过明确提供新的 VPC 安全组 ID 以迁移至目标 VPC。例如：<pre>aws rds modify-db-instance \<br />    --db-instance-identifier testrds \<br />    --db-subnet-group-name new-vpc-subnet-group \<br />    --vpc-security-group-ids sg-idxxxx \<br />    --apply-immediately</pre> | 管理员 | 

### 迁移至不同的 Amazon Web Services account
<a name="migrate-to-a-different-aws-account"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在目标 Amazon Web Services account 中创建新的 VPC 和子网组。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.html) | 管理员 | 
| 共享数据库手动快照并与目标账户共享。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.html) | 管理员 | 
| 启动新的 Amazon RDS 数据库实例。 | 使用目标 Amazon Web Services account 中的共享快照，启动新的 Amazon RDS 数据库实例。有关说明，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)。 | 管理员 | 

## 相关资源
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-resources"></a>
+ [Amazon VPC 文档](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)
+ [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)
+ [如何更改 RDS 数据库实例的 VPC？](https://aws.amazon.com/premiumsupport/knowledge-center/change-vpc-rds-db-instance/) （AWS re: Post 文章）
+ [如何将 Amazon RDS 资源的所有权转移至不同 Amazon Web Services account？](https://aws.amazon.com/premiumsupport/knowledge-center/account-transfer-rds/) （AWS re: Post 文章）
+ [如何与其他 Amazon Web Services account 共享手动 Amazon RDS 数据库快照或者 Aurora 数据库集群快照？](https://aws.amazon.com/premiumsupport/knowledge-center/rds-snapshots-share-account/) （AWS re: Post 文章）
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)

# 将 Amazon Redshift 集群迁移至中国的 AWS 区域
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china"></a>

*Jing Yan，Amazon Web Services*

## Summary
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-summary"></a>

这种模式提供了 step-by-step一种将 Amazon Redshift 集群从另一个 AWS 区域迁移到中国的 AWS 区域的方法。

此模式使用 SQL 命令重新创建所有数据库对象，并使用 UNLOAD 命令将这些数据从 Amazon Redshift 迁移至 Amazon Simple Storage Service (Amazon S3) 存储桶。然后将数据迁移至中国 AWS 区域的 S3 存储桶。COPY 命令用于从 S3 存储桶加载数据，并将其传输到目标 Amazon Redshift 集群。

Amazon Redshift 目前不支持跨区域功能，例如将快照复制到中国 AWS 区域。这种模式提供了解决此限制的方法。您也可以逆转此模式的步骤，将数据从中国 AWS 区域迁移至另一个 AWS 区域。

## 先决条件和限制
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-prereqs"></a>

*先决条件*
+ 中国地区和中国以外的 AWS 区域的活跃 Amazon Web Services account
+ 中国地区和中国以外的 AWS 区域中的现有 Amazon Redshift 集群

*限制*
+ 这是离线迁移，这意味着源 Amazon Redshift 集群在迁移期间无法执行写入操作。

## 架构
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-architecture"></a>

**源技术堆栈**
+ 位于中国以外的 AWS 区域的 Amazon Redshift 集群

**目标技术堆栈**
+ 位于中国 AWS 区域的 Amazon Redshift 集群

**目标架构**

![\[将 AWS 区域 S3 存储桶中的 Amazon Redshift 集群数据迁移到中国区的存储桶。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f7d241d9-b700-406b-95a0-3e47e7f0fa60/images/b6016e3d-76db-4176-8f99-f804da94d3f2.png)


## 工具
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-tools"></a>

**工具**
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) — Amazon Simple Storage Service（Amazon S3）是一种对象存储服务，提供可扩展性、数据可用性、安全性和性能。你可以使用 Amazon S3 存储来自 Amazon Redshift 的数据，也可以将数据从 S3 存储桶复制到 Amazon Redshift。
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html) – Amazon Redshift 是一种完全托管的 PB 级云中数据仓库服务。 
+ [psql](https://www.postgresql.org/docs/8.4/app-psql.html) – psql 是 PostgreSQL 中基于终端的前端。 

## 操作说明
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-epics"></a>

### 为在来源 Region 进行迁移做准备
<a name="prepare-for-migration-in-the-source-region"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在源区域启动并配置 EC2 实例。 | 登录 AWS 管理控制台并打开亚马逊弹性计算云 (Amazon EC2) 控制台。您当前的区域显示在屏幕顶部的导航栏中。此区域不能是中国 AWS 区域。从 Amazon EC2 控制台控制面板中选择 “启动实例”，然后创建和配置 EC2 实例。重要：确保入站规则 EC2 的安全组允许从源计算机不受限制地访问 TCP 端口 22。有关如何启动和配置 EC2 实例的说明，请参阅 “相关资源” 部分。 | 数据库管理员、开发人员 | 
| 安装 psql 工具。 | 下载和安装 PostgreSQL。Amazon Redshift 不提供 psql 工具，它随 PostgreSQL 一起安装。有关使用 psql 和安装 PostgreSQL 工具的更多信息，请参阅“相关资源”部分。 | 数据库管理员 | 
| 记录 Amazon Redshift 集群的详细信息。 | 打开 Amazon Redshift 控制台，在导航窗格中选择“集群”。然后从列表中选择 Amazon Redshift 集群名称。在“属性”选项卡的“数据库配置”部分，记录“数据库名称”和“端口”。打开“连接详细信息”部分并记录“端点”，格式为“endpoint:<port>/<databasename>”。重要提示：确保您的入站规则的 Amazon Redshift 安全组允许您的实例不受限制地访问 TCP 端口 5439。 EC2  | 数据库管理员 | 
| 连接 psql 到 Amazon Redshift 集群。 | <databasename><port>在命令提示符处，运行 "psql -h <endpoint> -U <userid> -d <databasename> -p <port>" 命令以指定连接信息。在 psql 密码提示符处，输入 "<userid>" 用户的密码。您已连接到 Amazon Redshift 集群，并能以交互方式输入命令。 | 数据库管理员 | 
| 创建 S3 存储桶。 | 打开 Amazon S3 控制台，创建 S3 存储桶以存放从 Amazon Redshift 导出的文件。有关如何创建 S3 存储桶的说明，请参阅“相关资源”部分。 | 数据库管理员、AWS General | 
| 创建支持数据卸载的 IAM policy。 | 打开 AWS Identity and Access Management（IAM）控制台并选择“策略”。选择“创建策略”，然后选择 "JSON" 选项卡。从“其他信息”部分复制并粘贴用于卸载数据的 IAM 策略。重要提示：将 "s3\$1bucket\$1name" 替换为您的 S3 存储桶的名称。选择“审核策略”并输入策略的名称和描述。选择“创建策略”。 | 数据库管理员 | 
| 创建 IAM 角色，以允许 Amazon Redshift 执行卸载操作。 | 打开 IAM 控制台，选择“角色”。选择“创建角色”，然后在“选择可信实体类型”中选择 "AWS service"。为服务选择 "Redshift"，选择“Redshift – 可自定义”，然后选择“下一步”。选择您之前创建的“卸载”策略，然后选择“下一步”。输入“角色名称”，然后选择“创建角色”。 | 数据库管理员 | 
| 将 IAM 角色与 Amazon Redshift 集群关联。 | 打开 Amazon Redshift 控制台，然后选择“管理 IAM 角色”。从下拉菜单中选择“可用角色”，然后选择您之前创建的角色。选择“应用更改”。当“管理 IAM 角色”上的“IAM 角色的状态”显示为“同步中”时，您可以运行 UNLOAD 命令。 | 数据库管理员 | 
| 停止 Amazon Redshift 集群的写入操作。 | 迁移完成之前，您必须记得停止对源 Amazon Redshift 集群的所有写入操作。 | 数据库管理员 | 

### 为目标地区迁移做好准备
<a name="prepare-for-migration-in-the-target-region"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在目标区域启动并配置 EC2 实例。 | 登录中国某个区域（北京或宁夏）的 AWS 管理控制台。在 Amazon EC2 控制台中，选择 “启动实例”，然后创建和配置 EC2 实例。重要：请确保您的入站规则的 Amazon EC2 安全组允许从您的源计算机不受限制地访问 TCP 端口 22。有关如何启动和配置 EC2 实例的更多说明，请参阅 “相关资源” 部分。 | 数据库管理员 | 
| 记录 Amazon Redshift 集群的详细信息。 | 打开 Amazon Redshift 控制台，在导航窗格中选择“集群”。然后从列表中选择 Amazon Redshift 集群名称。在“属性”选项卡的“数据库配置”部分，记录“数据库名称”和“端口”。打开“连接详细信息”部分并记录“端点”，格式为“endpoint:<port>/<databasename>”。重要提示：请确保您的入站规则的 Amazon Redshift 安全组允许从您的实例不受限制地访问 TCP 端口 5439。 EC2  | 数据库管理员 | 
| 连接 psql 到 Amazon Redshift 集群。 | <databasename><port>在命令提示符处，运行 "psql -h <endpoint> -U <userid> -d <databasename> -p <port>" 命令以指定连接信息。在 psql 密码提示符处，输入 "<userid>" 用户的密码。您已连接到 Amazon Redshift 集群，并能以交互方式输入命令。 | 数据库管理员 | 
| 创建 S3 存储桶。 | 打开 Amazon S3 控制台，然后创建 S3 存储桶，以存放从 Amazon Redshift 导出的文件。有关此操作和其他操作的帮助，请参阅“相关资源”部分。 | 数据库管理员 | 
| 创建支持复制数据的 IAM policy。 | 打开 IAM 控制台，然后选择“策略”。选择“创建策略”，然后选择 "JSON" 选项卡。从“其他信息”部分复制并粘贴用于复制数据的 IAM 策略。重要提示：将 "s3\$1bucket\$1name" 替换为您的 S3 存储桶的名称。选择“审核策略”，然后输入策略的名称和描述。选择“创建策略”。 | 数据库管理员 | 
| 创建一个 IAM 角色，允许 Amazon Redshift 进行复制操作。 | 打开 IAM 控制台，选择“角色”。选择“创建角色”，然后在“选择可信实体类型”中选择 "AWS service"。为服务选择 "Redshift"，选择“Redshift – 可自定义”，然后选择“下一步”。选择您之前创建的“复制”策略，然后选择“下一步”。输入“角色名称”，然后选择“创建角色”。 | 数据库管理员 | 
| 将 IAM 角色与 Amazon Redshift 集群关联。 | 打开 Amazon Redshift 控制台，然后选择“管理 IAM 角色”。从下拉菜单中选择“可用角色”，然后选择您之前创建的角色。选择“应用更改”。当“管理 IAM 角色”上 IAM 角色的“状态”显示为“同步中”时，您可以运行 "COPY" 命令。 | 数据库管理员 | 

### 在开始迁移前验证源数据和对象信息
<a name="verify-source-data-and-object-information-before-beginning-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源 Amazon Redshift 表行。 | 使用“其他信息”部分中的脚本验证和记录源 Amazon Redshift 表中的行数。切记均匀分割卸载和复制脚本的数据。这将提高数据卸载和加载效率，使每个脚本所涵盖的数据量将保持平衡。 | 数据库管理员 | 
| 验证源 Amazon Redshift 集群的数据库对象数量。 | 使用 “其他信息” 部分中的脚本来验证和记录源 Amazon Redshift 集群中数据库、用户、架构、表、视图和用户定义函数 (UDFs) 的数量。 | 数据库管理员 | 
| 迁移之前验证 SQL 语句的结果。 | 部分用于数据验证的 SQL 语句应根据实际业务和数据情况进行排序。这是为了验证导入的数据，以确保其一致性并正确显示。 | 数据库管理员 | 

### 将数据与对象迁移至目标 Regions
<a name="migrate-data-and-objects-to-the-target-region"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 生成 Amazon Redshift DDL 脚本。 | 使用“其他信息”部分“用于查询 Amazon Redshift 的 SQL 语句”中的链接，生成数据定义语言（DDL）脚本。这些 DDL 脚本应包括“创建用户”、“创建架构”、“用户对架构的权限”、“创建表/视图”、“用户对对象的权限”和“创建函数”查询。 | 数据库管理员 | 
| 在 Amazon Redshift 集群中为目标区域创建对象。 | 在 AWS 区域使用 AWS 命令行界面（AWS CLI）来运行 DDL 脚本。这些脚本将在 Amazon Redshift 集群中为目标 Region 创建对象。 | 数据库管理员 | 
| 将源 Amazon Redshift 集群数据卸载至 S3 存储桶。 | 运行 UNLOAD 命令将数据从源 Regions Amazon Redshift 集群卸载至 S3 存储桶。 | 数据库管理员、开发人员  | 
| 将源 Region S3 存储桶数据传输至目标 Region S3 存储桶。 | 将数据从您的源 Region S3 存储桶传输至目标 S3 存储桶。由于无法使用 "\$1 aws s3 sync" 命令，因此请务必使用“相关资源”部分的“将 Amazon S3 数据从 AWS 区域传输至中国 AWS 区域”一文中概述的流程。 | 开发者版 | 
|  将数据加载至目标 Amazon Redshift 集群。 | 在目标 Regions的 psql 工具，运行 COPY 命令，将数据从 S3 存储桶加载至目标 Amazon Redshift 集群。 | 数据库管理员 | 

### 迁移后验证源 Regions 和目标 Regions 中的数据
<a name="verify-the-data-in-the-source-and-target-regions-after-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证并比较源表和目标表中行数。 | 验证并比较源区域和目标区域中的表行数，以确保全部迁移。 | 数据库管理员 | 
| 验证并比较源数据库和目标数据库对象数量。 | 验证并比较源 Regions 和目标 Regions 中的所有数据库对象，以确保所有数据库对象都已迁移。 | 数据库管理员 | 
| 验证并比较源 Regions 和目标 Regions 中的 SQL 脚本结果。 | 运行在迁移前准备的 SQL 脚本。验证并比较数据，以确保 SQL 结果正确无误。 | 数据库管理员 | 
| 重置目标 Amazon Redshift 集群中的所有用户密码。 | 迁移完成并验证所有数据后，您应重置中国 AWS 区域的 Amazon Redshift 集群的所有用户密码。 | 数据库管理员 | 

## 相关的资源
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-resources"></a>
+ [将 Amazon S3 数据从 AWS 区域传输至中国 AWS 区域](https://aws.amazon.com/cn/blogs/storage/transferring-amazon-s3-data-from-aws-regions-to-aws-regions-in-china/)
+ [创建 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)
+ [重置 Amazon Redshift 用户密码](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html)
+ [psql 文档](https://www.postgresql.org/docs/8.4/static/app-psql.html)

## 附加信息
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-additional"></a>

*用于卸载数据的 IAM policy*

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::s3_bucket_name"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:DeleteObject"],
      "Resource": ["arn:aws:s3:::s3_bucket_name/*"]
    }
  ]
}
```

*用于复制数据的 IAM policy*

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::s3_bucket_name"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::s3_bucket_name/*"]
    }
  ]
}
```

*用于查询 Amazon Redshift 的 SQL 语句*

```
##Database

select * from pg_database where datdba>1;

##User

select * from pg_user where usesysid>1;

##Schema

SELECT n.nspname AS "Name",

  pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"

FROM pg_catalog.pg_namespace n

WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'

ORDER BY 1;

##Table

select count(*) from pg_tables where schemaname not in ('pg_catalog','information_schema');

select schemaname,count(*) from pg_tables where schemaname not in ('pg_catalog','information_schema') group by schemaname order by 1;

##View

SELECT 

    n.nspname AS schemaname,c.relname AS viewname,pg_catalog.pg_get_userbyid(c.relowner) as "Owner"

FROM 

    pg_catalog.pg_class AS c

INNER JOIN

    pg_catalog.pg_namespace AS n

    ON c.relnamespace = n.oid

WHERE relkind = 'v' and n.nspname not in ('information_schema','pg_catalog');

##UDF

SELECT 

   n.nspname AS schemaname,

   p.proname AS proname,

   pg_catalog.pg_get_userbyid(p.proowner) as "Owner"

FROM pg_proc p

LEFT JOIN pg_namespace n on n.oid = p.pronamespace

WHERE p.proowner != 1;
```

*用于生成 DDL 语句的 SQL 脚本*
+ [get\$1schema\$1priv\$1by\$1user 脚本](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_get_schema_priv_by_user.sql)
+ [Generate\$1tbl\$1ddl 脚本](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_tbl_ddl.sql)
+ [Generate\$1view\$1ddl](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_view_ddl.sql)
+ [Generate\$1user\$1grant\$1revoke\$1ddl](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_user_grant_revoke_ddl.sql)
+ [Generate\$1udf\$1ddl](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_udf_ddl.sql)

# 使用 pg\$1transport 在两个 Amazon RDS 数据库实例之间传输 PostgreSQL 数据库
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport"></a>

*Raunak Rishabh 和 Jitender Kumar，Amazon Web Services*

## Summary
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-summary"></a>

此模式描述了使用 **pg\$1transport** 扩展程序在适用于 PostgreSQL 数据库实例的两个 Amazon Relational Database Service（Amazon RDS）之间迁移超大型数据库的步骤。此扩展程序提供了用于移动每个数据库的物理传输机制。通过以最少的处理流式传输数据库文件，它为在数据库实例之间迁移大型数据库提供了一种极快的方法，将停机时间降到最低。此扩展程序使用拉取模式，其中，目标数据库实例从源数据库实例导入数据库。

## 先决条件和限制
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-prereqs"></a>

**先决条件**
+ 两个数据库实例必须运行相同的 PostgreSQL 主要版本。
+ 数据库不得存在于目标上。否则，传输将失败。
+ 在源数据库中，除了 **pg\$1transport** 之外的任何扩展程序都不能启用。
+ 所有源数据库对象必须位于默认 **pg\$1default** 表空间中。
+ 源数据库实例的安全组应允许来自目标数据库实例的流量。
+ 安装[像](https://www.postgresql.org/docs/11/app-psql.html) psql 这样的 PostgreSQL 客户端，[PgAdmin](https://www.pgadmin.org/)或者使用 Amazon RDS PostgreSQL 数据库实例。您可以在本地系统中安装客户端，也可以使用亚马逊弹性计算云 (Amazon EC2) 实例。在这种模式中，我们在 EC2 实例上使用 psql。

**限制**
+ 您无法在 Amazon RDS for PostgreSQL 的不同主要版本之间传输数据库。
+ 源数据库的访问权限和所有权不会转移到目标数据库。
+ 您不能在只读副本或只读副本的父实例上传输数据库。
+ 您不能在打算使用该方法传输的任何数据库表中使用 **reg** 数据类型。
+ 您总共可以在数据库实例上同时运行 32 个传输（包括导入和导出）。
+ 您无法重命名或 include/exclude 表。所有内容都按原样迁移。

**小心**
+ 在移除扩展程序之前先进行备份，因为移除扩展程序还会移除依赖对象和一些对数据库运行至关重要的数据。
+ 在确定 **pg\$1transport** 的 Worker 数量和 `work_mem` 值时，请考虑在源实例上的其他数据库上运行的实例类和进程。
+ 传输开始时，源数据库上的所有连接都将终止，数据库将进入只读模式。

**注意**  
在一个数据库上运行传输时，它不会影响同一个服务器上的其他数据库。****

**产品版本**
+ Amazon RDS for PostgreSQL 10.10 和更高版本，Amazon RDS for PostgreSQL 11.5 和更高版本。有关最新版本的信息，请参阅 Amazon RDS 文档中的[在数据库实例之间传输 PostgreSQL 数据库](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)。

## 架构
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-architecture"></a>

![\[在 Amazon RDS 数据库实例之间传输 PostgreSQL 数据库\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d5fb7ea3-32b7-4602-b382-3cf5c075c7c9/images/aec4d8d2-37a8-4136-9042-f9667ac4aebb.png)


## 工具
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-tools"></a>
+ **pg\$1transport** 提供了物理传输机制以移动每个数据库。通过以最少的处理流式传输数据库文件，物理传输移动数据的速度比传统的转储和加载过程快得多，并且需要最少的停机时间。PostgreSQL 可传输数据库使用拉取模式，其中，目标数据库实例从源数据库实例导入数据库。在准备源环境和目标环境时，您可以在数据库实例上安装此扩展程序，如本模式中所述。
+ [psql](https://www.postgresql.org/docs/11/app-psql.html) 使您能够连接和使用 PostgreSQL 数据库实例。要在系统上安装 **psql**，请参阅 [PostgreSQL 下载量](https://www.postgresql.org/download/)页面。

## 操作说明
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-epics"></a>

### 创建目标参数组
<a name="create-the-target-parameter-group"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建目标系统的参数组。 | 指定一个将其标识为目标参数组的组名；例如，`pgtarget-param-group`。有关说明，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating)。 | 数据库管理员 | 
| 修改参数组中的参数。 | 设置以下参数：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html)有关参数组的更多信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)。 | 数据库管理员 | 

### 创建源参数组
<a name="create-the-source-parameter-group"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建源系统的参数组。 | 指定一个将其标识为源参数组的组名；例如，`pgsource-param-group`。有关说明，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating)。 | 数据库管理员 | 
| 修改参数组中的参数。 | 设置以下参数：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html)有关参数组的更多信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)。 | 数据库管理员 | 

### 准备目标环境
<a name="prepare-the-target-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个新的 Amazon RDS for PostgreSQL 数据库实例，将源数据库传输到该数据库中。 | 根据业务需求确定实例类和 PostgreSQL 版本。 | 数据库管理员、系统管理员、数据库架构师 | 
| 修改目标的安全组以允许从实例通过数据库实例端口进行 EC2 连接。 | PostgreSQL 实例的默认端口为 5432。如果您使用的是其他端口，则必须为该 EC2 实例打开与该端口的连接。 | 数据库管理员、系统管理员 | 
| 修改实例，然后分配新的目标参数组。 | 例如 `pgtarget-param-group`。 | 数据库管理员 | 
| 重启 Amazon RDS 目标数据库实例。 | 参数 `shared_preload_libraries` 和 `max_worker_processes` 是静态参数，需要重新启动实例。 | 数据库管理员、系统管理员 | 
| 使用 psql 从 EC2 实例连接到数据库。 | 使用 命令： <pre>psql -h <rds_end_point> -p PORT -U username -d database -W</pre> | 数据库管理员 | 
| 创建 pg\$1transport 扩展程序。 | 以具有该 `rds_superuser` 角色的用户身份运行以下查询：<pre>create extension pg_transport;</pre> | 数据库管理员 | 

### 准备源环境
<a name="prepare-the-source-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 修改源的安全组以允许通过数据库实例端口从 Amazon EC2 实例和目标数据库实例进行连接 | 默认情况下，PostgreSQL 实例的端口为 5432。如果您使用的是其他端口，则必须为该 EC2 实例打开与该端口的连接。 | 数据库管理员、系统管理员 | 
| 修改实例，然后分配新的源参数组。 | 例如 `pgsource-param-group`。 | 数据库管理员 | 
| 重启 Amazon RDS 源数据库实例。 | 参数 `shared_preload_libraries` 和 `max_worker_processes` 是静态参数，需要重启实例。 | 数据库管理员 | 
| 使用 psql 从 EC2 实例连接到数据库。 | 使用 命令： <pre>psql -h <rds_end_point> -p PORT -U username -d database -W</pre> | 数据库管理员 | 
| 创建 pg\$1transport 扩展程序并从要传输的数据库中删除所有其他扩展程序。 | 如果源数据库上安装了 **pg\$1transport** 以外的任何扩展程序，则传输将失败。此命令必须由具有该 `rds_superuser` 角色的用户运行。 | 数据库管理员 | 

### 执行传输
<a name="perform-the-transport"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 执行试运行。 | 使用该 `transport.import_from_server` 函数先执行试运行：<pre>SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');</pre>此函数的最后一个参数（设置为 `true`）定义了试运行。此函数显示您在运行主传输时会看到的任何错误。在运行主传输之前解决错误。 | 数据库管理员 | 
| 如果试运行成功，则启动数据库传输。 | 运行该 `transport.import_from_server` 函数以执行传输。它连接到源并导入数据。 <pre>SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);</pre>此函数的最后一个参数（设置为 `false`）表示这不是试运行。 | 数据库管理员 | 
| 执行传输后步骤。 | 数据库传输完成后：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html) | 数据库管理员 | 

## 相关的资源
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-resources"></a>
+ [Amazon RDS 文档](https://docs.aws.amazon.com/rds/)
+ [pg\$1transport 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#PostgreSQL.TransportableDB.Setup)
+ [使用 RDS PostgreSQL 可传输数据库迁移数据库](https://aws.amazon.com/blogs/database/migrating-databases-using-rds-postgresql-transportable-databases/)（博客文章）
+ [PostgreSQL 下载量](https://www.postgresql.org/download/linux/redhat/)
+ [psql 实用程序](https://www.postgresql.org/docs/11/app-psql.html)
+ [创建数据库参数组](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html#USER_WorkingWithParamGroups.Creating)
+ [修改数据库参数组中的参数](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html#USER_WorkingWithParamGroups.Modifying)
+ [PostgreSQL 下载量](https://www.postgresql.org/download/)

# 更换平台
<a name="migration-replatform-pattern-list"></a>

**Topics**
+ [使用 AWS DMS 将 Microsoft SQL Server 数据库导出至 Amazon S3](export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms.md)
+ [将 Oracle CLOB 值迁移到 AWS 上 PostgreSQL 中的单独的行](migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws.md)
+ [将 Oracle 迁移 PeopleSoft 到亚马逊 RDS 定制版](migrate-oracle-peoplesoft-to-amazon-rds-custom.md)
+ [将 Oracle ROWID 功能迁移到 AWS 上的 PostgreSQL](migrate-oracle-rowid-functionality-to-postgresql-on-aws.md)
+ [将 Oracle 数据库错误代码迁移到 Amazon Aurora PostgreSQL-Compatible 数据库](migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.md)
+ [使用 AWS SCT 和 AWS DMS EC2 将亚马逊上的 SAP ASE 迁移到兼容 Aurora PostgreSQL 的亚马逊 Aurora](migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms.md)
+ [使用 ACM 将 Windows SSL 凭证迁移到应用程序负载均衡器](migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.md)
+ [将消息队列从 Microsoft Azure 服务总线迁移到 Amazon SQS](migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs.md)
+ [使用 Oracle 数据泵和 AWS DMS 将 Oracle JD Edwards EnterpriseOne 数据库迁移到 AWS](migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.md)
+ [使用 AWS DMS 将 Oracle PeopleSoft 数据库迁移到 AWS](migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.md)
+ [将本地 MySQL 数据库迁移至 Amazon RDS for MySQL](migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql.md)
+ [将本地 Microsoft SQL Server 数据库迁移至 Amazon RDS for SQL Server](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server.md)
+ [使用 Rclone 将数据从 Microsoft Azure Blob 迁移至 Amazon S3](migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone.md)
+ [从 Couchbase Server 迁移至 AWS 上的 Couchbase Capella](migrate-from-couchbase-server-to-couchbase-capella-on-aws.md)
+ [在 Amazon 上从 IBM WebSphere 应用程序服务器迁移到 Apache Tomcat EC2](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2.md)
+ [使用 Auto Scaling 从 IBM WebSphere 应用程序服务器迁移到亚马逊 EC2 上的 Apache Tomcat](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling.md)
+ [将 .NET 应用程序从 Microsoft Azure 应用服务迁移到 AWS Elastic Beanstalk](migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk.md)
+ [在 Amazon ECS 上从 Oracle 迁移 WebLogic 到 Apache Tomcat (ToMee)](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [使用 AWS DMS 将 Oracle 数据库从亚马逊迁移 EC2 到 Amazon RDS for Oracle](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms.md)
+ [使用 Logstash 将本地 Oracle 数据库迁移到亚马逊 OpenSearch 服务](migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash.md)
+ [将本地 Oracle 数据库迁移到 Amazon RDS for Oracle](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.md)
+ [使用 Oracle 数据泵将本地 Oracle 数据库迁移到 Amazon RDS for Oracle](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump.md)
+ [使用 pglogical 从 EC2 亚马逊上的 PostgreSQL 迁移到适用于 PostgreSQL 的亚马逊 RDS](migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.md)
+ [将本地 PostgreSQL 数据库迁移到 Aurora PostgreSQL](migrate-an-on-premises-postgresql-database-to-aurora-postgresql.md)
+ [将本地微软 SQL Server 数据库迁移到 EC2 运行 Linux 的亚马逊上的微软 SQL Server](migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux.md)
+ [使用链接服务器将本地 Microsoft SQL Server 数据库迁移至 Amazon RDS for SQL Server](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers.md)
+ [使用本机备份和还原将本地 Microsoft SQL Server 数据库迁移到 Amazon RDS for SQL Server。](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.md)
+ [使用 AWS DMS 和 AWS SCT 将 Microsoft SQL Server 数据库迁移到 Aurora MySQL](migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct.md)
+ [使用原生工具将本地 MariaDB 数据库迁移至 Amazon RDS for MariaDB](migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools.md)
+ [将本地 MySQL 数据库迁移至 Aurora MySQL](migrate-an-on-premises-mysql-database-to-aurora-mysql.md)
+ [使用 Percona、A XtraBackup mazon EFS 和 Amazon S3 将本地 MySQL 数据库迁移到 Aurora MySQL](migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3.md)
+ [使用 AWS App2Container 将本地 Java 应用程序迁移到 AWS](migrate-on-premises-java-applications-to-aws-using-aws-app2container.md)
+ [在 AWS 大型迁移中迁移共享文件系统](migrate-shared-file-systems-in-an-aws-large-migration.md)
+ [使用 Oracle GoldenGate 平面文件适配器将 Oracle 数据库迁移到 Amazon RDS for Oracle](migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.md)
+ [更改 Python 和 Perl 应用程序以支持数据库从Microsoft SQL Server 迁移至兼容 Amazon Aurora PostgreSQL 的版本](change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.md)

# 使用 AWS DMS 将 Microsoft SQL Server 数据库导出至 Amazon S3
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms"></a>

*Sweta Krishna，Amazon Web Services*

## Summary
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-summary"></a>

组织通常需要将数据库复制到 Amazon Simple Storage Service (Amazon S3) 以进行数据库迁移、备份和恢复、数据归档和数据分析。此模式描述了如何将 Microsoft SQL Server 数据库导出到Amazon S3。源数据库可以托管在本地，也可以托管在亚马逊弹性计算云 (Amazon EC2) 上，也可以托管在亚马逊网络服务 (AWS) 云上的微软 SQL Server 的亚马逊关系数据库服务 (Amazon RDS) 上。

使用 AWS Database Migration Service (AWS DMS) 导出数据。默认情况下，AWS DMS 以逗号分隔值 (.csv) 格式写入完全加载和更改数据捕获（CDC）数据。为了获得更紧凑的存储和更快的查询选项，此模式使用 Apache Parquet (.parquet) 格式选项。

## 先决条件和限制
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 账户的 AWS Identity and Access Management (IAM) 角色，具有对目标 S3 存储桶的写入、删除和标记访问权限，并且 AWS DMS (`dms.amazonaws.com`) 作为可信实体添加到此 IAM 角色
+ 本地微软 SQL Server 数据库（或 EC2 实例上的微软 SQL Server 或 Amazon RDS for SQL Server 数据库）
+ AWS 上的虚拟私有云（VPC）与 AWS Direct Connect 或虚拟专用网络（VPN）提供的本地网络之间的网络连接

**限制**
+ 3.4.7 之前的 AWS DMS 版本目前不支持启用了 vPC（网关 VPC）的 S3 存储桶。
+ 不支持在完全加载期间对源表结构进行更改。
+ 不支持 AWS DMS 完整大型二进制对象 (LOB) 模式。

**产品版本**
+ Microsoft SQL Server 版本 2005 或更高版本 (Enterprise、Standard、Workgroup 和 Developer 版)。
+ AWS DMS 版本 3.3.2 和更高版本中支持将 Microsoft SQL Server 版本 2019 作为源。

## 架构
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-architecture"></a>

**源技术堆栈**
+ 本地微软 SQL Server 数据库（或 EC2 实例上的微软 SQL Server 或 Amazon RDS for SQL Server 数据库）**** 

**目标技术堆栈**
+ AWS Direct Connect
+ AWS DMS
+ Amazon S3

**目标架构**

![\[数据通过 Direct Connect 从 SQL Server 数据库迁移至 AWS DMS，然后迁移至 S3 存储桶。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/75b8b20f-a1a8-4633-9816-1b370cc7e92c/images/85bd433c-4a0a-4825-8661-e53f53265191.png)


## 工具
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 通过标准的以太网光纤电缆将内部网络链接到 Direct Connect 位置。通过此连接，您可以直接创建连接到公有 Amazon Web Services 的虚拟接口，同时绕过网络路径中的互联网服务提供商。
+ [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

## 操作说明
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证数据库版本。 | 验证源数据库版本，并确保 AWS DMS 支持该版本。有关支持的 SQL Server 数据库版本的信息，请参阅[使用 Microsoft SQL Server 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)。 | 数据库管理员 | 
| 创建 VPC 和安全组。 | 在您的 Amazon Web Services account 中，创建 VPC 和安全组。有关更多信息，请参阅 [Amazon VPC 文档](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)。 | 系统管理员 | 
| 为 AWS DMS 任务创建用户。 | 在源数据库中创建 AWS DMS 用户，并授予其读权限。AWS DMS 将使用该用户。 | 数据库管理员 | 
| 测试数据库连接。 | 测试 AWS DMS 用户与 SQL Server 数据库实例的连接。 | 数据库管理员 | 
| 创建 S3 存储桶。 | 创建目标 S3 存储桶。此存储桶将存放至迁移的表数据。 | 系统管理员 | 
| 创建 IAM policy 和角色。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms.html) | 系统管理员 | 

### 使用 AWS DMS 迁移数据
<a name="migrate-data-by-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS DMS 复制实例。 | 登录 AWS 管理控制台，并打开 AWS DMS 控制台。在导航窗格中，选择**复制实例**，选择**创建复制实例**。有关说明，请参阅 AWS DMS 文档中的[步骤 1](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.ReplicationInstance)。 | 数据库管理员 | 
| 创建源和目标端点。 | 创建源和目标端点。测试从复制实例至源端点和目标端点的连接。有关说明，请参阅 AWS DMS 文档中的[步骤 2](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.Endpoints)。 | 数据库管理员 | 
| 创建复制任务。 | 创建复制任务，然后使用更改数据捕获 (CDC) 选择满载或满载，将数据从 SQL Server 迁移至 S3 存储桶。有关说明，请参阅 AWS DMS 文档中的[步骤 3](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.Tasks)。 | 数据库管理员 | 
| 启动数据复制。 | 启动复制任务并监控日志中是否存在错误。 | 数据库管理员 | 

### 验证数据
<a name="validate-the-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证迁移数据。 | 在控制台中，导航到您的目标 S3 存储桶。打开与源数据库同名子文件夹。确认该文件夹包含从源数据库迁移的所有表格。 | 数据库管理员 | 

### 清理 资源
<a name="clean-up-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭并删除临时 AWS 资源。 | 关闭您为数据迁移创建的临时 AWS 资源（例如 AWS DMS 复制实例），并在验证导出后将其删除。 | 数据库管理员 | 

## 相关的资源
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-resources"></a>
+ [AWS Database Migration Service 用户指南](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [使用 Microsoft SQL Server 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)
+ [使用 Amazon S3 作为 AWS Database Migration Service 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html)
+ [使用 S3 存储桶作为 AWS DMS 目标](https://repost.aws/knowledge-center/s3-bucket-dms-target) (AWS re：Post)

## 附加信息
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-additional"></a>

使用以下代码，为 AWS DMS 角色添加具有 S3 存储桶权限的 IAM policy。将 `bucketname`替换为您的桶的名称。

```
{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "s3:PutObject",
                 "s3:DeleteObject"
             ],
             "Resource": [
                 "arn:aws:s3:::bucketname*"
             ]
         },
         {
             "Effect": "Allow",
             "Action": [
                 "s3:ListBucket"
             ],
             "Resource": [
                 "arn:aws:s3:::bucketname*"
             ]
         }
     ]
 }
```

# 将 Oracle CLOB 值迁移到 AWS 上 PostgreSQL 中的单独的行
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws"></a>

*Sai Krishna Namburu 和 Sindhusha Paturu，Amazon Web Services*

## Summary
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-summary"></a>

此模式描述了如何在 Amazon Aurora PostgreSQL-Compatible Edition 和 Amazon Relational Database Service（Amazon RDS）for PostgreSQL 中将 Oracle 字符大型对象（CLOB）值拆分为单独的行。PostgreSQL 不支持 CLOB 数据类型。

在 Oracle 源数据库中标识具有间隔分区的表，并捕获表名、分区类型、分区间隔和其他元数据并将其加载到目标数据库中。您可以使用 AWS Database Migration Service（AWS DMS）将大小小于 1 GB 的 CLOB 数据作为文本加载到目标表中，也可以用 CSV 格式导出数据，将其加载到 Amazon Simple Storage Service（Amazon S3）存储桶中，然后将其迁移到目标 PostgreSQL 数据库。

迁移后，您可以使用此模式提供的自定义 PostgreSQL 代码，根据换行符标识符（`CHR(10)`）将 CLOB 数据拆分为单独的行，然后填充目标****表。 

## 先决条件和限制
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-prereqs"></a>

**先决条件**
+ Oracle 数据库表，具有间隔分区和具有 CLOB 数据类型的记录。
+ Aurora PostgreSQL-Compatible 或 Amazon RDS for PostgreSQL 数据库，其表结构与源表相似（列和数据类型相同）。

**限制**
+ CLOB 值不能超过 1 GB。
+ 目标表中的每一行都必须有一个换行符字符标识符。

**产品版本**
+ Oracle 12c
+ Aurora PostgreSQL 11.6

## 架构
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-architecture"></a>

下图显示了包含 CLOB 数据的 Oracle 源表，以及 Aurora PostgreSQL-Compatible 版本 11.6 中的等效 PostgreSQL 表。

![\[CLOB 源表和等效的 PostgreSQL 目标表。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/55806ee7-6a9f-4058-9a47-a07de68223ca/images/79b9d4b9-6f20-4db5-8ca8-2a599769a498.png)


## 工具
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-tools"></a>

**Amazon Web Services**
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [Amazon Relational Database Service（Amazon RDS）for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展 PostgreSQL 关系数据库。
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**其他工具**

您可以使用以下客户端工具连接、访问和管理 Aurora PostgreSQL-Compatible 数据库和 Amazon RDS for PostgreSQL 数据库。（此模式中不使用这些工具。）
+ [pgAdmin](https://www.pgadmin.org/) 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面，可帮助您创建、维护和使用数据库对象。
+ [DBeaver](https://dbeaver.io/)是面向开发人员和数据库管理员的开源数据库工具。您可以使用该工具来操作、监控、分析、管理和迁移数据。

## 最佳实践
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-best-practices"></a>

有关将数据库从 Oracle 迁移到 PostgreSQL 的最佳实践，请参阅 AWS Blog 文章[将 Oracle 数据库迁移至 Amazon RDS PostgreSQL 或 Amazon Aurora PostgreSQL 的最佳实践：迁移过程和基础设施注意事项](https://aws.amazon.com/blogs/database/best-practices-for-migrating-an-oracle-database-to-amazon-rds-postgresql-or-amazon-aurora-postgresql-migration-process-and-infrastructure-considerations/)。

有关配置 AWS DMS 任务以迁移大型二进制对象的最佳实践，请参阅 AWS DMS 文档中的[迁移大型二进制对象 (LOBs)](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html#CHAP_BestPractices.LOBS)。

## 操作说明
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-epics"></a>

### 识别 CLOB 数据
<a name="identify-the-clob-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 分析 CLOB 数据。 | 在 Oracle 源数据库中，分析 CLOB 数据以查看其是否包含列标题，这样您就可以确定将数据加载到目标表中的方法。 要分析输入数据，请使用以下查询。`SELECT * FROM clobdata_or;  ` | 开发者版 | 
| 将 CLOB 数据加载到目标数据库。 | 将包含 CLOB 数据的表迁移到 Aurora 或 Amazon RDS 目标数据库中的临时（暂存）表。您可以使用 AWS DMS，也可以将数据作为 CSV 文件上传到 Amazon S3 存储桶。有关使用 AWS DMS 完成此任务的信息，请参阅 AWS DMS 文档中的[使用 Oracle 数据库作为源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)以及[使用 PostgreSQL 作为目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)。有关使用 Amazon S3 完成此任务的信息，请参阅 AWS DMS 文档中的[使用Amazon S3 作为目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html)。 | 迁移工程师、数据库管理员 | 
| 验证目标 PostgreSQL 表。 | 在目标数据库中使用以下查询，根据源数据验证目标数据（包括标头）。<pre>SELECT * FROM clobdata_pg;<br />SELECT * FROM clobdatatarget;</pre>将结果与源数据库的查询结果（从第一步开始）进行比较。 | 开发者版 | 
| 将 CLOB 数据拆分为单独的行。 | 运行[其他信息](#migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-additional)部分中提供的自定义 PostgreSQL 代码，拆分 CLOB 数据并将其插入目标 PostgreSQL 表中的单独行中。 | 开发者版 | 

### 验证数据。
<a name="validate-the-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证目标表中的数据。 | 使用以下查询验证插入到目标表中的数据。<pre>SELECT * FROM clobdata_pg;<br />SELECT * FROM clobdatatarget;</pre> | 开发者版 | 

## 相关资源
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-resources"></a>
+ [CLOB 数据类型](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF0021)（Oracle 文档）
+ [数据类型](https://www.postgresql.org/docs/11/datatype.html)（PostgreSQL 文档）

## 附加信息
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-additional"></a>

**用于拆分 CLOB 数据的 PostgreSQL 函数**

```
do
$$
declare
totalstr varchar;
str1 varchar;
str2 varchar;
pos1 integer := 1;
pos2 integer ;
len integer;


begin
        select rawdata||chr(10) into totalstr from clobdata_pg;
        len :=  length(totalstr) ;
        raise notice 'Total length : %',len;
        raise notice 'totalstr : %',totalstr;
        raise notice 'Before while loop';


        while pos1 < len  loop


                  select position (chr(10) in totalstr) into pos2;
                 raise notice '1st position of new line : %',pos2;


                str1 := substring (totalstr,pos1,pos2-1);
                raise notice 'str1 : %',str1;


                   insert into clobdatatarget(data) values (str1);
                   totalstr := substring(totalstr,pos2+1,len);
                   raise notice 'new totalstr :%',totalstr;
                len :=  length(totalstr) ;


        end loop;
end
$$
LANGUAGE 'plpgsql' ;
```

**输入和输出示例**

在迁移数据之前，您可以使用以下示例试用 PostgreSQL 代码。

创建一个包含三行输入的 Oracle 数据库。

```
CREATE TABLE clobdata_or (
id INTEGER GENERATED ALWAYS AS IDENTITY,
rawdata clob  );


insert into clobdata_or(rawdata) values (to_clob('test line 1') || chr(10) || to_clob('test line 2') || chr(10) || to_clob('test line 3') || chr(10));
COMMIT;


SELECT * FROM clobdata_or;
```

这会显示以下输出。


|  |  | 
| --- |--- |
| id | rawdata | 
| 1 | 测试行 1 测试行 2 测试行 3 | 

将源数据加载到 PostgreSQL 暂存表（`clobdata_pg`）中进行处理。

```
SELECT * FROM clobdata_pg;

CREATE TEMP TABLE clobdatatarget (id1 SERIAL,data VARCHAR );

<Run the code in the additional information section.>

SELECT * FROM clobdatatarget;
```

这会显示以下输出。


|  |  | 
| --- |--- |
| id1 | 数据 | 
| 1 | 测试行 1 | 
| 2 | 测试行 2 | 
| 3 | 测试行 3 | 

# 将 Oracle 迁移 PeopleSoft 到亚马逊 RDS 定制版
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom"></a>

*Gaurav Gupta，Amazon Web Services*

## Summary
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-summary"></a>

[Oracle PeopleSoft](https://www.oracle.com/applications/peoplesoft/) 是一款适用于企业级流程的企业资源规划 (ERP) 解决方案。 PeopleSoft 具有三层架构：客户端、应用程序和数据库。 PeopleSoft 可以在[亚马逊关系数据库服务 (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 上运行。现在，您还可以 PeopleSoft 在 [Amazon RDS Custom](https://aws.amazon.com/rds/custom/) 上运行，它提供对底层操作系统的访问权限。

[适用于 Oracle 的 Amazon RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/working-with-custom-oracle.html) 是一项托管式数据库服务，适用于需要访问底层操作系统和数据库环境的旧版、自定义和打包应用程序。当您将 Oracle 数据库迁移到 Amazon RDS Custom 时，Amazon Web Services (AWS) 可以管理备份任务和高可用性，而您可以专注于维护 PeopleSoft 应用程序和功能。有关迁移时需要考虑的关键因素，请参阅 AWS Prescriptive Guidance 中的 [Oracle 数据库迁移策略](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/strategies.html)。

此模式侧重于使用 Oracle Recovery Manager (RMAN) 备份将亚马逊弹性计算云 (Amazon EC2) 上的 PeopleSoft 数据库迁移到亚马逊 RDS Custom 的步骤。它在 EC2 实例和 [Amazon RDS Custom 之间使用亚马逊弹性文件系统 (Amazon EFS)](https://aws.amazon.com/efs/) 共享文件系统，尽管您也可以使用亚马逊 FSx 或任何共享云端硬盘。该模式使用 RMAN 完整备份（有时也称为 0 级备份）。

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

**先决条件**
+ 在搭载 Oracle Linux 7、Oracle Linux 8、Red Hat Enterprise Linux （RHEL） 7 或 RHEL 8 的 Amazon EC2 上运行的 Oracle 版本 19C 源数据库。在此模式的示例中，源数据库名称为 `FSDMO92`，但这不是必需的。
**注意**  
您还可以将此模式用于本地 Oracle 源数据库。您必须在本地网络和虚拟私有云（VPC）之间建立适当的网络连接。
+ 一个 PeopleSoft 9.2 的演示实例。
+ 单个 PeopleSoft 应用程序层。但是，您可以调整此模式以使用多个应用程序层。
+ Amazon RDS Custom 配置了至少 8 GB 的交换空间。

**限制**

此模式不支持以下配置：
+ 将数据库 `ARCHIVE_LAG_TARGET` 参数设置为 60–7200 范围之外的值
+ 禁用数据库实例日志模式 (`NOARCHIVELOG`)
+ 关闭 EC2 实例的 Amazon Elastic Block Store (Amazon EBS) 优化属性
+ 修改附加到 EC2 实例的原始 EBS 卷
+ 添加新的 EBS 卷或将卷类型从 gp2 更改为 gp3
+ 更改 `LOG_ARCHIVE_FORMAT` 参数的扩展名格式（需要 `*.arc`）
+ 多路复用或更改控制文件位置和名称（必须为 `/rdsdbdata/db/*DBNAME*/controlfile/control-01.ctl`）

有关这些配置和其他不支持的配置的更多信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-troubleshooting.html#custom-troubleshooting.fix-unsupported)。

**产品版本**

有关 Amazon RDS Custom 支持的 Oracle Database 版本和实例类型，请参阅 [Amazon RDS Custom for Oracle 的要求和限制](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/UserGuide/custom-reqs-limits.html)

## 架构
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-architecture"></a>

**目标技术堆栈**
+ 应用程序负载均衡器
+ Amazon EFS
+ 适用于 Oracle 的 Amazon RDS Custom
+ AWS Secrets Manager
+ Amazon Simple Storage Service（Amazon S3）

**目标架构**

以下架构图表示在 AWS 的单个[可用区](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)中运行的 PeopleSoft 系统。应用程序层可通过[应用程序负载均衡器](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/)进行访问。应用程序和数据库都位于私有子网中，Amazon RDS Custom 和 Amazon EC2 数据库实例使用 Amazon EFS 共享文件系统来存储和访问 RMAN 备份文件。Amazon S3 用于创建自定义 RDS Oracle 引擎和存储重做日志元数据。

![\[Web 服务器、应用程序服务器、Amazon RDS Custom、EC2 数据库实例和私有子网中的 Amazon EFS。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/bd423dfe-f3c8-42d9-ac84-bf3d093c52bc/images/0e9a6431-e6c7-4047-ae6c-85311938041f.jpeg)


## 工具
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-tools"></a>

**工具**

*Amazon Web Services*
+ [适用于 Oracle 的 Amazon RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/working-with-custom-oracle.html) 是一项托管式数据库服务，适用于需要访问底层操作系统和数据库环境的旧版、自定义和打包应用程序。它能自动执行数据库管理任务，如备份和高可用性。 
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) 可帮助您在 Amazon Web Services Cloud 中创建和配置共享文件系统。此模式使用 Amazon EFS 共享文件系统来存储和访问 RMAN 备份文件。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 帮助您将代码中的硬编码凭证（包括密码）替换为对 Secrets Manager 的 API 调用，以便以编程方式检索密钥。在这种模式中，您可以从 Secrets Manager 检索数据库用户密码来创建 `RDSADMIN` 和 `ADMIN` 用户以及更改 `sys` 和 `system` 密码。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [弹性负载均衡（ELB）](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)将传入的应用程序或网络流量分配到多个目标。例如，您可以在一个或多个可用区中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例、容器和 IP 地址之间分配流量。此模式使用应用程序负载均衡器。

*其他工具*
+ Oracle Recovery Manager (RMAN) 为 Oracle 数据库提供备份和恢复支持。此模式使用 RMAN 对在 Amazon RDS Custom 上还原的 Amazon EC2 上的源 Oracle 数据库执行热备份。

## 最佳实践
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-best-practices"></a>
+ 对于数据库初始化参数，请自定义 Amazon RDS 自定义数据库实例为其提供的标准 pfile， PeopleSoft 而不是使用 Oracle 源数据库中的 spfile。这是因为在 Amazon RDS Custom 中创建只读副本时，空格和评论会导致问题。有关数据库初始化参数的更多信息，请参阅 Oracle Support Note 1100831.1（需要 [Oracle 支持](https://support.oracle.com/portal/)账户）。
+ 默认情况下，Amazon RDS Custom 使用 Oracle 自动内存管理。如果您想使用 Hugemem 内核，可以将 Amazon RDS Custom 配置为改用自动共享内存管理。
+ 默认情况下启用 `memory_max_target` 参数。框架会在后台使用它来创建只读副本。
+ 启用 Oracle 闪回数据库。此功能在故障转移（而非切换）测试场景中恢复备用数据库时非常有用。

## 操作说明
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-epics"></a>

### 设置数据库实例和文件系统
<a name="set-up-the-db-instance-and-file-system"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建数据库实例。 | 在 Amazon RDS 控制台中，使用名为 FSDMO92 （或您的源数据库名称）的数据库名称创建适用于 Oracle 的 Amazon RDS 自定义数据库实例。有关说明，请参阅 AWS 文档中的[使用 Amazon RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-custom.html) 和博客文章[Amazon RDS Custom for Oracle – 数据库环境中的新控制功能](https://aws.amazon.com/blogs/aws/amazon-rds-custom-for-oracle-new-control-capabilities-in-database-environment/)。这样可以确保将数据库名称设置为与源数据库相同的名称。（如果留空，则 EC2 实例和数据库名称将设置为 `ORCL`。） | 数据库管理员 | 

### 对源 Amazon EC2 数据库执行 RMAN 完整备份
<a name="perform-an-rman-full-backup-of-the-source-amazon-ec2-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建备份脚本。 | 创建 RMAN 备份脚本以将数据库备份到您安装的 Amazon EFS 文件系统（以下示例中为 `/efs`）。您可以使用示例代码或运行一个现有的 RMAN 脚本。<pre>#!/bin/bash<br />Dt=`date +'%Y%m%d-%H%M'`<br />BACKUP_LOG="rman-${ORACLE_SID}-$Dt"<br />export TAGDATE=`date +%Y%m%d%H%M`;<br />LOGPATH=/u01/scripts/logs<br />rman target / >> $LOGPATH/rman-${ORACLE_SID}-$Dt << EOF<br />SQL "ALTER SYSTEM SWITCH LOGFILE";<br />SQL "ALTER SESSION SET NLS_DATE_FORMAT="DD.MM.YYYY HH24:MI:SS"";<br />RUN<br />{<br />  ALLOCATE CHANNEL ch11 TYPE DISK MAXPIECESIZE 5G;<br />  ALLOCATE CHANNEL ch12 TYPE DISK MAXPIECESIZE 5G;<br />  BACKUP AS COMPRESSED BACKUPSET FULL DATABASE FORMAT '/efs/rman_backup/FSCM/%d_%T_%s_%p_FULL' ;<br />  SQL "ALTER SYSTEM ARCHIVE LOG CURRENT";<br />  BACKUP FORMAT '/efs/rman_backup/FSCM/%d_%T_%s_%p_ARCHIVE' ARCHIVELOG ALL DELETE ALL INPUT ;<br />  BACKUP CURRENT CONTROLFILE FORMAT '/efs/rman_backup/FSCM/%d_%T_%s_%p_CONTROL';<br />}<br />EXIT;<br />EOF<br />  </pre> | 数据库管理员 | 
| 运行备份脚本。 | 要运行 RMAN 备份脚本，请以 Oracle 主用户身份登录，然后运行该脚本。<pre>$  chmod a+x rman_backup.sh<br />$ ./rman_backup.sh &</pre> | 数据库管理员 | 
| 检查是否存在错误，并记下备份文件的名称。 | 检查 RMAN 日志文件中的错误。如果一切正常，请运行以下命令列出控制文件的备份。<pre>RMAN> list backup of controlfile;<br /><br />using target database control file instead of recovery catalog<br /></pre>记下输出文件的名称。<pre>List of Backup Sets<br />===================<br /><br />BS Key  Type LV Size       Device Type Elapsed Time Completion Time<br />------- ---- -- ---------- ----------- ------------ ---------------<br />12      Full    21.58M     DISK        00:00:01     13-JUL-22<br />        BP Key: 12   Status: AVAILABLE  Compressed: NO  Tag: TAG20220713T150155<br />        Piece Name: /efs/rman_backup/FSCM/FSDMO92_20220713_12_1_CONTROL<br /> Control File Included: Ckp SCN: 16559159985898   Ckp time: 13-JUL-22<br /></pre>当您在 Amazon RDS Custom 上还原数据库时，您将使用备份控制文件 `/efs/rman_backup/FSCM/FSDMO92_20220713_12_1_CONTROL`。 | 数据库管理员 | 

### 关闭源应用程序层
<a name="shut-down-the-source-application-tier"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭应用程序。 | 若要关闭源应用程序层，请使用 `psadmin` 实用程序或 `psadmin` 命令行实用程序。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | 数据库管理员、管理员 PeopleSoft  | 

### 配置目标 Amazon RDS Custom 数据库
<a name="configure-the-target-amazon-rds-custom-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 nfs-utils rpm 包。 | 要安装 `nfs-utils rpm` 程序包，请运行以下命令。<pre>$ yum install -y nfs-utils<br /></pre> | 数据库管理员 | 
| 附加 EFS 存储。 | 从 Amazon EFS 控制台页面获取 Amazon EFS 附加命令。使用网络文件系统 (NFS) 客户端在 Amazon RDS 实例上附加 EFS 文件系统。<pre>sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-xxxxxxxxxx.efs.eu-west-1.amazonaws.com:/ /efs<br />sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-xxxxxxxxxx.efs.eu-west-1.amazonaws.com:/ /efs</pre> | 数据库管理员 | 

### 删除起始数据库并创建用于存储数据库文件的目录
<a name="drop-the-starter-database-and-create-the-directories-to-store-the-database-files"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 暂停自动化模式。 | 在继续执行后续步骤之前，您必须暂停 Amazon RDS Custom 数据库实例的[自动化模式](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-managing.html#custom-managing.pausing)，以确保自动化不会干扰 RMAN 恢复活动。您可以使用 AWS 管理控制台或 AWS 命令行界面（AWS CLI）命令暂停自动化（请确保您已先[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)）。<pre>aws rds modify-db-instance \<br />--db-instance-identifier peoplesoft-fscm-92 \<br />--automation-mode all-paused \<br />--resume-full-automation-mode-minute 360 \<br />--region eu-west-1<br /></pre>当您指定暂停的持续时间时，请确保为 RMAN 恢复留出足够的时间。这取决于源数据库的大小，因此请相应地修改 360 值。另外，请确保暂停自动化的总时间不与数据库的备份或维护时段重叠。 | 数据库管理员 | 
| 创建和修改的参数文件 PeopleSoft | 要创建和修改的 pfile PeopleSoft，请使用使用 Amazon RDS 自定义数据库实例创建的标准 pfile。添加你需要的参数 PeopleSoft。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | 数据库管理员 | 
| 删除起始数据库。 | 若要删除现有的 Amazon RDS Custom 数据库，请使用以下代码。<pre>$ sqlplus / as sysdba<br />SQL> shutdown immediate;<br />SQL> startup mount exclusive restrict;<br />SQL> drop database;<br />SQL> exit</pre> |  | 
| 从备份中恢复 Amazon RDS Custom 数据库。 | 使用以下脚本恢复数据库。该脚本将首先恢复控制文件，然后从存储在 EFS 附加上的备份片段恢复整个数据库。<pre>#!/bin/bash<br />Dt=`date +'%Y%m%d-%H%M'`<br />BACKUP_LOG="rman-${ORACLE_SID}-$Dt"<br />export TAGDATE=`date +%Y%m%d%H%M`;<br />LOGPATH=/rdsdbdata/scripts/logs<br />rman target / >> $LOGPATH/rman-${ORACLE_SID}-$Dt << EOF<br />restore controlfile from "/efs/rman_backup/FSCM/FSDMO92_20220713_12_1_CONTROL";<br />alter database mount;<br />run<br />{<br />set newname for database to '/rdsdbdata/db/FSDMO92_A/datafile/%f_%b';<br />SET NEWNAME FOR TEMPFILE 1 TO '/rdsdbdata/db/FSDMO92_A/datafile/%f_%b';<br />RESTORE DATABASE;<br />SWITCH DATAFILE ALL;<br />SWITCH TEMPFILE ALL;<br />RECOVER DATABASE;<br />}<br />EOF<br />sqlplus / as sysdba >> $LOGPATH/rman-${ORACLE_SID}-$Dt<<-EOF<br />ALTER DATABASE RENAME FILE '/u01/psoft/db/oradata/FSDMO92/redo01.log' TO '/rdsdbdata/db/FSDMO92_A/onlinelog/redo01.log';<br />ALTER DATABASE RENAME FILE '/u01/psoft/db/oradata/FSDMO92/redo02.log' TO '/rdsdbdata/db/FSDMO92_A/onlinelog/redo02.log';<br />ALTER DATABASE RENAME FILE '/u01/psoft/db/oradata/FSDMO92/redo03.log' TO '/rdsdbdata/db/FSDMO92_A/onlinelog/redo03.log';<br />alter database clear unarchived logfile group 1;<br />alter database clear unarchived logfile group 2;<br />alter database clear unarchived logfile group 3;<br />alter database open resetlogs;<br />EXIT<br />EOF<br /></pre> | 数据库管理员 | 

### 从 Secrets Manager 中检索密码，创建用户和更改密码
<a name="retrieve-passwords-from-secrets-manager-create-users-and-change-passwords"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 Secrets Manager 中检索密码。 | 您可以使用 AWS 管理控制台或 AWS CLI 执行此步骤。以下步骤显示了控制台的说明。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | 数据库管理员 | 
| 创建 RDSADMIN 用户。 | `RDSADMIN` 是用于监控和编排 Amazon RDS Custom 数据库实例的数据库用户。由于起始数据库已被删除，并且目标数据库已使用 RMAN 从源恢复，因此您必须在恢复操作后重新创建此用户，以确保 Amazon RDS Custom 监控能按预期运行。您还必须为 `RDSADMIN` 用户创建单独的配置文件和表空间。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | 数据库管理员 | 
| 创建主用户。 | 由于起始数据库已被删除，并且目标数据库已使用 RMAN 从源中恢复，因此您必须重新创建主用户。在此示例中，主用户名为 `admin`。<pre>SQL> create user admin identified by <password>;<br />SQL> grant dba to admin</pre> | 数据库管理员 | 
| 更改系统密码。 | 使用您从 Secrets Manager 中检索到的密码更改系统密码。<pre>SQL> alter user sys identified by xxxxxxxxxxx;<br />SQL> alter user system identified by xxxxxxxxxx;</pre>如果您不更改这些密码，Amazon RDS Custom 会显示错误消息：“数据库监控用户或用户凭证已更改。” | 数据库管理员 | 

### 配置 Amazon RDS 自定义的 TNS 条目和 PeopleSoft
<a name="configure-the-tns-entries-for-amazon-rds-custom-and-peoplesoft"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 tnsnames 文件。 | 若要从应用程序层连接到数据库，请配置 `tnsnames.ora` 文件，以便您可以从应用程序层连接到数据库。在以下示例中，您可以看到有一个指向 `tnsnames.ora` 文件的软链接，但该文件默认为空。 <pre>$ cd /rdsdbbin/oracle/network/admin<br />$ ls -ltr<br />-rw-r--r-- 1 rdsdb database 1536 Feb 14  2018 shrept.lst<br />lrwxrwxrwx 1 rdsdb database   30 Apr  5 13:19 listener.ora -> /rdsdbdata/config/listener.ora<br />lrwxrwxrwx 1 rdsdb database   28 Apr  5 13:19 sqlnet.ora -> /rdsdbdata/config/sqlnet.ora<br />lrwxrwxrwx 1 rdsdb database   30 Apr  5 13:19 tnsnames.ora -> /rdsdbdata/config/tnsnames.ora</pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | 数据库管理员 | 

### 创建 spfile 软链接
<a name="create-the-spfile-softlink"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 spfile 软链接。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | 数据库管理员 | 

### 执行迁移后步骤
<a name="perform-post-migration-steps"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证架构、连接和维护任务。 | 若要完成迁移，请执行以下任务。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | 数据库管理员 | 

## 相关的资源
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-resources"></a>
+ [使用 Amazon RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-custom.html)
+ [适用于 Oracle 的 Amazon RDS Custom — 数据库环境中的新控制功能](https://aws.amazon.com/blogs/aws/amazon-rds-custom-for-oracle-new-control-capabilities-in-database-environment/)（博客文章）
+ [将适用于 Oracle 的 Amazon RDS Custom 与 Amazon EFS 集成](https://aws.amazon.com/blogs/database/integrate-amazon-rds-custom-for-oracle-with-amazon-efs/)（博客文章）
+ [将 Amazon RDS 配置为 Oracle PeopleSoft 数据库](https://d1.awsstatic.com/whitepapers/configuring-amazon-rds-as-peoplesoft-database.pdf)（AWS 白皮书）

# 将 Oracle ROWID 功能迁移到 AWS 上的 PostgreSQL
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws"></a>

*Rakesh Raghav 和 Ramesh Pathuri，Amazon Web Services*

## Summary
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-summary"></a>

此模式描述了将甲骨文数据库中的`ROWID`伪列功能迁移到适用于 PostgreSQL 的亚马逊关系数据库服务（亚马逊 RDS）、兼容亚马逊 Aurora PostgreSQL 的版本或亚马逊弹性计算云（亚马逊）中的 PostgreSQL 数据库的选项。 EC2

在 Oracle 数据库中，`ROWID` 伪列是表中某一行的物理地址。即使表中不存在主键，该伪列也用于唯一标识行。PostgreSQL 有一个名为 `ctid` 的类似伪列，但它不能用作 `ROWID`。正如 [PostgreSQL 文档](https://www.postgresql.org/docs/current/ddl-system-columns.html)中所述，`ctid` 可能会在更新后或每次 `VACUUM` 进程后发生变化。

您可以通过三种方式在 PostgreSQL 中创建 `ROWID` 伪列功能：
+ 使用主键列代替 `ROWID` 来标识表中的一行。
+ 在表中使用逻辑 primary/unique 键（可能是复合键）。 
+ 添加一个包含自动生成值的列，并使其成为模仿`ROWID`的 primary/unique 关键。

此模式将引导您完成所有三种实现，并描述每个选项的优缺点。

## 先决条件和限制
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 程序 Language/PostgreSQL (pl/pgSQL) 编码专业知识
+ 源 Oracle 数据库
+ 兼容 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 的集群，或者托管 PostgreSQL 数据库的实 EC2 例

**限制**
+ 此模式为 `ROWID` 功能提供了解决方法。PostgreSQL 不提供与 Oracle 数据库中的 `ROWID` 等效的项。

**产品版本**
+ PostgreSQL 11.9 或更高版本

## 架构
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-architecture"></a>

**源技术堆栈**
+ Oracle Database

**目标技术堆栈**
+ 兼容 Aurora PostgreSQL、适用于 PostgreSQL 的亚马逊 RDS 或者带有 PostgreSQL 数据库的实例 EC2 

![\[在 AWS 上将 Oracle 数据库转换为 PostgreSQL\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/9a2ce994-4f68-4975-aab2-796cc20a3c82/images/6e7c2ef6-f440-476a-9003-f1f166718e15.png)


**实施选项**

有三个选项可以解决 PostgreSQL 中缺少 `ROWID` 支持的问题，具体取决于您的表是否具有主键或唯一索引、逻辑主键或标识属性。您的选择取决于您的项目时间表、当前的迁移阶段以及对应用程序和数据库代码的依赖关系。


| 
| 
| 选项 | 描述 | 优点 | 缺点 | 
| --- |--- |--- |--- |
| **主键或唯一索引** | 如果您的 Oracle 表具有主键，您可以使用该键的属性来唯一标识一行。  | 不依赖于专有数据库功能。对性能的影响最小，因为主键字段已编制索引。 | 需要更改依赖于 `ROWID` 的应用程序和数据库代码才能切换到主键字段。  | 
| **逻辑 primary/unique 密钥** | 如果您的 Oracle 表具有逻辑主键，您可以使用该键的属性来唯一标识一行。逻辑主键由可以唯一标识行的一个属性或一组属性组成，但不会通过约束在数据库上强制执行。 | 不依赖于专有数据库功能。 | 需要更改依赖于 `ROWID` 的应用程序和数据库代码才能切换到主键字段。如果未对逻辑主键的属性编制索引，则会对性能产生重大影响。不过，您可以添加唯一索引来防止出现性能问题。 | 
| **标识属性** | 如果您的 Oracle 表没有主键，您可以创建一个附加字段作为 `GENERATED ALWAYS AS IDENTITY`。每当将数据插入到表中时，此属性都会生成一个唯一值，因此它可用于唯一标识数据操作语言 （DML） 操作的行。 | 不依赖于专有数据库功能。PostgreSQL 数据库会填充该属性并保持其唯一性。 | 需要更改依赖于 `ROWID` 的应用程序和数据库代码才能切换到标识属性。如果未对附加字段编制索引，则会对性能产生重大影响。不过，您可以添加一个索引来防止出现性能问题。 | 

## 工具
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-tools"></a>
+ [Amazon Relational Database Service（Amazon RDS）for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展 PostgreSQL 关系数据库。
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。在此模式中，您可以使用 AWS CLI 通过 **pgAdmin** 运行 SQL 命令。
+ [pgAdmin](https://www.pgadmin.org/) 是一种适用于 PostgreSQL 的开源管理工具。它提供了一个图形界面，可帮助您创建、维护和使用数据库对象。
+ [AWS Schema Conversion Tool（AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式来支持异构数据库迁移。

## 操作说明
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-epics"></a>

### 标识源表
<a name="identify-the-source-tables"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 识别使用 `ROWID` 属性的 Oracle 表。 | 使用 AWS Schema Conversion Tool (AWS SCT) 来识别具有 `ROWID` 功能的 Oracle 表。有关更多信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.ToPostgreSQL.html#CHAP_Source.Oracle.ToPostgreSQL.ConvertRowID)。—或者—在 Oracle 中，使用 `DBA_TAB_COLUMNS` 视图来标识具有 `ROWID` 属性的表。这些字段可用于存储 10 字节的字母数字字符。确定用法，并将其转换为 `VARCHAR` 字段（如果适用）。 | 数据库管理员或开发人员 | 
| 标识引用这些表的代码。 | 使用 AWS SCT 生成迁移评测报告来识别受 `ROWID` 影响的程序。有关更多信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_AssessmentReport.html)。—或者—在源 Oracle 数据库中，使用 `dba_source` 表的文本字段来标识使用 `ROWID` 功能的对象。 | 数据库管理员或开发人员 | 

### 确定主键用法
<a name="determine-primary-key-usage"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 标识没有主键的表。 | 在源 Oracle 数据库中，使用 `DBA_CONSTRAINTS` 标识没有主键的表。这些信息将帮助您确定每个表的策略。例如：<pre>select dt.*<br />from dba_tables dt<br />where not exists (select 1<br />                  from all_constraints ct<br />                  where ct.owner = Dt.owner<br />                    and ct.table_name = Dt.table_name<br />                    and ct.constraint_type = 'P'<br />                  )<br />and dt.owner = '{schema}'</pre> | 数据库管理员或开发人员 | 

### 确定并应用解决方案
<a name="identify-and-apply-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 对具有已定义主键或逻辑主键的表应用更改。 | 对[其他信息](#migrate-oracle-rowid-functionality-to-postgresql-on-aws-additional)部分中显示的应用程序和数据库代码进行更改，以使用唯一主键或逻辑主键来标识表中的行。 | 数据库管理员或开发人员 | 
| 向没有定义主键或逻辑主键的表添加附加字段。 | 添加 `GENERATED ALWAYS AS IDENTITY` 类型的属性。对[其他信息](#migrate-oracle-rowid-functionality-to-postgresql-on-aws-additional)部分中显示的应用程序和数据库代码进行更改。 | 数据库管理员或开发人员 | 
| 如有必要，请添加索引。 | 为附加字段或逻辑主键添加索引以提高 SQL 性能。 | 数据库管理员或开发人员 | 

## 相关资源
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-resources"></a>
+ [PostgreSQL CTID](https://www.postgresql.org/docs/current/ddl-system-columns.html)（PostgreSQL 文档）
+ [生成的列](https://www.postgresql.org/docs/current/ddl-generated-columns.html)（PostgreSQL 文档）
+ [ROWID 伪列](https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/ROWID-Pseudocolumn.html#GUID-F6E0FBD2-983C-495D-9856-5E113A17FAF1)（Oracle 文档）

## 附加信息
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-additional"></a>

以下各节提供了 Oracle 和 PostgreSQL 代码示例来说明这三种方法。

**场景 1：使用主唯一键**

在以下示例中，您将创建表 `testrowid_s1`，并使用 `emp_id` 作为主键。

*Oracle 代码：*

```
create table testrowid_s1 (emp_id integer, name varchar2(10), CONSTRAINT testrowid_pk PRIMARY KEY (emp_id));
INSERT INTO testrowid_s1(emp_id,name) values (1,'empname1');
INSERT INTO testrowid_s1(emp_id,name) values (2,'empname2');
INSERT INTO testrowid_s1(emp_id,name) values (3,'empname3');
INSERT INTO testrowid_s1(emp_id,name) values (4,'empname4');
commit;

SELECT rowid,emp_id,name FROM testrowid_s1;
ROWID                  EMP_ID NAME
------------------ ---------- ----------
AAAF3pAAAAAAAMOAAA          1 empname1
AAAF3pAAAAAAAMOAAB          2 empname2
AAAF3pAAAAAAAMOAAC          3 empname3
AAAF3pAAAAAAAMOAAD          4 empname4

UPDATE testrowid_s1 SET name = 'Ramesh' WHERE rowid = 'AAAF3pAAAAAAAMOAAB' ;
commit;

SELECT rowid,emp_id,name FROM testrowid_s1;
ROWID                  EMP_ID NAME
------------------ ---------- ----------
AAAF3pAAAAAAAMOAAA          1 empname1
AAAF3pAAAAAAAMOAAB          2 Ramesh
AAAF3pAAAAAAAMOAAC          3 empname3
AAAF3pAAAAAAAMOAAD          4 empname4
```

*PostgreSQL 代码：*

```
CREATE TABLE public.testrowid_s1
(
    emp_id integer,
    name character varying,
    primary key (emp_id)
);

insert into public.testrowid_s1 (emp_id,name) values 
(1,'empname1'),(2,'empname2'),(3,'empname3'),(4,'empname4');

select emp_id,name from testrowid_s1;
 emp_id |   name   
--------+----------
      1 | empname1
      2 | empname2
      3 | empname3
      4 | empname4

update testrowid_s1 set name = 'Ramesh' where emp_id = 2 ;

select emp_id,name from testrowid_s1;
 emp_id |   name   
--------+----------
      1 | empname1
      3 | empname3
      4 | empname4
      2 | Ramesh
```

**场景 2：使用逻辑主键**

在以下示例中，您将创建表 `testrowid_s2`，并使用 `emp_id` 作为逻辑主键。

*Oracle 代码：*

```
create table testrowid_s2 (emp_id integer, name varchar2(10) );
INSERT INTO testrowid_s2(emp_id,name) values (1,'empname1');
INSERT INTO testrowid_s2(emp_id,name) values (2,'empname2');
INSERT INTO testrowid_s2(emp_id,name) values (3,'empname3');
INSERT INTO testrowid_s2(emp_id,name) values (4,'empname4');
commit;

SELECT rowid,emp_id,name FROM testrowid_s2;
ROWID                  EMP_ID NAME
------------------ ---------- ----------
AAAF3rAAAAAAAMeAAA          1 empname1
AAAF3rAAAAAAAMeAAB          2 empname2
AAAF3rAAAAAAAMeAAC          3 empname3
AAAF3rAAAAAAAMeAAD          4 empname4

UPDATE testrowid_s2 SET name = 'Ramesh' WHERE rowid = 'AAAF3rAAAAAAAMeAAB' ;
commit;

SELECT rowid,emp_id,name FROM testrowid_s2;
ROWID                  EMP_ID NAME
------------------ ---------- ----------
AAAF3rAAAAAAAMeAAA          1 empname1
AAAF3rAAAAAAAMeAAB          2 Ramesh
AAAF3rAAAAAAAMeAAC          3 empname3
AAAF3rAAAAAAAMeAAD          4 empname4
```

*PostgreSQL 代码：*

```
CREATE TABLE public.testrowid_s2
(
    emp_id integer,
    name character varying
);

insert into public.testrowid_s2 (emp_id,name) values 
(1,'empname1'),(2,'empname2'),(3,'empname3'),(4,'empname4');

select emp_id,name from testrowid_s2;
 emp_id |   name   
--------+----------
      1 | empname1
      2 | empname2
      3 | empname3
      4 | empname4

update testrowid_s2 set name = 'Ramesh' where emp_id = 2 ;

select emp_id,name from testrowid_s2;
 emp_id |   name   
--------+----------
      1 | empname1
      3 | empname3
      4 | empname4
      2 | Ramesh
```

**场景 3：使用标识属性**

在以下示例中，您将使用标识属性创建不带主键的表 `testrowid_s3`。

*Oracle 代码：*

```
create table testrowid_s3 (name varchar2(10));
INSERT INTO testrowid_s3(name) values ('empname1');
INSERT INTO testrowid_s3(name) values ('empname2');
INSERT INTO testrowid_s3(name) values ('empname3');
INSERT INTO testrowid_s3(name) values ('empname4');
commit;

SELECT rowid,name FROM testrowid_s3;
ROWID              NAME
------------------ ----------
AAAF3sAAAAAAAMmAAA empname1
AAAF3sAAAAAAAMmAAB empname2
AAAF3sAAAAAAAMmAAC empname3
AAAF3sAAAAAAAMmAAD empname4

UPDATE testrowid_s3 SET name = 'Ramesh' WHERE rowid = 'AAAF3sAAAAAAAMmAAB' ;
commit;

SELECT rowid,name FROM testrowid_s3;
ROWID              NAME
------------------ ----------
AAAF3sAAAAAAAMmAAA empname1
AAAF3sAAAAAAAMmAAB Ramesh
AAAF3sAAAAAAAMmAAC empname3
AAAF3sAAAAAAAMmAAD empname4
```

*PostgreSQL 代码：*

```
CREATE TABLE public.testrowid_s3
(
    rowid_seq bigint generated always as identity,
    name character varying
);

insert into public.testrowid_s3 (name) values 
('empname1'),('empname2'),('empname3'),('empname4');

select rowid_seq,name from testrowid_s3;
 rowid_seq |   name   
-----------+----------
         1 | empname1
         2 | empname2
         3 | empname3
         4 | empname4

update testrowid_s3 set name = 'Ramesh' where rowid_seq = 2 ;

select rowid_seq,name from testrowid_s3;
 rowid_seq |   name   
-----------+----------
         1 | empname1
         3 | empname3
         4 | empname4
         2 | Ramesh
```

# 将 Oracle 数据库错误代码迁移到 Amazon Aurora PostgreSQL-Compatible 数据库
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database"></a>

*Sai Parthasaradhi 和 Veeranjaneyulu Grandhi，Amazon Web Services*

## Summary
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-summary"></a>

此模式显示如何使用预定义的元数据表将 Oracle 数据库错误代码迁移到 [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) 数据库。

Oracle 数据库错误代码并不总是有相应的 PostgreSQL 错误代码。错误代码的这种差异会使您很难在目标 PostgreSQL 架构中配置过程或函数的处理逻辑。

您可以通过将对您的 PL/pgSQL 程序有意义的源数据库和目标数据库错误代码存储在元数据表中来简化流程。然后，将该表配置为标记有效的 Oracle 数据库错误代码，并将它们映射到其 PostgreSQL 等效项，然后再继续执行剩余的流程逻辑。如果元数据表中没有 Oracle 数据库错误代码，则流程将退出，但有异常。然后，如果程序需要，您可以手动查看错误详细信息并将新的错误代码添加到表中。

通过使用此配置，Amazon Aurora PostgreSQL-Compatible 数据库可以像 Oracle 源数据库处理错误一样处理错误。

**注意**  
要配置 PostgreSQL 数据库以正确处理 Oracle 数据库错误代码，通常需要更改数据库和应用程序代码。

## 先决条件和限制
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 已启动并正在运行的实例和侦听器服务的 Oracle 源数据库
+ 已启动并正在运行的 Amazon Aurora PostgreSQL-Compatible 集群
+ 熟悉 Oracle 数据库
+ 熟悉 PostgreSQL 数据库

## 架构
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-architecture"></a>

下图显示了用于验证和处理数据错误代码的 Amazon Aurora PostgreSQL-Compatible 数据库的工作流程示例：

![\[Aurora PostgreSQL 兼容数据库的数据错误代码验证与处理\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/82751f40-2fd9-4ce7-ab61-0874552d857b/images/b7ab627e-8f34-4635-8660-93c5c80ce38d.png)


下图显示了如下工作流：

1. 表中包含了 Oracle 数据库错误代码和分类及其等效的 PostgreSQL 错误代码和分类。该表包含 **valid\$1error** 列，用于对特定的预定义错误代码是否有效进行分类。

1. **当一个 PL/pgSQL 函数（**func\$1processdat** a）抛出异常时，它会调用第二个函数（error\$1validation）。 PL/pgSQL **

1. **error\$1validation** 函数接受 Oracle 数据库错误代码作为输入参数。然后，该函数对照表检查传入的错误代码，以查看该错误是否包含在表中。

1. 如果表中包含 Oracle 数据库错误代码，则 **error\$1validation** 函数将返回**真**值并且流程逻辑继续运行。如果表中未包含错误代码，则该函数返回**假**值，流程逻辑退出，且出现异常。

1. 当函数返回**假**值时，应用程序的职能主管将手动查看错误详细信息以确定其有效性。

1. 然后，要么手动将新的错误代码添加到表中，要么不手动添加。如果错误代码有效且已添加到表中，则下次发生异常时 **error\$1validation** 函数将返回**真**值。如果错误代码无效，并且异常发生时流程必须失效，则不会将错误代码添加到表中。

**技术堆栈**
+ Amazon Aurora PostgreSQL
+ pgAdmin
+ Oracle SQL Developer

## 工具
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-tools"></a>
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [pgAdmin](https://www.pgadmin.org/) 是 PostgreSQL 的开源管理和开发工具。它提供了图形界面，可简化数据库对象的创建、维护和使用。
+ [Oracle SQL Developer](https://www.oracle.com/in/database/technologies/appdev/sqldeveloper-landing.html) 是一个集成的免费开发环境，可简化传统部署和云部署中 Oracle 数据库的开发和管理。

## 操作说明
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-epics"></a>

### 将 Oracle 数据库错误代码迁移到 Amazon Aurora PostgreSQL-Compatible 数据库中
<a name="migrate-oracle-database-error-codes-to-your-amazon-aurora-postgresql-compatible-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Amazon Aurora PostgreSQL-Compatible 数据库中创建表。 | 运行以下 PostgreSQL [CREATE TABLE](https://www.postgresql.org/docs/current/sql-createtable.html) 命令：<pre>(<br /><br />    source_error_code numeric NOT NULL,<br /><br />    target_error_code character varying NOT NULL,<br /><br />    valid_error character varying(1) NOT NULL<br /><br />); </pre> | PostgreSQL 开发人员，甲骨文，适用于 PostgreSQL RDS/Aurora  | 
| 将 PostgreSQL 错误代码及其相应的 Oracle 数据库错误代码添加到表中。 | 运行 PostgreSQL [INSERT](https://www.postgresql.org/docs/current/sql-insert.html) 命令将所需错误代码值添加到 **error\$1codes** 表中。PostgreSQL 错误代码必须使用字符变化的数据类型（**SQLSTATE** 值）。Oracle 错误代码必须使用数字数据类型（**SQLCODE** 值）。**插入语句示例：**<pre>insert into error_codes values (-1817,'22007','Y');<br />insert into error_codes values (-1816,'22007','Y');<br />insert into error_codes values (-3114,'08006','N');</pre>如果您要捕获特定于 Oracle 的 Java 数据库连接（JDBC）异常，则必须将这些异常替换为通用的跨数据库异常或切换到 PostgreSQL 特定的异常。 | PostgreSQL 开发人员，甲骨文，适用于 PostgreSQL RDS/Aurora  | 
| 创建用于验证错误代码的 PL/pgSQL 函数。 | 通过运行 [Postgre](https://www.postgresql.org/docs/current/sql-createfunction.html) SQL 创建 PL/pgSQL 函数命令来创建函数。确保该函数执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.html) | PostgreSQL 开发人员，甲骨文，适用于 PostgreSQL RDS/Aurora  | 
| 手动查看 PL/pgSQL 函数记录的新错误代码。 | 手动查看新错误代码。如果新错误代码对用例有效，请运行 PostgreSQL **INSERT** 命令将其添加到 **error\$1codes** 表中。–或者–如果新错误代码对用例无效，请不要将其添加到表中。当错误发生时，流程逻辑将继续失效并以异常方式退出。 | PostgreSQL 开发人员，甲骨文，适用于 PostgreSQL RDS/Aurora  | 

## 相关资源
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-resources"></a>

[附录 A. PostgreSQL 错误代码](https://www.postgresql.org/docs/11/errcodes-appendix.html)（PostgreSQL 文档）

[数据库错误消息](https://docs.oracle.com/cd/E11882_01/server.112/e17766/toc.htm)（Oracle 数据库文档）

# 使用 AWS SCT 和 AWS DMS EC2 将亚马逊上的 SAP ASE 迁移到兼容 Aurora PostgreSQL 的亚马逊 Aurora
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms"></a>

*Amit Kumar 和 Ankit Gupta，Amazon Web Services*

## Summary
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-summary"></a>

此模式描述了如何使用 AWS 架构转换工具 (AWS SCT) 和 AWS 数据库迁移服务 (AWS DMS) 将托管在亚马逊弹性计算云 (亚马逊 EC2) 实例上的 SAP 自适应服务器企业 (SAP ASE) 数据库迁移到兼容亚马逊 Aurora PostgreSQL 的版本。该模式侧重于存储对象的数据定义语言 (DDL) 转换以及数据迁移。

Aurora PostgreSQL-Compatible 支持联机事务处理 (OLTP) 工作负载。此托管服务提供可按需要自动扩缩的配置。它可根据应用程序的需求自动启动、关闭、纵向扩展或缩减数据库。无需管理任何数据库实例，可在云中运行数据库。Aurora PostgreSQL-Compatible 为不频繁、间歇性或不可预测的工作负载提供了一种经济高效的选择。

迁移过程包含两个主要阶段：
+ 使用 AWS SCT 转换数据库架构
+ 通过 AWS DMS 迁移数据

*操作说明*部分提供了这两个阶段的详细说明。有关对 SAP ASE 数据库使用 AWS DMS 的特定问题进行故障排除的信息，请参阅 AWS DMS 文档中的 [SAP ASE 问题故障排除](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.SAP)。

## 先决条件和限制
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+  EC2 实例上的源 SAP ASE 数据库，服务器、数据库和侦听器服务已启动并运行
+ 目标 Aurora PostgreSQL-Compatible 数据库

**限制**
+ 连接的端口号必须为 5432。
+ [huge\$1pages](https://www.postgresql.org/docs/9.6/static/runtime-config-resource.html) 功能默认开启，但可以进行修改。
+ Point-in-time 恢复 (PITR) 粒度为 5 分钟。
+ 跨区域复制当前不可用。
+ Aurora 数据库最大存储大小为 128 TiB。
+ 最多可以创建 15 个只读副本。
+ 表大小限制仅受 Aurora 集群卷大小的限制，因此PostgreSQL-Compatible 的数据库集群的最大表大小为 32 TiB。我们建议您遵循表设计的最佳实践，例如对大型表进行分区。

**产品版本**
+ 源数据库：AWS DMS 当前支持 SAP ASE 15、15.5、15.7 和 16.x。有关 SAP ASE 版本支持的最新信息，请参阅 [AWS DMS 用户指南](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html)。
+ 目标数据库：PostgreSQL 9.4 及以上版本（适用于版本 9.x）、10.x、11.x、12.x、13.x 和 14.x。有关最新支持版本的 PostgreSQL，请参阅 [AWS DMS 用户指南](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)。
+ Amazon Aurora 1.x 或更高版本。有关最新信息，请参阅 Aurora 文档中的[与 Aurora PostgreSQL 兼容的版本和引擎版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html)。

## 架构
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-architecture"></a>

**源技术堆栈**
+ 在亚马逊上运行的 SAP ASE 数据库 EC2

**目标技术堆栈**
+ Aurora PostgreSQL-Compatible 数据库

**迁移架构**

![\[使用 AWS SCT 和 AWS DMS 将 SAP ASE 数据库迁移至 Aurora PostgreSQL-Compatible。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/07fbdea1-0242-40ae-8e5f-2ce4a620a047/images/a3b018f3-2e7b-4c37-a218-870c56132acb.png)


## 工具
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-tools"></a>
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 通过以下方法来简化异构数据库的迁移工作：将源数据库架构和大部分的自定义代码自动转换成与目标数据库兼容的格式。
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 支持几种不同的源数据库和目标数据库。有关更多信息，请参阅 AWS DMS 文档中的[数据迁移源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)和[数据迁移目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)。要获得最全面的版本和功能支持，我们建议您使用最新版本的 AWS DMS。 

## 操作说明
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-epics"></a>

### 设置环境
<a name="set-up-the-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在源 EC2 实例中配置网络访问权限。 | 在托管源 SAP ASE 数据库的 EC2 实例中设置安全组。有关说明，请参阅[亚马逊 EC2 文档中的适用于 Linux 实例的亚马逊 EC2 安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html?icmpid=docs_ec2_console)。 | 系统管理员 | 
| 创建目标 Aurora PostgreSQL-Compatible DB 集群。 | 为您的目标数据库安装、配置和启动 Aurora PostgreSQL-Compatible 集群。有关更多信息，请参阅 Aurora 文档中的[创建 Amazon Aurora DB 集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html)。 | 数据库管理员 | 
| 为目标数据库集群设置授权。 | 为目标数据库设置安全组以及防火墙。有关说明，请参阅 Aurora 文档中的[创建 Amazon Aurora 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html)。 | 数据库管理员、系统管理员 | 

### 通过 AWS SCT 转换您的数据库架构
<a name="convert-your-database-schema-with-aws-sct"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动 AWS SCT。 | 按照 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_GettingStarted.html)中的说明启动 AWS SCT。AWS SCT 提供基于项目的用户界面，可以自动将 SAP ASE 源数据库的数据库架构转换为与目标 Aurora PostgreSQL-Compatible DB 实例兼容的格式。 | 数据库管理员 | 
| 创建 AWS SCT 端点。 | 为源 SAP ASE 和目标 PostgreSQL 数据库创建端点。有关说明，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AddServers)。 | 数据库管理员 | 
| 创建评测报告。 | 创建数据库迁移评估报告以评测迁移情况，并检测任何不兼容的对象和函数。有关说明，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AssessmentReport)。 | 数据库管理员 | 
| 转换架构。 | 按照 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html)的说明转换数据库架构。 | 数据库管理员 | 
| 验证数据库对象。 | 如果 AWS SCT 无法转换数据库对象，它将识别其名称与其他细节。您必须手动转换这些对象。要识别这些不匹配项，请按照 AWS Blog 文章[从 SAP ASE 迁移到 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 后验证数据库对象](https://aws.amazon.com/blogs/database/validate-database-objects-after-migrating-from-sap-ase-to-amazon-rds-for-postgresql-or-amazon-aurora-postgresql/) | 数据库管理员 | 

### 分析 AWS DMS 迁移
<a name="analyze-the-aws-dms-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库的版本。 | 检查 SAP ASE 的数据库版本是否与 AWS DMS 兼容。有关更多信息，请参阅 AWS DMS 文档中的 [AWS DMS 来源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html#CHAP_Introduction.Sources.title)和 [AWS DMS 目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)。 | 数据库管理员 | 
| 确定存储类型和容量的要求。 | 根据源数据库的大小，为目标数据库选择适当的存储容量。 | 数据库管理员、系统管理员 | 
| 选择复制实例的实例类型、容量以及其他功能。 | 选择满足需求的实例类型、容量、存储特性和网络特性。有关指导，请参阅 AWS DMS 文档中的[为迁移选择正确的 AWS DMS 复制实例](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Types.html)。 | 数据库管理员、系统管理员 | 
| 识别网络访问安全要求。 | 确定源数据库和目标数据库的网络访问安全要求。按照 AWS DMS 文档中的[为复制实例设置网络](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html)中的指导进行操作。 | 数据库管理员、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 通过在 AWS DMS 中创建迁移任务以迁移数据。 | 要迁移数据，请创建任务并按照 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)说明进行操作。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。 | 数据库管理员 | 
| 验证数据。 | 要验证数据是否准确地从源数据库迁移到目标数据库，请遵循AWS DMS文档中提供的[数据验证指南](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定应用程序迁移策略。 | 从将应用程序迁移至云端的[七种策略 (7R)](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-database-migration/planning-phase.html) 中选择一种。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 遵循应用程序迁移策略。 | 完成应用程序团队确定的数据库任务，包括更新目标数据库的 DNS 连接详细信息，以及更新动态查询。  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 | 将连接从源数据库切换到目标数据库。有关更多信息，*请参阅关系数据库*迁移策略的[割接](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-database-migration/cut-over.html)部分 | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 | 终止所有迁移任务、复制实例、端点以及其他 AWS SCT 和 AWS DMS 资源。有关更多信息，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.Deleting)。 | 数据库管理员、系统管理员 | 
| 审核和验证项目文档。 | 验证项目文档中的所有步骤，确保所有任务已成功完成。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 关闭项目。 | 关闭迁移项目并提供任何反馈。 | 数据库管理员、应用程序所有者、系统管理员 | 

## 相关资源
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-resources"></a>

**参考**
+ [在 Amazon RDS 中为 PostgreSQL 数据库实例启用加密连接](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html) (AWS Prescriptive Guidance)
+ [使用 pg\$1transport 在两个 Amazon RDS 数据库实例之间传输 PostgreSQL 数据库](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg_transport.html) (AWS Prescriptive Guidance)
+ [Amazon Aurora 定价](https://aws.amazon.com/rds/aurora/pricing/)
+ [Amazon Aurora PostgreSQL-Compatible Edition 的最佳实践](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraPostgreSQL.BestPractices.html) (Amazon Aurora 文档)
+ [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [使用 SAP ASE 数据库作为 AWS DMS 源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html)

**教程和视频**
+ [AWS Database Migration Service 入门](https://aws.amazon.com/dms/getting-started/)
+ [AWS Database Migration Service](https://www.youtube.com/watch?v=zb4GcjEdl8U)（视频）

# 使用 ACM 将 Windows SSL 凭证迁移到应用程序负载均衡器
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm"></a>

*Chandra Sekhar Yaratha 和 Igor Kovalchuk，Amazon Web Services*

## Summary
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-summary"></a>

该模式为使用 AWS Certifice Manager (ACM) 从托管在本地服务器上的网站或微软互联网信息服务 (IIS) 上的亚马逊弹性计算云 (Amazon EC2) 实例迁移现有安全套接字层 (SSL) 证书提供了指导。然后，SSL 凭证可与 AWS 上的弹性负载均衡一起使用。

SSL 可保护您的数据，确认您的身份，提供更好的搜索引擎排名，帮助满足支付卡行业数据安全标准 (PCI DSS) 的要求，并提高客户信任度。管理这些工作负载的开发人员和 IT 团队希望他们的 Web 应用程序和基础设施（包括 IIS 服务器和 Windows Service 器）始终符合其基准策略。

此模式包括手动从 Microsoft IIS 导出现有 SSL 凭证，将其从 Personal Information Exchange (PFX) 格式转换为 ACM 支持的 Private Enhanced Mail (PEM) 格式，然后将其导入到您的 Amazon Web Services account 中的 ACM 中。它还描述了如何为您的应用程序创建应用程序负载均衡器，以及如何将应用程序负载均衡器配置为使用您导入的凭证。然后，在应用程序负载均衡器终止 HTTPS 连接，您无需在 Web 服务器上增加额外的配置开销。有关更多信息，请参阅[为您的应用程序负载均衡器创建 HTTPS 侦听器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html)。

Windows 服务器使用 .pfx 或 .p12 文件包含公钥文件（SSL 凭证）及其唯一私钥文件。凭证颁发机构 (CA) 为您提供您的公钥文件。您可使用服务器生成创建凭证签名请求 (CSR) 的关联私钥文件。

## 先决条件和限制
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ AWS 上的虚拟私有云（VPC），在您的目标使用的每个可用区中至少有一个私有子网和一个公有子网
+ 在 Windows Server 2012 或更高版本上运行的 IIS 版本 8.0 或更高版本
+ IIS 上运行的 Web 应用程序
+ IIS 服务器的管理员访问权限

## 架构
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-architecture"></a>

**源技术堆栈**
+ 使用 SSL 实施 IIS Web 服务器，确保数据在加密连接 (HTTPS) 中安全传输 

**源架构**

![\[使用 ACM 将 Windows SSL 凭证迁移至应用程序负载均衡器的源架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/cad6e465-da39-4819-970e-10e1c30e0a1f/images/e63efb6f-205b-4e20-a043-6bc954470191.png)


**目标技术堆栈**
+ Amazon Web Services account 中的 ACM 凭证
+ 配置为使用导入凭证的应用程序负载均衡器
+ 私有子网中的 Windows 服务器实例

**目标架构**

![\[使用 ACM 将 Windows SSL 凭证迁移到应用程序负载均衡器的目标架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/cad6e465-da39-4819-970e-10e1c30e0a1f/images/45ac7fba-fbad-4c74-9b1f-80ca212dae08.png)


 

## 工具
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-tools"></a>
+ [AWS Certifice Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) 可帮助您创建、存储和续订 X.509 公有和私有 SSL/TLS X.509 证书和密钥，以保护您的 AWS 网站和应用程序。
+ [弹性负载均衡(ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) 将传入的应用程序或网络流量分配到多个目标。例如，您可以在一个或多个可用区域中的 EC2 实例、容器和 IP 地址之间分配流量。

## 最佳实践
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-best-practices"></a>
+ 将 HTTP 流量强制重定向到 HTTPS。
+ 为应用程序负载均衡器适当配置安全组，仅允许入站流量进入特定端口。
+ 在不同的可用区启动您的 EC2 实例以确保高可用性。
+ 将应用程序域配置为指向应用程序负载均衡器的 DNS 名称，而不是其 IP 地址。
+ 确保应用程序负载均衡器已配置 application-layer [运行状况检查](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html)。
+ 配置运行状况检查的阈值。
+ 使用 [Amazon](https://aws.amazon.com/cloudwatch/) 监控 A CloudWatch pplication Load Balancer。

## 操作说明
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-epics"></a>

### 导出 .pfx 文件
<a name="export-a-pfx-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 Windows 服务器导出.pfx 文件。 | 要从 Windows 服务器的本地 IIS 管理器中将 SSL 凭证导出为 .pfx 文件，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.html)现在，您的 .pfx 文件应保存至指定的位置和路径。 | 系统管理员 | 

### 将 PFX 编码的凭证转换为 PEM 格式
<a name="convert-the-pfx-encoded-certificate-to-pem-format"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载和安装 OpenSSL 工具包。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.html) | 系统管理员 | 
| 将 PFX 编码的凭证转换为 PEM 格式。 | 以下步骤将 PFX 编码的签名凭证文件转换为 PEM 格式的三个文件：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.html)要转换 PFX 编码的凭证，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.html) | 系统管理员 | 

### 将凭证导入 ACM
<a name="import-a-certificate-into-acm"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备导入凭证。 | 在 [ACM 控制台](https://console.aws.amazon.com/acm/home)，选择**导入凭证**。 | 云管理员 | 
| 提供凭证正文。 | 对于**凭证正文**，粘贴要导入的 PEM 编码凭证。有关此操作说明中此任务和其他任务的命令和步骤的更多信息，请参阅 ACM 文档中的[导入凭证](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-api-cli.html)。 | 云管理员 | 
| 提供凭证私钥。 | 对于**凭证私钥**，粘贴与凭证的公有密钥匹配的 PEM 编码的未加密私有密钥。 | 云管理员 | 
| 提供凭证链。 | 对于**凭证链**，粘贴 PEM 编码的凭证链，该凭证链存储在 `CertificateChain.pem` 文件中。 | 云管理员 | 
| 导入凭证。 | 选择**查看和导入**。确认有关您的凭证的信息正确无误，然后选择**导入**。 | 云管理员 | 

### 创建应用程序负载均衡器
<a name="create-an-application-load-balancer"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建和配置负载均衡器与侦听器。 | 按照[弹性负载均衡文档](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)中的说明，配置目标组、注册目标以及创建应用程序负载均衡器和侦听器。为端口 443 添加第二个侦听器 (HTTPS)。 | 云管理员 | 

## 故障排除
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 即使你将 OpenSSL 命令添加到系统路径中，Windows 也 PowerShell 无法识别该命令。 | 检查`$env:path`，以确保它包含 OpenSSL 二进制文件的位置。如果没有，请在中运行以下命令 PowerShell：<pre>$env:path = $env:path + ";C:\OpenSSL-Win64\bin"</pre> | 

## 相关资源
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-resources"></a>

**将凭证导入到 ACM**
+ [ACM 控制台](https://console.aws.amazon.com/acm/home)
+ [凭证和密钥的导入格式](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-format.html)
+ [导入凭证](https://aws.amazon.com/blogs/security/how-to-import-pfx-formatted-certificates-into-aws-certificate-manager-using-openssl/)
+ [AWS Certificate Manager 用户指南](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)

**创建应用程序负载均衡器**
+ [创建应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)
+ [应用程序负载均衡器用户指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)

# 将消息队列从 Microsoft Azure 服务总线迁移到 Amazon SQS
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs"></a>

*Nisha Gambhir，Amazon Web Services*

## Summary
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-summary"></a>

此模式介绍如何使用 Microsoft Azure 服务总线队列消息传送平台将 .NET Framework 或 .NET Core Web 或控制台应用程序迁移到 Amazon Simple Queue Service（Amazon SQS）。

应用程序使用消息传递服务向其他应用程序发送数据以及从其他应用程序接收数据。这些服务有助于在云中构建解耦、高度可扩展的微服务、分布式系统和无服务器应用程序。

Azure 服务总线队列是支持队列和消息传递的更广泛的 Azure publish/subscribe 消息传递基础架构的一部分。 

Amazon SQS 是一种完全托管的消息队列服务，使您能够分离和扩展微服务、分布式系统和无服务器应用程序。Amazon SQS 消除了与管理和操作面向消息的中间件相关的复杂性和开销，使开发人员能够专注于差异化工作。使用 Amazon SQS，您可以在软件组件之间以任意卷发送、存储和接收消息，而不会丢失消息或要求其他服务可用。

## 先决条件和限制
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-prerequisites-and-limitations"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account 
+ 使用 Azure 服务总线队列的 .NET Framework 或 .NET Core Web 或控制台应用程序（附加示例代码）

**产品版本**
+ .NET Framework 3.5 或更高版本，或 .NET Core 1.0.1、2.0.0 或更高版本

## 架构
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-architecture"></a>

**源技术堆栈**
+ 使用 Azure 服务总线队列发送消息的 .NET（Core 或 Framework）Web 或控制台应用程序

 

**目标技术堆栈**
+ Amazon SQS

## 工具
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-tools"></a>

**工具**
+ Microsoft Visual Studio

**代码**

要为 Amazon SQS 创建 AWS Identity and Access Management (IAM) policy，请执行以下操作：

1. 登录 AWS 管理控制台并在上打开 IAM 控制台[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

2. 在左侧的导航窗格中，选择 **Policies (策略)**，然后选择 **Create policy (创建策略)**。

3. 选择 **JSON** 选项卡，然后粘贴以下代码：

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
            "sqs:DeleteMessage",
            "sqs:GetQueueUrl",
            "sqs:ChangeMessageVisibility",
            "sqs:SendMessageBatch",
            "sqs:ReceiveMessage",
            "sqs:SendMessage",
            "sqs:GetQueueAttributes",
            "sqs:ListQueueTags",
            "sqs:ListDeadLetterSourceQueues",
            "sqs:DeleteMessageBatch",
            "sqs:PurgeQueue",
            "sqs:DeleteQueue",
            "sqs:CreateQueue",
            "sqs:ChangeMessageVisibilityBatch",
            "sqs:SetQueueAttributes"
         ],
         "Resource": "arn:aws:sqs:*:<AccountId>:*"
      },
      {
         "Sid": "VisualEditor1",
         "Effect": "Allow",
         "Action": "sqs:ListQueues",
         "Resource": "*"
      }
   ]
}
```

4. 选择**查看策略**，键入名称，然后选择**创建策略**。

5. 将新创建的策略附加到现有 IAM 角色或创建新角色。

## 操作说明
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-epics"></a>

### 在 AWS 中设置 Amazon SQS
<a name="set-up-amazon-sqs-in-aws"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Amazon SQS 创建 IAM policy。 | 创建将提供对 Amazon SQS 的访问权限的 IAM policy。有关示例策略，请参阅“代码”部分。 | 系统工程师 | 
| 创建 AWS 配置文件。 | 通过运行适用于 PowerShell 命令集的 AWS 工具来创建新的配置文件AWSCredential。此命令将您的访问密钥和秘密密钥存储在您指定的配置文件名称下的默认凭证文件中。将您之前创建的 Amazon SQS 策略与此账户链接。保存 AWS 访问密钥 ID 和秘密访问密钥。在接下来的步骤中将需要这些内容。 | 系统工程师 | 
| 创建 SQS 队列。 | 您可以创建标准队列或先进先出 (FIFO) 队列。有关说明，请参阅“参考”部分中的链接。 | 系统工程师 | 

### 修改 .NET 应用程序代码
<a name="revise-your-net-application-code"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 AWS Toolkit for Visual Studio。 | 此工具包是 Microsoft Visual Studio 的扩展，可让您更轻松地在 AWS 中构建和部署 .NET 应用程序。有关安装和使用说明，请参阅“参考”部分中的链接。 | 应用程序开发者 | 
| 安装 AWSSDK .SQS NuGet 软件包。 | 你可以通过在 Visual Studio 中选择 “管理软件 NuGet 包” 或运行 “Install-Package AWSSDK .SQS” 命令来安装 AWSSDK .SQS。 | 应用程序开发者 | 
| 在您的.NET 应用程序中创建 AWSCredentials 对象。 | 附件中的示例应用程序显示了如何创建继承自 AWSCredentials的 Basic AWSCredentials 对象。您可以使用之前的访问密钥 ID 和秘密访问密钥，也可以让对象在运行时从 .aws 文件夹中选取它们作为用户配置文件的一部分。 | 应用程序开发人员 | 
| 创建 SQS 客户端对象。 | 为.NET 框架创建 SQS 客户端对象 (AmazonSQSClient)。这是 Amazon.SQS 命名空间的一部分。这个对象是必需的，而不是 IQueue客户端，后者是 Microsoft.Azure 的一部分。 ServiceBus 命名空间。 | 应用程序开发者 | 
| 调用 SendMessageAsync 方法向 SQS 队列发送消息。 | 将向队列发送消息的代码更改为使用 amazonSqsClient。 SendMessageAsync 方法。有关详细信息，请参阅随附的代码示例。 | 应用程序开发者 | 
| 调用 ReceiveMessageAsync 方法接收来自 SQS 队列的消息。 | 将接收消息的代码更改为使用 amazonSqsClient。 ReceiveMessageAsync 方法。有关详细信息，请参阅随附的代码示例。 | 应用程序开发者 | 
| 调用 DeleteMessageAsync 方法从 SQS 队列中删除消息。 | 要删除消息，请更改 QueueClient 中的代码。 CompleteAsync 方法 amazonSqsClient. DeleteMessageAsync 方法。有关详细信息，请参阅随附的代码示例。 | 应用程序开发人员 | 

## 相关资源
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-related-resources"></a>
+ [适用于 .NET 的 AWS SDK 开发人员指南](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/welcome.html)
+ [使用 Amazon SQS 进行消息收发](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/sqs-apis-intro.html)
+ [通过 适用于 .NET 的 AWS SDK 创建和使用 Amazon SQS 队列](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/how-to-sqs.html)
+ [发送 Amazon SQS 消息](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/SendMessage.html)
+ [接收来自 Amazon SQS 队列的消息](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/ReceiveMessage.html)
+ [删除来自 Amazon SQS 队列的消息](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/DeleteMessage.html)
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html)

## 附加信息
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-additional-information"></a>

此模式包括两个示例应用程序（请参阅附件部分）：
+ **AzureSbTestApp**包括使用 Azure 服务总线队列的代码。
+ **AmazonSqsTestApp**使用亚马逊 SQS。这是一个使用 .NET Core 2.2 的控制台应用程序，包括用于发送和接收消息的示例。

备注：
+ QueueClient 是 Client 的对象， IQueue客户机是 Microsoft.Azure 的一部分。 ServiceBus 命名空间（包含在 Microsoft.Azure 中。 ServiceBus NuGet 包裹）。
+ amazonSqsClient 是亚马逊的一个对象SQSClient，它是 Amazon.sqs 命名空间的一部分（包含在.SQS 包中） AWSSDK。 NuGet 
+ 根据代码的运行位置（比如代码是否在运行） EC2，角色需要拥有写入 SQS 队列的权限。

## 附件
<a name="attachments-25334709-7000-4f60-87ed-ea41acb41a99"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/25334709-7000-4f60-87ed-ea41acb41a99/attachments/attachment.zip)

# 使用 Oracle 数据泵和 AWS DMS 将 Oracle JD Edwards EnterpriseOne 数据库迁移到 AWS
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms"></a>

*Thanigaivel Thirumalai，Amazon Web Services*

## Summary
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-summary"></a>

你可以在[亚马逊关系 EnterpriseOne 数据库服务 (Amazon RDS) 上迁移和运行你的 JD Edwards 数据库](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)。当您将数据库迁移到 Amazon RDS 时，AWS 可以负责备份任务和高可用性设置，因此您可以集中精力维护 EnterpriseOne 应用程序及其功能。有关迁移过程中需要考虑的关键因素完整列表，请参阅 AWS Prescriptive Guidance 中的 [Oracle 数据库迁移策略](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/strategies.html)。

有多种方法可以迁移 EnterpriseOne 数据库，包括：
+ 使用 Oracle Universal Batch Engine (UBE) R98403 创建架构和表，使用 AWS Database Migration Service (AWS DMS) 迁移
+ 使用数据库原生工具创建架构和表，使用 AWS DMS 迁移
+ 使用数据库原生工具迁移现有数据（完全加载），使用 AWS DMS 执行变更数据捕获 (CDC) 任务

此模式涵盖了第三个选项。它解释了如何使用带有 AWS DMS 的 Oracle 数据泵及其 CDC 功能，将您的本地 EnterpriseOne 数据库迁移到 Amazon R [DS](https://aws.amazon.com/dms) for Oracle。

[Oracle JD Edwards EnterpriseOne](https://www.oracle.com/applications/jd-edwards-enterpriseone/) 是一款企业资源规划 (ERP) 解决方案，适用于制造、构造、分销、维修或管理产品或实物资产的组织。JD Edwards EnterpriseOne 支持各种硬件、操作系统和数据库平台。

在迁移 JD Edwards 等关键 ERP 应用程序时 EnterpriseOne，最大限度地减少停机时间是关键。AWS DMS 支持从源数据库到目标数据库的满负荷和连续复制，可最大限度地减少停机时间。AWS DMS 还为迁移提供实时监控和日志记录，可帮助您识别并解决任何可能导致停机的问题。

使用 AWS DMS 复制更改时，必须指定时间或系统更改号 (SCN) 作为从数据库日志中读取更改的起点。为了确保 AWS DMS 可以访问这些更改，请务必在指定的时间内（我们推荐 15 天）保持这些日志在服务器上的可访问性。

## 先决条件和限制
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-prereqs"></a>

**先决条件**
+ 已在您的 Amazon Web Services Cloud 环境中预置为目标数据库的 Amazon RDS for Oracle 数据库。有关说明，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)。
+ 在本地运行或在 AWS 上的亚马逊弹性计算云 (Amazon EC2) 实例上运行 EnterpriseOne 的数据库。
**注意**  
此模式专为从本地迁移到 AWS 而设计，但已在 EC2 实例上使用 EnterpriseOne 数据库进行了测试。如果计划从本地环境迁移，则必须配置适当网络连接。
+ 架构详细信息。确定您计划迁移到哪个 Oracle 数据库架构（例如 DV920） EnterpriseOne。在开始迁移进程前，请收集有关架构的以下详细信息：
  + 架构大小
  + 每种对象类型的对象数量
  + 无效对象数量

**限制**
+ 您必须在目标 Amazon RDS for Oracle 数据库上创建任何您想要的架构，AWS DMS 不会为您创建此架构。（[操作说明](#migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-epics)部分描述了如何使用 Data Pump 导出和导入架构。） 必须已存在目标 Oracle 数据库的架构名称。来自源架构的表导入到用户或架构，AWS DMS 使用管理员或系统账号连接到目标实例。若要迁移多个架构，可以创建多个复制任务。您还可以将数据迁移至目标实例上的不同架构。为此，请对 AWS DMS 表映射使用架构转换规则。
+ 此模式已使用演示数据集测试。建议验证数据集和自定义兼容性。
+ 这种模式使用在微软 Windows 上运行 EnterpriseOne 的数据库。但是，您可在 AWS DMS 支持的其他操作系统中使用相同的进程。

## 架构
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-architecture"></a>

下图显示了一个以 Oracle 数据库作为源数据库、 EnterpriseOne 在 Amazon RDS for Oracle 数据库上作为目标数据库运行的系统。该数据通过使用 Oracle Data Pump 从源 Oracle 数据库导出，并导入至目标 Amazon RDS for Oracle 数据库，并使用 AWS DMS 复制 CDC 更改。

![\[Diagram showing data replication from on-premises Oracle to Amazon RDS using AWS DMS.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/c8ec3789-f80e-4f3a-a3f4-72a4541316b0/images/4e3e3477-2fe0-4a5d-b95e-05a8aafe8b68.png)


1. Oracle Data Pump 从源数据库提取数据，并将数据发送至 Amazon RDS for Oracle 数据库目标。

1. CDC 数据将从 AWS DMS 中的源数据库发送至源端点。

1. 数据从源端点发送至 AWS DMS 复制实例，在此执行复制任务。

1. 复制任务完成后，数据将发送至 AWS DMS 中的目标端点。

1. 数据将从目标端点发送至 Amazon RDS for Oracle 数据库实例。

## 工具
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-tools"></a>

**Amazon Web Services**
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ [Amazon Relational Database Service (Amazon RDS) for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展 Oracle 关系数据库。

**其他服务**
+ [Oracle Data Pump](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm) 可帮助您将数据和元数据从一个数据库高速移动至另一个数据库。

## 最佳实践
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-best-practices"></a>

**Migrating LOBs**

如果您的源数据库包含需要迁移到目标数据库的大型二进制对象 (LOBs)，AWS DMS 会提供以下选项：
+ **完整 LOB 模式** — AWS DMS 会将所有数据 LOBs 从源数据库迁移到目标数据库，无论其大小如何。尽管迁移速度比其他模式慢，但其优点是数据不会被截断。为了提高性能，您可以在新的复制实例上创建单独的任务，以迁移大 LOBs 于几兆字节的表。
+ **受限 LOB 模式** — 您可以指定 LOB 列数据的最大大小，这样 AWS DMS 就可以预先分配资源并批量应用。 LOBs 如果 LOB 列的大小超过任务中指定的大小，AWS DMS 会截断数据，并向 AWS DMS 日志文件发送警告。如果您的 LOB 数据大小在有限的 LOB 大小之内，则可通过使用受限 LOB 模式提高性能。
+ **内联 LOB 模式** — 您可以通过复制小型和大型来进行迁移， LOBs 而不会截断数据，也不会降低任务的性能。 LOBs首先，为 `InlineLobMaxSize` 参数指定一个值，该值仅在完全 LOB 模式时设置为 `true` 时可用。AWS DMS 任务会传输较小的 LOBs 内联，这样效率更高。然后，AWS DMS LOBs 通过从源表中执行查找来迁移大型数据。但是，内联 LOB 模式仅适用于完全加载阶段。

**生成序列值**

在 AWS DMS CDC 过程中，不从源数据库中复制增量序列号。为避免序列值存在差异，您必须从数据来源中为所有序列生成最新的序列值，并将其应用至目标 Amazon RDS for Oracle 数据库。

**AWS Secrets Manager**

若要帮助管理凭证，我们建议您按照博客文章[使用 AWS Secrets Manager 管理 AWS DMS 端点凭证](https://aws.amazon.com/blogs/database/manage-your-aws-dms-endpoint-credentials-with-aws-secrets-manager/)中的说明操作。

**性能**
+ **复制实例** ― 有关选择最佳实例大小的指导，请参阅 AWS DMS 文档中的[为复制实例选择最佳大小](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.SizingReplicationInstance.html)。
+ **连接选项** − 为避免延迟问题，我们建议您选择正确的连接选项。AWS Direct Connect 可提供通往 AWS 资源的最短路径，其为企业数据中心与 AWS 之间的专用连接。在传输过程中，您的网络流量仍保留在 AWS 全球网络中，且不会通过 Internet 传输。相比使用 VPN 或公共互联网，减少了遇到瓶颈或者延迟意外增加的机会。
+ **网络带宽** − 如果想要优化性能，请验证您的网络吞吐量的快慢。如果在本地源数据库与 AWS DMS 之间使用 VPN 隧道，请确保带宽足以承载您的工作负载。
+ **任务并行性** − 您可以通过在完全加载期间并行加载多个表来加快数据复制速度。此模式使用了 RDBMS 端点，故此选项仅适用于完全加载进程。任务并行度由 `MaxFullLoadSubTasks` 参数控制，该参数决定并行运行的满负荷子任务的数量。默认情况下，此参数设置为 8，这意味着在完整模式下将一起加载八个表（如果在表映射中选中）。您可以在任务的 JSON 脚本的完全加载任务设置部分调整此参数。
+ **表并行度 **− AWS DMS 还允许您使用多个并行线程加载单个大表。这对于具有数十亿条记录以及多个分区和子分区的 Oracle 源表特别有用。如果源表未分区，则可以使用列边界进行并行加载。
+ **拆分负载** ― 当您将负载拆分至多个任务或 AWS DMS 实例时，请在捕获更改时记住交易边界。

## 操作说明
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-epics"></a>

### 使用 Oracle 数据泵导出 EnterpriseOne 架构
<a name="use-oracle-data-pump-to-export-the-enterpriseone-schema"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 生成 SCN。 | 当源数据库处于活动状态并被 EnterpriseOne 应用程序使用时，使用 Oracle Data Pump 启动数据导出。您必须首先从源数据库生成系统更改号 (SCN)，以便在使用 Oracle Data Pump 导出期间保持数据一致性，并作为 AWS DMS 中 CDC 的起点。若要从源数据库生成当前 SCN，请使用以下 SQL 语句：<pre>SQL> select current_scn from v$database;<br /><br />CURRENT_SCN<br />-----------<br />   30009727</pre>保存已生成 SCN。您将在导出数据与创建 AWS DMS 复制任务时使用此 SCN。 | 数据库管理员 | 
| 创建参数文件。 | 要创建用于导出架构的参数文件，您可使用以下代码。<pre>directory=DMS_DATA_PUMP_DIR<br />logfile=export_dms.log<br />dumpfile=export_dms_data.dmp<br />schemas=<schema name><br />flashback_scn=<SCN from previous command></pre>您也可以根据需要使用以下命令来定义自己的 `DATA_PUMP_DIR`。<pre>SQL> CREATE OR REPLACE DIRECTORY DMS_DATA_PUMP_DIR AS '<Directory for dump>';<br />Directory created.<br /><br />SQL> GRANT READ, WRITE ON DIRECTORY DMS_DATA_PUMP_DIR TO SYSTEM;<br />Grant succeeded.</pre> | 数据库管理员 | 
| 导出架构。 | 若要执行导出，请使用如下 `expdp` 实用程序：<pre>C:\Users\Administrator>expdp system/********@<DB Name> PARFILE='<Path to PAR file create above>'<br /><br />Export: Release 19.0.0.0.0 - Production on *** *** ** **:**:** ****<br />Version 19.3.0.0.0<br /><br />Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.<br /><br />Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production<br />Starting "SYSTEM"."SYS_EXPORT_SCHEMA_02":  system/********@<DB Name>PARFILE='E:\exp_dms_datapump.par'<br />Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA<br />Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS<br />Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS<br />Processing object type SCHEMA_EXPORT/STATISTICS/MARKER<br />Processing object type SCHEMA_EXPORT/USER<br />Processing object type SCHEMA_EXPORT/ROLE_GRANT<br />Processing object type SCHEMA_EXPORT/DEFAULT_ROLE<br />Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA<br />Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA<br />Processing object type SCHEMA_EXPORT/TABLE/TABLE<br />Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT<br />Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX<br />Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT<br />. . exported "<Schema Name>"."<Table Name>"                            228.9 MB  496397 rows</pre><pre>Master table "SYSTEM"."SYS_EXPORT_SCHEMA_02" successfully loaded/unloaded<br />******************************************************************************<br />Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_02 is:<br />  E:\DMSDUMP\EXPORT_DMS_DATA.DMP<br />Job "SYSTEM"."SYS_EXPORT_SCHEMA_02" successfully completed at *** *** ** **:**:** **** elapsed 0 00:01:57</pre> | 数据库管理员 | 

### 使用 Oracle 数据泵导入 EnterpriseOne 架构
<a name="use-oracle-data-pump-to-import-the-enterpriseone-schema"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将转储文件传输至目标实例。 | 若要使用 `DBMS_FILE_TRANSFER` 实用程序传输文件，您需要创建从源数据库到 Amazon RDS for Oracle 实例的数据库链接。建立链接后，您可以使用该实用程序将 Data Pump 文件直接传输至 Amazon RDS 实例。或者，您可以将 Data Pump 文件传输至 [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/)，然后将其导入至 Amazon RDS for Oracle 实例。有关该选项的更多信息，请参阅[其他信息](#migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-additional)部分。若要创建一个用于连接到位于目标数据库实例中的 Amazon RDS 主用户的数据库链接 `ORARDSDB`，请在源数据库上运行以下命令：<pre>sqlplus / as sysdba<br /><br />SQL*Plus: Release 19.0.0.0.0 on *** *** ** **:**:** ****<br />Version 19.3.0.0.0<br /><br />Copyright (c) 1982, 2019, Oracle.  All rights reserved.<br /><br />Connected to:<br />Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0<br />Version 19.3.0.0.0<br /><br />SQL> create database link orardsdb connect to admin identified by "******" using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.******.us-east-1.rds.amazonaws.com)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))';<br /><br />Database link created.<br /><br />SQL></pre> | 数据库管理员 | 
| 测试数据库链接。 | 测试数据库链接，以确保您可以使用 `sqlplus` 连接至 Amazon RDS for Oracle 目标数据库。<pre>SQL> select name from v$database@orardsdb;<br /><br />NAME<br />---------<br />ORCL<br /></pre> | 数据库管理员 | 
| 将转储文件传输至目标数据库。 | 若要将转储文件复制到 Amazon RDS for Oracle 数据库，您可以使用默认 `DATA_PUMP_DIR` 目录，也可以使用以下代码（必须在目标 Amazon RDS 实例上运行）创建自己的目录：<pre>exec rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'DMS_TARGET_PUMP_DIR');<br /><br />PL/SQL procedure successfully completed.</pre>以下脚本使用名为 `orardsdb` 的数据库链接，将名为 `EXPORT_DMS_DATA.DMP` 的转储文件从源实例复制到目标 Amazon RDS for Oracle 数据库。您必须在源数据库实例上运行脚本。<pre>BEGIN<br />DBMS_FILE_TRANSFER.PUT_FILE(<br />source_directory_object => 'DMS_DATA_PUMP_DIR',<br />source_file_name => 'EXPORT_DMS_DATA.DMP',<br />destination_directory_object => 'DMS_TARGET_PUMP_DIR',<br />destination_file_name => 'EXPORT_DMS_DATA.DMP',<br />destination_database => 'orardsdb');<br />END;<br /><br />PL/SQL procedure successfully completed.</pre> | 数据库管理员 | 
| 在目标数据库中列出转储文件。 | 该 PL/SQL 过程完成后，您可以使用以下代码在 Amazon RDS for Oracle 数据库中列出数据转储文件：<pre>select * from table (rdsadmin.rds_file_util.listdir(p_directory => 'DMS_TARGET_PUMP_DIR'));</pre> | 数据库管理员 | 
| 在目标实例中创建 JDE-特定用户。 | 在目标实例中，使用以下命令创建 JD Edwards 配置文件和角色：<pre>SQL> CREATE PROFILE "JDEPROFILE" LIMIT IDLE_TIME 15;<br />Profile created.<br /><br />SQL> CREATE ROLE "JDE_ROLE";<br />Role created.<br /><br />SQL> CREATE ROLE "JDEADMIN";<br />CREATE ROLE "JDEUSER";<br />Role created.<br />Role created.</pre>授予角色所需权限：<pre>SQL> GRANT CREATE ANY SEQUENCE TO JDE_ROLE;<br /> GRANT DROP ANY SEQUENCE TO JDE_ROLE;<br /> GRANT CREATE ANY TRIGGER TO JDE_ROLE;<br /> GRANT DROP ANY TRIGGER TO JDE_ROLE;<br /></pre> | 数据库管理员、JDE CNC | 
| 在目标实例中创建表空间。 | 对此迁移所涉及的架构使用以下命令，在目标实例中创建所需表空间：<pre>SQL> CREATE TABLESPACE <Tablespace Name for Tables>;<br />Tablespace created.<br /><br />SQL> CREATE TABLESPACE <Tablespace Name for Indexes>;<br />Tablespace created.</pre> | 数据库管理员、JDE CNC | 
| 在目标数据库上启动导入。 | 在开始导入进程前，请使用数据转储文件在目标 Amazon RDS for Oracle 数据库上设置角色、架构和表空间。若要执行导入，请使用 Amazon RDS 主用户账户访问目标数据库，并使用 `tnsnames.ora` 文件中的连接字符串名称（其中包括 Amazon RDS for Oracle 数据库 `tns-entry`）。如有必要，可以纳入重映射选项，将数据转储文件导入不同的表空间或使用不同架构名称。若要开始导入，请使用下面的代码：<pre>impdp admin@orardsdb directory=DMS_TARGET_PUMP_DIR logfile=import.log dumpfile=EXPORT_DMS_DATA.DMP</pre>为确保成功导入，请检查导入日志文件中是否存在任何错误，并查看对象数、行数和无效对象等详细信息。如果有任何无效对象，请重新编译它们。此外，比较源数据库对象和目标数据库对象，以确认它们是否匹配。 | 数据库管理员 | 

### 预置 AWS DMS 复制实例，包括源端点和目标端点
<a name="provision-an-aws-dms-replication-instance-with-the-source-and-target-endpoints"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载 模板。 | 下载 AWS CloudFormation [DMS\$1Instance.yaml 模板以配置 AWS DMS 复制实例](https://aws-database-blog.s3.amazonaws.com/artifacts/Migrating_oracle_using_DMS/DMS_Instance.yaml)及其源和目标终端节点。 | 云管理员、数据库管理员 | 
| 开始创建堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 云管理员、数据库管理员 | 
| 指定参数。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 云管理员、数据库管理员 | 
| 创建堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html)预置应在 5-10 分钟左右完成。当 AWS CloudFormation Stacks 页面显示 **CREAT** E\$1COMPLETE 时，它就完成了。 | 云管理员、数据库管理员 | 
| 设置端点。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 云管理员、数据库管理员 | 
| 测试连接。 | 在源端点和目标端点显示为**活动**状态后，测试连接。为每个端点（源端点和目标端点）选择**运行测试**，以确保状态显示为成功。 | 云管理员、数据库管理员 | 

### 为实时复制创建 AWS DMS 复制任务
<a name="create-an-aws-dms-replication-task-for-live-replication"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建复制任务。 | 通过使用以下步骤创建 AWS DMS 复制任务：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html)创建任务后，AWS DMS 会将持续更改从在 CDC 启动模式下提供的 SCN 迁移至 Amazon RDS for Oracle 数据库实例。您也可以通过查看 CloudWatch 日志来验证迁移。 | 云管理员、数据库管理员 | 
| 重复复制任务。 | 重复前述步骤，为迁移进程中的其他 JD Edwards 架构创建复制任务。 | 云管理员、数据库管理员、JDE CNC 管理员 | 

### 在目标 Amazon RDS for Oracle 数据库上验证数据库架构
<a name="validate-the-database-schema-on-the-target-amazon-rds-for-oracle-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证数据传输。 | AWS DMS 任务启动后，您可查看**任务**页面上的**表统计数据**选项卡，以查看对数据所做的更改。您可以在控制台的**数据库迁移任务**页面监控正在进行的复制的状态。有关更多信息，请参阅 [AWS DMS 数据验证](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)。 | 云管理员、数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 停止复制。 | 停止复制过程，并停止源应用程序服务。 | 云管理员、数据库管理员 | 
| 启动 JD Edwards 应用程序。 | 在 AWS 上启动目标 JD Edwards 演示和逻辑层应用程序，并将其定向至 Amazon RDS for Oracle 数据库。在访问应用程序时，您应该会注意到，现已通过 Amazon RDS for Oracle 数据库建立了所有连接。 | 数据库管理员、JDE CNC 管理员 | 
| 关闭源数据库。 | 在确认源数据库不再有其他连接后，可关闭源数据库。 | 数据库管理员 | 

## 问题排查
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 您将收到一条警告消息，要求在源数据库中为进行中的复制启用[补充日志记录](https://docs.oracle.com/database/121/SUTIL/GUID-D2DDD67C-E1CC-45A6-A2A7-198E4C142FA3.htm#SUTIL1583) | 输入以下命令，以启用补充日志记录：<pre>SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;</pre> | 
| AWS DMS 已禁用补充日志记录。 | 在 AWS DMS 中默认关闭补充日志记录。若要为源 Oracle 端点将其打开：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 
| 在 CDB 级别未启用补充日志记录。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 
| 您会收到错误消息：“测试端点失败：应用程序状态：1020912，应用程序消息：Oracle PDB 环境 LogMiner 不支持端点初始化失败。” | 如果遇到此错误消息，则可以改用 Binary Reader LogMiner。在**端点设置**下，将此行添加至源数据库的额外连接属性：<pre>useLogMinerReader=N;useBfile=Y;</pre> | 

## 相关资源
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-resources"></a>
+ [AWS Database Migration Service 入门](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS Database Migration Service 最佳实践](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html)
+ [将 Oracle 数据库迁移至 AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)
+ [适用于 AWS 的 AWS Database Migration Service 资源类型参考 CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DMS.html)
+ [使用 AWS Secrets Manager 管理 AWS DMS 端点凭证](https://aws.amazon.com/blogs/database/manage-your-aws-dms-endpoint-credentials-with-aws-secrets-manager/)
+ [AWS Database Migration Service 中的排除迁移任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.Oracle.RecordsMissing)
+ [AWS Database Migration Service 最佳实践](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html)

## 附加信息
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-additional"></a>

**使用 Amazon S3 传输文件**

要将文件传输至 Amazon S3，您可以使用 AWS CLI 或 Amazon S3 控制台。将文件传输至 Amazon S3 后，您可以使用 Amazon RDS for Oracle 实例从 Amazon S3 导入 Data Pump 文件。

如果选择使用 Amazon S3 集成作为替代方法传输转储文件，请执行以下步骤：

1. 创建 S3 存储桶。

1. 使用 Oracle Data Pump 从源数据库导出数据。

1. 将 Data Pump 文件上传至 S3 存储桶。

1. 将 Data Pump 文件从 S3 存储桶下载至目标 Amazon RDS for Oracle 数据库。

1. 使用 Data Pump 文件执行导入。

**注意**  
要在 S3 和 RDS 实例之间传输大型数据文件，我们建议您使用 [Amazon S3 Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html) 功能。

# 使用 AWS DMS 将 Oracle PeopleSoft 数据库迁移到 AWS
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms"></a>

*Sampath Kathirvel，Amazon Web Services*

## Summary
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-summary"></a>

[Oracle PeopleSoft](https://www.oracle.com/applications/peoplesoft/) 是一款适用于企业级流程的企业资源规划 (ERP) 解决方案。 PeopleSoft 具有三层架构：客户端、应用程序和数据库。 PeopleSoft 可以在[亚马逊关系数据库服务 (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 上运行。

如果您将 Oracle 数据库迁移到 Amazon RDS，Amazon Web Services (AWS) 可以处理备份任务和高可用性，让您可以自由地专注于维护 PeopleSoft 应用程序及其功能。有关迁移过程中需要考虑的关键因素完整列表，请参阅 AWS Prescriptive Guidance 中的 [Oracle 数据库迁移策略](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/strategies.html)。

此模式提供了一种解决方案，用于使用 Oracle Data Pump 与 [AWS Database Migration Service (AWS DMS)](https://aws.amazon.com/dms) 及其更改数据捕获 (CDC) 功能将本地 Oracle 数据库迁移到 Amazon RDS for Oracle。

在迁移 Oracle 等关键 ERP 应用程序时 PeopleSoft，最大限度地减少停机时间是关键。AWS DMS 支持从源数据库到目标数据库的满负荷和连续复制，可最大限度地减少停机时间。AWS DMS 还为迁移提供实时监控和日志记录，这可帮助您识别和解决任何可能导致停机的问题。

使用 AWS DMS 复制更改时，必须指定时间或系统更改号 (SCN)，作为供 AWS DMS 从数据库日志中读取更改的起点。为了确保 AWS DMS 可以访问这些更改，请务必在指定的时间内保持这些日志在服务器上的可访问性。

## 先决条件和限制
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-prereqs"></a>

**先决条件**
+ 已在您的 Amazon Web Services Cloud 环境中预调配 Amazon RDS for Oracle 数据库作为目标数据库。
+ 在本地运行或在 AWS 云中的亚马逊弹性计算云 (Amazon EC2) 上运行的 Oracle PeopleSoft 数据库。
**注意**  
此模式专为从本地迁移到 AWS 而设计，但已通过在 Amazon EC2 实例上使用 Oracle 数据库进行测试。要从本地迁移，您需要配置适当的网络连接。
+ 架构详细信息。将 Oracle PeopleSoft 应用程序迁移到 Amazon RDS for Oracle 时，必须确定要迁移哪个 Oracle 数据库架构（例如`SYSADM`）。在开始迁移进程之前，请收集有关架构的以下详细信息：
  + Size
  + 每种对象类型的对象数量
  + 无效对象数量。

  此信息将有助于迁移进程。

**限制**
+ 此场景仅在 PeopleSoft DEMO 数据库中进行了测试。它尚未使用大型数据集进行测试。

## 架构
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-architecture"></a>

下图显示了一个实例，该实例将 Oracle 数据库作为源数据库，将 Amazon RDS for Oracle 数据库作为目标数据库进行运行。该数据通过使用 Oracle Data Pump 从源 Oracle 数据库导出，并导入至目标 Amazon RDS for Oracle 数据库，并使用 AWS DMS 复制 CDC 更改。

![\[从本地数据库实例到 Amazon RDS 的五步流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/c8ec3789-f80e-4f3a-a3f4-72a4541316b0/images/4e3e3477-2fe0-4a5d-b95e-05a8aafe8b68.png)


1. 初始步骤涉及使用 Oracle Data Pump 从源数据库提取数据，然后将其发送到 Amazon RDS for Oracle 数据库目标。

1. 数据将从 AWS DMS 中的源数据库发送至源端点。

1. 数据从源端点发送至 AWS DMS 复制实例，在此执行复制任务。

1. 复制任务完成后，数据将发送至 AWS DMS 中的目标端点。

1. 数据将从目标端点发送至 Amazon RDS for Oracle 数据库实例。

## 工具
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-tools"></a>

**Amazon Web Services**
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ [Amazon Relational Database Service (Amazon RDS) for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展 Oracle 关系数据库。

**其他服务**
+ [Oracle 数据泵](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm) 可帮助您将数据和元数据从一个数据库高速移动至另一个数据库。

## 最佳实践
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-best-practices"></a>

**Migrating LOBs**

如果您的源数据库包含需要迁移到目标数据库的大型二进制对象 (LOBs)，AWS DMS 会提供以下选项：
+ **完整 LOB 模式** — AWS DMS 会将所有数据 LOBs 从源数据库迁移到目标数据库，无论其大小如何。尽管迁移速度比较慢，但其优点是数据不会被截断。为了提高性能，您可以在新的复制实例上创建单独的任务来迁移 LOBs 大于几兆字节的表。
+ **受限 LOB 模式** — 您可以指定 LOB 列数据的最大大小，这样 AWS DMS 就可以预先分配资源并批量应用。 LOBs 如果 LOB 列的大小超过任务中指定的大小，AWS DMS 会截断数据，并向 AWS DMS 日志文件发送警告。如果您的 LOB 数据大小在有限的 LOB 大小之内，则可通过使用受限 LOB 模式提高性能。
+ **内联 LOB 模式** — 您可以通过复制小型和大型来进行迁移， LOBs 而不会截断数据，也不会降低任务的性能。 LOBs首先，为 InlineLobMaxSize 参数指定一个值，该值仅在完整 LOB 模式设置为 true 时可用。AWS DMS 任务会传输较小的 LOBs 内联，这样效率更高。然后，AWS DMS LOBs 通过从源表中执行查找来迁移大型数据。但是，内联 LOB 模式仅适用于完全加载阶段。

**生成序列值**

请记住，在使用 AWS DMS 进行更改数据捕获过程中，不会从源数据库复制增量序列号。为避免序列值存在差异，您必须从数据来源中为所有序列生成最新的序列值，并将其应用至目标 Amazon RDS for Oracle 数据库。

**凭证管理**

为了帮助保护您的 AWS 资源，我们建议遵循 AWS Identity and Access Management (IAM) 的[最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 操作说明
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-epics"></a>

### 预置 AWS DMS 复制实例，包括源端点和目标端点
<a name="provision-an-aws-dms-replication-instance-with-the-source-and-target-endpoints"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载 模板。 | 下载 [dms\$1instance.yaml AWS CloudFormation 模板以配置 AWS DMS 复制实例](https://aws-database-blog.s3.amazonaws.com/artifacts/Migrating_oracle_using_DMS/DMS_Instance.yaml)及其源和目标终端节点。 | 云管理员、数据库管理员 | 
| 开始创建堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html) | 云管理员、数据库管理员 | 
| 指定参数。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html) | 云管理员、数据库管理员 | 
| 创建堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html)预置应在 5-10 分钟左右完成。当 AWS CloudFormation Stacks 页面显示 **CREAT** E\$1COMPLETE 时，它就完成了。 | 云管理员、数据库管理员 | 
| 设置端点。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html) | 云管理员、数据库管理员 | 
| 测试连接。 | 在源端点和目标端点显示为“活动”状态后，测试连接。为每个端点（源端点和目标端点）选择**运行测试**，以确保状态显示为成功。 | 云管理员、数据库管理员 | 

### 使用 Oracle 数据泵将 PeopleSoft 架构从本地 Oracle 数据库导出
<a name="export-the-peoplesoft-schema-from-the-on-premises-oracle-database-by-using-oracle-data-pump"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 生成 SCN。 | 当源数据库处于活动状态并用于应用程序，请使用 Oracle Data Pump 启动数据导出。您必须首先从源数据库生成系统更改号 (SCN)，以便在使用 Oracle Data Pump 导出期间保持数据一致性，并作为 AWS DMS 中更改数据捕获的起点。要从您的源数据库生成当前 SCN，请输入以下 SQL 语句。<pre>SQL> select name from v$database;<br />SQL> select name from v$database;<br />NAME<br />---------<br />PSFTDMO<br />SQL> SELECT current_scn FROM v$database;<br />CURRENT_SCN<br />-----------<br />23792008</pre>保存生成的 SCN，以便在导出数据时使用，并用于创建 AWS DMS 复制任务。 | 数据库管理员 | 
| 创建参数文件。 | 要创建用于导出架构的参数文件，您可使用以下代码。<pre>$ cat exp_datapmp.par<br />userid=system/*******<br />directory=DATA_PUMP_DIR<br />logfile=export_dms_sample_user.log<br />dumpfile=export_dms_sample_data_%U.dmp<br />schemas=SYSADM<br />flashback_scn=23792008</pre>您也可以根据需要使用以下命令来定义自己的 `DATA_PUMP_DIR`。<pre>SQL> CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/opt/oracle/product/19c/dbhome_1/dmsdump/';<br />Directory created.<br />SQL> GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO system;<br />Grant succeeded.<br />SQL><br />SQL> SELECT owner, directory_name, directory_path FROM dba_directories WHERE directory_name='DATA_PUMP_DIR';<br />OWNER DIRECTORY_NAME DIRECTORY_PATH<br />------------------------------------------------------------------------------------------------------------------<br />SYS DATA_PUMP_DIR /opt/oracle/product/19c/dbhome_1/dmsdump/</pre> | 数据库管理员 | 
| 导出架构。 | 要执行导出，请使用 `expdp` 实用程序。<pre>$ expdp parfile=exp_datapmp.par<br />.......................<br />Transferring the dump file with DBMS_FILE_TRANSFER to Target:<br />. . exported "SYSADM"."PS_XML_TEMPLT_LNG" 6.320 KB 0 rows<br />. . exported "SYSADM"."PS_XML_TEMPLT_LNK" 6.328 KB 0 rows<br />. . exported "SYSADM"."PS_XML_XLATDEF_LNG" 6.320 KB 0 rows<br />. . exported "SYSADM"."PS_XML_XLATITM_LNG" 7.171 KB 0 rows<br />. . exported "SYSADM"."PS_XPQRYRUNCNTL" 7.601 KB 0 rows<br />. . exported "SYSADM"."PS_XPQRYRUNPARM" 7.210 KB 0 rows<br />. . exported "SYSADM"."PS_YE_AMOUNTS" 9.351 KB 0 rows<br />. . exported "SYSADM"."PS_YE_DATA" 16.58 KB 0 rows<br />. . exported "SYSADM"."PS_YE_EE" 6.75 KB 0 rows<br />. . exported "SYSADM"."PS_YE_W2CP_AMOUNTS" 9.414 KB 0 rows<br />. . exported "SYSADM"."PS_YE_W2CP_DATA" 20.94 KB 0 rows<br />. . exported "SYSADM"."PS_YE_W2C_AMOUNTS" 10.27 KB 0 rows<br />. . exported "SYSADM"."PS_YE_W2C_DATA" 20.95 KB 0 rows<br />. . exported "SYSADM"."PS_ZBD_JOBCODE_TBL" 14.60 KB 0 rows<br />. . exported "SYSADM"."PTGRANTTBL" 5.468 KB 0 rows<br />Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded<br />**<br />Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:<br />/opt/oracle/product/19c/dbhome_1/dmsdump/export_dms_sample_data_01.dmp<br />Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Dec 19 20:13:57 2022 elapsed 0 00:38:22</pre> | 数据库管理员 | 

### 使用 Oracle 数据泵将 PeopleSoft 架构导入 Amazon RDS for Oracle 数据库
<a name="import-the-peoplesoft-schema-into-the-amazon-rds-for-oracle-database-by-using-oracle-data-pump"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将转储文件传输至目标实例。 | 要使用 `DBMS_FILE_TRANSFER` 传输文件，您需要创建从源数据库到 Amazon RDS for Oracle 实例的数据库链接。建立链接后，您可以使用该实用程序将 Data Pump 文件直接传输至 RDS 实例。或者，您可以将 Data Pump 文件传输至 [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/)，然后将其导入至 Amazon RDS for Oracle 实例。有关该选项的更多信息，请参阅“其他信息”部分。要创建一个用于连接到位于目标数据库实例中的 Amazon RDS 主用户的数据库链接 `ORARDSDB`，请在源数据库上运行以下命令。<pre>$sqlplus / as sysdba<br />$ SQL> create database link orardsdb connect to admin identified by "*****" using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = testpsft.*******.us-west-2.rds.amazonaws.com)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))';<br />Database link created.</pre> | 数据库管理员 | 
| 测试数据库链接。 | 测试数据库链接，以确保您可以使用 sqlplus 连接到 Amazon RDS for Oracle 目标数据库。<pre>SQL><br />SQL> select name from v$database@orardsdb;<br />NAME<br />---------<br />ORCL<br />SQL></pre> | 数据库管理员 | 
| 将转储文件传输至目标数据库。 | 要将转储文件复制到 Amazon RDS for Oracle 数据库，您可以使用默认 `DATA_PUMP_DIR` 目录，也可以使用以下代码创建自己的目录。<pre>exec rdsadmin.rdsadmin_util.create_directory(p_directory_name => ‘TARGET_PUMP_DIR’);</pre>以下脚本使用名为 `orardsdb` 的数据库链接，将名为 `export_dms_sample_data_01.dmp` 的转储文件从源实例复制到目标 Amazon RDS for Oracle 数据库。<pre>$ sqlplus / as sysdba<br />SQL><br />BEGIN<br />DBMS_FILE_TRANSFER.PUT_FILE(<br />source_directory_object => 'DATA_PUMP_DIR',<br />source_file_name => 'export_dms_sample_data_01.dmp',<br />destination_directory_object => 'TARGET_PUMP_DIR’',<br />destination_file_name => 'export_dms_sample_data_01.dmp',<br />destination_database => 'orardsdb'<br />);<br />END;<br />/<br />PL/SQL procedure successfully completed.</pre> | 数据库管理员 | 
| 在目标数据库中列出转储文件。 | 该 PL/SQL 过程完成后，您可以使用以下代码在 Amazon RDS for Oracle 数据库中列出数据转储文件。<pre>SQL> select * from table (rdsadmin.rds_file_util.listdir(p_directory => ‘TARGET_PUMP_DIR’));</pre> | 数据库管理员 | 
| 在目标数据库上启动导入。 | 在开始导入进程前，请使用数据转储文件在目标 Amazon RDS for Oracle 数据库上设置角色、架构和表空间。要执行导入，请使用 Amazon RDS 主用户账户访问目标数据库，并使用 `tnsnames.ora` 文件中的连接字符串名称，其中包括 Amazon RDS for Oracle 数据库 `tns-entry`。如有必要，可以纳入重映射选项，将数据转储文件导入不同的表空间或使用不同架构名称。要开始导入，请使用以下代码。<pre>impdp admin@orardsdb directory=TARGET_PUMP_DIR logfile=import.log dumpfile=export_dms_sample_data_01.dmp</pre>为确保成功导入，请检查导入日志文件中是否存在任何错误，并查看对象数、行数和无效对象等详细信息。如果有任何无效对象，请重新编译它们。此外，比较源数据库对象和目标数据库对象，以确认它们是否匹配。 | 数据库管理员 | 

### 使用 CDC 创建 AWS DMS 复制任务，以执行实时复制
<a name="create-an-aws-dms-replication-task-using-cdc-to-perform-live-replication"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建复制任务。 | 通过使用以下步骤创建 AWS DMS 复制任务：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html)创建任务后，它会将 CDC 从在 CDC 启动模式下提供的 SCN 迁移到 Amazon RDS for Oracle 数据库实例。您也可以通过查看 CloudWatch 日志进行验证。 | 云管理员、数据库管理员 | 

### 在目标 Amazon RDS for Oracle 数据库上验证数据库架构
<a name="validate-the-database-schema-on-the-target-amazon-rds-for-oracle-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证数据传输。 | AWS DMS 任务启动后，您可查看**任务**页面上的**表统计数据**选项卡，以查看对数据所做的更改。您可以在控制台的**数据库迁移任务**页面监控正在进行的复制的状态。有关更多信息，请参阅 [AWS DMS 数据验证](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)。 | 云管理员、数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 停止复制。 | 停止复制过程，并停止源应用程序服务。 | 云管理员、数据库管理员 | 
| 启动 PeopleSoft 中间层。 | 在 AWS 中启动目标 PeopleSoft 中间层应用程序，并将其定向到最近迁移的 Amazon RDS for Oracle 数据库。在访问应用程序时，您应该会注意到，现已通过 Amazon RDS for Oracle 数据库建立了所有应用程序连接。 | 数据库管理员、管理员 PeopleSoft  | 
| 关闭源数据库。 | 在确认源数据库不再有其他连接后，可关闭源数据库。 | 数据库管理员 | 

## 相关的资源
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-resources"></a>
+ [AWS Database Migration Service 入门](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS Database Migration Service 最佳实践](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html)
+ [将 Oracle 数据库迁移至 AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)

## 附加信息
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-additional"></a>

**使用 Amazon S3 传输文件**

要将文件传输至 Amazon S3，您可以使用 AWS CLI 或 Amazon S3 控制台。将文件传输至 Amazon S3 后，您可以使用 Amazon RDS for Oracle 实例从 Amazon S3 导入 Data Pump 文件。

如果选择使用 Amazon S3 集成作为替代方法传输转储文件，请执行以下步骤：

1. 创建 S3 存储桶。

1. 使用 Oracle Data Pump 从源数据库导出数据。

1. 将 Data Pump 文件上传至 S3 存储桶。

1. 将 Data Pump 文件从 S3 存储桶下载至目标 Amazon RDS for Oracle 数据库。

1. 使用 Data Pump 文件执行导入。

**注意**  
要在 S3 和 RDS 实例之间传输大型数据文件，建议使用 Amazon S3 Transfer Acceleration 功能。

**激活补充日志记录**

如果您收到一条警告消息，要求在源数据库中为进行中的复制启用[补充日志记录](https://docs.oracle.com/database/121/SUTIL/GUID-D2DDD67C-E1CC-45A6-A2A7-198E4C142FA3.htm#SUTIL1583)，请使用以下步骤。

```
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
```

# 将本地 MySQL 数据库迁移至 Amazon RDS for MySQL
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql"></a>

*Lorenzo Mota，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-summary"></a>

此模式为将本地 MySQL 数据库迁移至 Amazon Relational Database Service (Amazon RDS) for MySQL 提供了指导。该模式讨论了如何使用 AWS Database Migration Service (AWS DMS) 或原生 MySQL 工具（例如 **mysqldump**）进行完整数据库迁移。这种模式主要适用于 DBAs 和解决方案架构师。它可以在小型或大型项目中用作测试程序（我们建议至少一个测试周期），或作为最终迁移程序。

## 先决条件和限制
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ 本地数据中心的 MySQL 源数据库

**限制**
+ 数据库大小限制：[64 TB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)

**产品版本**
+ MySQL 版本 5.5、5.6、5.7、8.0。有关支持版本的最新列表，请参阅 AWS 文档[中的 Amazon RDS 上的 MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html)。如果您正在使用 AWS DMS，另请参阅使用与 M [ySQL 兼容的数据库作为当前支持的 AWS DMS MySQL 版本的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)。 AWS DMS

## 架构
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-architecture"></a>

**源技术堆栈**
+ 本地数据库。

**目标技术堆栈**
+ 运行 MySQL 的 Amazon RDS 数据库实例

**目标架构**

下图介绍了迁移后 Amazon RDS for MySQL 的目标实施。

![\[割接后将 Amazon RDS for MySQL 实施作为目标\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/808809dd-030f-42af-a5a7-c4ba40456193/images/2e10114e-e389-4d24-9b6a-fa56beee5369.png)


**AWS 数据迁移架构**

**使用 AWS DMS：**

下图显示了在直接转换之前使用 AWS DMS 发送完整和增量更改时的数据迁移架构。从本地到的网络连接 AWS 取决于您的要求，并且超出了这种模式的范围。

![\[使用 AWS DMS 时将数据迁移到 AWS 的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/808809dd-030f-42af-a5a7-c4ba40456193/images/ecc9b282-1897-4971-99ed-83223b17000d.png)


**使用原生 MySQL 工具：**

使用 MySQL 原生工具时的数据迁移架构如下图所示。导出转储文件被复制到亚马逊简单存储服务 (Amazon S3) Simple Service，并在转换之前导入到亚马逊 RDS for MySQL 数据库 AWS 中。从本地到的网络连接 AWS 取决于您的要求，并且超出了这种模式的范围。

 

![\[使用原生 MySQL 工具时将数据迁移至 AWS 的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/808809dd-030f-42af-a5a7-c4ba40456193/images/3bbec989-c3eb-473e-ba4a-032d6a4271c5.png)


**备注**：
+ 根据停机时间要求和数据库的大小，使用 AWS DMS 或更改数据捕获 (CDC) 工具可以最大限度地减少转换时间。 AWS DMS 可以帮助将新目标的切换时间缩短到最少（通常为几分钟）。 如果数据库的大小和网络延迟允许很短的窗口，那么使用 **mysqldump** 的离线策略就足够了。（我们建议进行测试以获得大致时间。）
+ 通常，CDC 策略比离线选项 AWS DMS 需要更多的监控和复杂性。

## 工具
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-tools"></a>
+ **AWS 服务**: [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到云和本地设置的组合之间 AWS 云 或迁移。有关支持的 MySQL 源数据库和目标数据库的信息 AWS DMS，请参阅[将兼容 MySQL 的数据库迁移到](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MySQL.html)。 AWS如果您的源数据库不受支持 AWS DMS，则必须选择其他方法来迁移数据。
+ **原生 MySQL 工具**：[mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)
+ **第三方工具**：[Per](https://www.percona.com/software/mysql-database/percona-xtrabackup) cona XtraBackup

## 操作说明
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证数据库版本。 | 验证源数据库和目标数据库版本。 | 数据库管理员 | 
| 确定硬件要求。 | 确定目标服务器的硬件要求。 | 数据库管理员、系统管理员 | 
| 确定存储要求。 | 确定目标数据库的存储需求(如存储类型和容量)。 | 数据库管理员、系统管理员 | 
| 选择实例类型。 | 根据容量、存储功能、网络功能选择目标实例类型。 | 数据库管理员、系统管理员 | 
| 确定网络访问要求。 | 确定源和目标数据库的网络访问安全要求。 | 数据库管理员、系统管理员 | 
| 确定不支持的对象。 | 确定不支持的对象（如有）并确定迁移工作。 | 数据库管理员 | 
| 确定依赖项。 | 确定对远程数据库的任何依赖项。 | 数据库管理员 | 
| 确定应用程序迁移策略。 | 确定客户端应用程序迁移策略。 | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 | 配置路由表、互联网网关、NAT 网关和子网。有关更多信息，请参阅[亚马逊 RDS 文档中的VPCs 和](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html) Amazon RDS。 | 系统管理员 | 
| 创建安全组。 |  IPs 根据您的要求配置端口和 CIDR 范围或特定范围。MySQL 的默认端口是 3306。有关更多信息，请参阅 Amazon RDS 文档中的[使用安全组控制访问权限](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)。 | 系统管理员 | 
| 配置和启动 Amazon RDS for MySQL DB 实例。 | 有关说明，请参阅 Amazon RDS 文档中的[创建 Amazon RDS 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateInstance.html)。查看支持的版本。 | 系统管理员 | 

### 迁移数据 - 选项 1（使用原生工具）
<a name="migrate-data-option-1-using-native-tools"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用原生 MySQL 工具或第三方工具迁移数据库对象和数据。 | 有关说明，请参阅 mysq [ldump 和 [Percona XtraBackup](https://www.percona.com/software/mysql-database/percona-xtrabackup)（用于物理迁移）等 MySQ](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) L 工具的文档。有关选项的更多信息，请参阅博客文章 [MySQL 到 Amazon RDS for MySQL 或 Amazon Aurora MySQL 的迁移选项](https://aws.amazon.com/blogs/database/migration-options-for-mysql-to-amazon-rds-for-mysql-or-amazon-aurora-mysql/) | 数据库管理员 | 

### 迁移数据-选项 2（使用 AWS DMS）
<a name="migrate-data-option-2-using-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用迁移数据 AWS DMS。 | 有关说明，请参阅 [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)。 | 数据库管理员 | 

### 在割接之前执行初步任务
<a name="perform-preliminary-tasks-before-cutover"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 修复对象计数差异。 | 从源数据库和新目标数据库收集对象计数。修复目标数据库差异。 | 数据库管理员 | 
| 检查依赖项。 | 检查与其他数据库之间的依赖关系（链接）是否有效并按预期工作。 | 数据库管理员 | 
| 执行测试。 | 如果这是测试周期，请执行查询测试、收集指标以及修复问题。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 切换至目标数据库。 | 将客户端应用程序切换至新基础设施。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 提供测试支持。 | 为功能应用测试提供支持。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭资源。 | 关闭您为迁移创建的临时 AWS 资源。 | 数据库管理员、系统管理员 | 
| 验证项目文档。 | 查看和验证项目文档。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 收集指标。 | 收集关于迁移时间、手动与工具工作的百分比、成本节省等指标。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 关闭项目。 | 关闭项目并提供反馈。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 停用源数据库。 | 当所有迁移和割接任务完成后，停用本地数据库。 | 数据库管理员、系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-resources"></a>

**参考**
+ [关系数据库的迁移策略](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-database-migration/welcome.html)
+ [AWS DMS 网站](https://aws.amazon.com/dms/)
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/)
+ [Amazon RDS 文档](https://docs.aws.amazon.com/rds/)
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)
+ [Amazon VPC 和 Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html)
+ [Amazon RDS Multi-AZ 部署](https://aws.amazon.com/rds/details/multi-az/)
+ [使用 Percona、A XtraBackup mazon EFS 和 Amazon S3 将本地 MySQL 数据库迁移到 Aurora MySQL](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3.html)
+ [Amazon RDS 数据库实例存储](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)

**教程**
+ [入门 AWS DMS](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)

# 将本地 Microsoft SQL Server 数据库迁移至 Amazon RDS for SQL Server
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server"></a>

*Henrique Lobao、Jonathan Pereira Cruz 和 Vishal Singh，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-summary"></a>

此模式提供以下指导：将本地 Microsoft SQL Server 数据库迁移至 Amazon Relational Database Service (Amazon RDS) for SQL Server。它描述了两种迁移选项：使用 AWS Data Migration Service (AWS DMS) 或使用原生 Microsoft SQL Server 工具，例如复制数据库向导。

## 先决条件和限制
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心的源 Microsoft SQL Server 数据库

**限制**
+ 数据库大小限制：16 TB

**产品版本**
+ 有关当前支持的版本和功能的最新列表，请参阅 AWS 文档中的 [Microsoft SQL Server on Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport)。如果您使用的是 AWS DMS，另请参阅 AWS DMS 支持的 SQL Server 版本的[使用 Microsoft SQL Server 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.SQLServer.html)。

## 架构
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-architecture"></a>

**源技术堆栈**
+ 本地 Microsoft SQL Server 数据库

**目标技术堆栈**
+ Amazon RDS for SQL Server DB 实例 

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

*使用 AWS DMS：*

![\[使用 AWS DMS 从本地 SQL Server 迁移至 Amazon RDS 的架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/27942833-c294-405c-90e6-32cc197e36ee/images/69b9877c-2d56-4d64-8475-a3dae789c5de.png)


*使用原生 SQL Server 工具：*

![\[使用 SQL Server 工具从本地 SQL 服务器迁移至 Amazon RDS 的架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/27942833-c294-405c-90e6-32cc197e36ee/images/45ee14e4-3c7e-4b35-a2c9-3e8e3c7e6cee.png)


## 工具
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 支持不同类型的源数据库和目标数据库。有关详细信息，请参阅 [AWS DMS Step-by-Step 演练](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)。如果 AWS DMS 不支持源数据库，请选择其他方法来迁移数据。 
+ 原生 Microsoft SQL Server 工具包括备份和恢复、复制数据库向导以及复制和附加数据库。

## 操作说明
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库版本和引擎。 |  | 数据库管理员 | 
| 确定目标服务器实例的硬件要求。 |  | 数据库管理员、系统管理员 | 
| 确定存储需求（存储类型和容量）。 |  | 数据库管理员、系统管理员 | 
| 根据容量、存储功能和网络功能选择正确的实例类型。 |  | 数据库管理员、系统管理员 | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员、系统管理员 | 
| 确定应用程序迁移策略。 |  | 数据库管理员、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 |  | 系统管理员 | 
| 创建安全组。 |  | 系统管理员 | 
| 配置和启动运行 Amazon RDS 数据库实例。 |  | 数据库管理员、系统管理员 | 

### 迁移数据 - 选项 1
<a name="migrate-data---option-1"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用原生 SQL Server 工具或第三方工具迁移数据库对象和数据。 |  | 数据库管理员 | 

### 迁移数据 - 选项 2
<a name="migrate-data---option-2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS DMS 迁移数据。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序迁移策略。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | 数据库管理员、系统管理员 | 
| 查看和验证项目文档。 |  | 数据库管理员、应用程序所有者、系统管理员 | 
| 收集关于迁移时间、手动任务与自动任务的百分比以及成本节省等指标。 |  | 数据库管理员、应用程序所有者、系统管理员 | 
| 关闭项目并提供反馈。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-resources"></a>

**参考**
+ [在 Amazon Web Services 上部署 Microsoft SQL Server](https://d1.awsstatic.com/whitepapers/RDS/Deploying_SQLServer_on_AWS.pdf) 
+ [AWS DMS 网站](https://aws.amazon.com/dms/)
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)
+ [AWS 上的 Microsoft 产品](https://aws.amazon.com/windows/products/)
+ [AWS 上的 Microsoft 许可](https://aws.amazon.com/windows/resources/licensing/)
+ [AWS 上的 Microsoft SQL Server](https://aws.amazon.com/windows/products/sql/)
+ [将 Windows 身份验证与 Microsoft SQL Server 数据库实例结合使用](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_SQLServerWinAuth.html)
+ [Amazon RDS 多可用区部署](https://aws.amazon.com/rds/details/multi-az/)

**教程和视频**
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)
+ [AWS DMS（视频）](https://www.youtube.com/watch?v=zb4GcjEdl8U) 
+ [Amazon RDS（视频）](https://www.youtube.com/watch?v=igRfulrrYCo)  

# 使用 Rclone 将数据从 Microsoft Azure Blob 迁移至 Amazon S3
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone"></a>

*Suhas Basavaraj、Aidan Keane 和 Corey Lane，Amazon Web Services*

## Summary
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-summary"></a>

此模式描述如何使用[克隆](https://rclone.org/)将数据从 Microsoft Azure Blob 对象存储迁移到 Amazon Simple Storage Service (Amazon S3) 存储桶。您可使用此模式对数据执行一次性迁移或持续同步。Rclone 是用 Go 编写的命令行程序，用于跨云提供商的各种存储技术移动数据。

## 先决条件和限制
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 存储在 Azure Blob 容器服务的数据

## 架构
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-architecture"></a>

**源技术堆栈**
+ Azure Blob 存储容器

**目标技术堆栈**
+ 亚马逊 S3 存储桶
+ 亚马逊弹性计算云 (亚马逊 EC2) Linux 实例

**架构**

![\[将数据从 Microsoft Azure 迁移至 Amazon S3\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6ead815d-7768-4726-b27d-97a70cd21081/images/abe69eee-632f-4ca2-abf6-3223f3f3ec94.png)


## 工具
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-tools"></a>
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [Rclone](https://rclone.org/) 是一款受 **rsync** 启发的开源命令行程序。它用于管理许多云存储平台文件。

## 最佳实践
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-best-practices"></a>

将数据从 Azure 迁移至 Amazon S3 时，请注意以下注意事项，以避免不必要的成本或传输速度变慢：
+ 在与 Azure 存储账户和 Blob 容器相同的地理区域中创建 AWS 基础设施，例如 AWS 区域 `us-east-1`（弗吉尼亚北部）以及 Azure 区域 `East US`。
+ 如果可能，请避免使用 NAT 网关，因为它会累积入口与出口带宽的数据传输费用。
+ 使用[适用于 Amazon S3 的 VPC 网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)提高性能。
+ 考虑使用基于 AWS Graviton2 (ARM) 处理器的 EC2 实例，与英特尔 x86 实例相比，成本更低，性能更高。Rclone 经过大量交叉编译，并提供了预编译 ARM 二进制文件。

## 操作说明
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-epics"></a>

### 准备 AWS 和 Azure 云资源
<a name="prepare-aws-and-azure-cloud-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备目标 S3 存储桶。 | 在相应的 AWS 区域[创建新 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)，或者选择现有存储桶作为要迁移的数据的目的地。 | AWS 管理员 | 
| 为亚马逊创建 IAM 实例角色 EC2。 | 为@@ [亚马逊创建一个新的 AWS 身份和访问管理 (IAM) 角色 EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#working-with-iam-roles)。此角色授予您的 EC2 实例对目标 S3 存储桶的写入权限。 | AWS 管理员 | 
| 将 策略附加到 IAM 实例角色。 | 使用 IAM 控制台或 AWS 命令行界面 (AWS CLI) Line CLI 为实例角色创建内联策略， EC2 该策略允许对目标 S3 存储桶进行写入访问权限。有关示例策略，请参阅[其他信息](#migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional)部分。 | AWS 管理员 | 
| 启动实 EC2 例。 | 启动配置为使用新创建的 IAM 服务角色的 Amazon Linux EC2 实例。此实例还需通过互联网访问 Azure 公共 API 端点。 考虑使用[基于 AWS Graviton 的 EC2 实例来降低成本](https://docs.aws.amazon.com/compute-optimizer/latest/ug/graviton-recommendations.html)。Rclone 提供了 ARM 编译二进制文件。 | AWS 管理员 | 
| 创建 Azure AD 服务主体。 | 使用 Azure CLI 创建对源 Azure Blob 存储容器具有只读访问权限的 Azure Active Directory (Azure AD) 服务主体。有关说明，请参阅[其他信息](#migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional)部分。将这些证书存储在您的 EC2 实例上，存储到相应的位置`~/azure-principal.json`。 | 云管理员，Azure | 

### 安装和配置 Rclone
<a name="install-and-configure-rclone"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载并安装 Rclone。 | 下载和安装 Rclone 命令行程序。有关安装说明，请参阅 [Rclone 安装文档](https://rclone.org/install/)。 | 常规 AWS，云管理员 | 
| 配置 Rclone。 | 复制以下 `rclone.conf` 示例文件。将 `AZStorageAccount` 替换为您的 Azure Storage 账户名称，将 `us-east-1` 替换为 S3 存储桶所在的 AWS 区域。将此文件保存到您的 EC2 实例`~/.config/rclone/rclone.conf`上的相应位置。<pre>[AZStorageAccount]<br />type = azureblob<br />account = AZStorageAccount<br />service_principal_file = azure-principal.json<br /><br />[s3]<br />type = s3<br />provider = AWS<br />env_auth = true<br />region = us-east-1</pre> | 常规 AWS，云管理员 | 
| 验证 Rclone 配置。 | 若要确认 Rclone 已配置且权限是否正常运行，请验证 Rclone 是否可以解析您的配置文件，以及 Azure Blob 容器和 S3 存储桶中的对象是否可以访问。有关示例验证命令，请参阅以下内容。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone.html) | 常规 AWS，云管理员 | 

### 通过 Rclone 迁移数据
<a name="migrate-data-using-rclone"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从容器迁移数据。 | 运行 Rclone [复制](https://rclone.org/commands/rclone_copy/)或者[同步](https://rclone.org/commands/rclone_sync/)命令。 **示例：复制**此命令将数据从源 Azure Blob 容器复制至目标 S3 存储桶。<pre>rclone copy AZStorageAccount:blob-container s3:amzn-s3-demo-bucket1</pre>**示例：同步**此命令在源 Azure Blob 容器和目标 S3 存储桶间同步数据。****<pre>rclone sync AZStorageAccount:blob-container s3:amzn-s3-demo-bucket1</pre>使用 **sync** 命令时，源容器中不存在的数据将从目标 S3 存储桶中删除。 | 常规 AWS，云管理员 | 
| 同步容器。 | 初始复制完成后，运行 Rclone **sync** 命令以进行持续迁移，这样只会复制目标 S3 存储桶中缺少的新文件。 | 常规 AWS，云管理员 | 
| 验证数据是否成功迁移。 | 若要检查数据是否已成功复制到目标 S3 存储桶，请运行Rclone [lsd](https://rclone.org/commands/rclone_lsd/) 和 [ls](https://rclone.org/commands/rclone_ls/) 命令。 | 常规 AWS，云管理员 | 

## 相关资源
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-resources"></a>
+ [Amazon S3 用户指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)（AWS 文档）
+ [亚马逊的 IAM 角色 EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)（AWS 文档）
+ [创建 Microsoft Azure Blob 容器](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal)（Microsoft Azure 文档）
+ [Rclone 命令](https://rclone.org/commands/)（Rclone 文档）

## 附加信息
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional"></a>

**实例的角色策略示 EC2 例**

该策略授予您的 EC2 实例对您账户中特定存储桶的读写权限。如果您的存储桶使用客户管理的密钥进行服务器端加密，则策略可能需要对 AWS Key Management Service (AWS KMS) 的额外访问权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket/*",
              "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        }    
    ]
}
```

**创建只读 Azure AD 服务主体**

Azure 服务主体是客户应用程序、服务和自动化工具用来访问特定 Azure 资源的安全标识。可以将其视为具有特定角色和严格控制访问资源的权限的用户身份（登录名和密码或证书）。要创建只读服务主体、以遵循最低权限并保护 Azure 中的数据免遭意外删除，请按照以下步骤操作：

1. 登录你的 Microsoft Azure 云账户门户，在工作站上启动云命令行 PowerShell 或使用 Azure 命令行界面 (CLI)。

1. 创建服务主体，并将其配置为对 Azure Blob 存储账户的[只读](https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#storage-blob-data-reader)访问权限。将此命令 JSON 输出保存到名为 `azure-principal.json` 的本地文件中。该文件将上传到您的 EC2 实例。将大括号（`{`和`}`）中显示的占位符变量替换为您的 Azure 订阅 ID、资源组名称和存储账户名称。

   ```
   az ad sp create-for-rbac `
   --name AWS-Rclone-Reader `
   --role "Storage Blob Data Reader" `
   --scopes /subscriptions/{Subscription ID}/resourceGroups/{Resource Group Name}/providers/Microsoft.Storage/storageAccounts/{Storage Account Name}
   ```

# 从 Couchbase Server 迁移至 AWS 上的 Couchbase Capella
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws"></a>

*Battulga Purevragchaa 和 Saurabh Shanbhag，Amazon Web Services*

*Mark Gamble，无*

## Summary
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-summary"></a>

Couchbase Capella 是一个完全托管的 NoSQL 数据库即服务，适用于任务关键型应用程序（例如，用户配置文件或在线目录和库存管理）。DBaaCouchbase Capella 在 Couchbase 管理的亚马逊网络服务 (AW DBaa S) 账户中管理你的 S 工作负载。Capella 可以让您在单个界面中轻松运行和管理多集群、多 AWS 区域、多云和混合云复制。

Couchbase Capella 可帮助您立即扩展 Couchbase Server 应用程序，帮助您在几分钟内创建多节点集群。Couchbase Capella 支持所有 Couchbase Server 功能，包括 [SQL\$1\$1](https://www.couchbase.com/products/n1ql)、[全文搜索](https://www.couchbase.com/products/full-text-search)、[事件服务](https://docs.couchbase.com/server/current/eventing/eventing-overview.html)和[分析服务](https://www.couchbase.com/products/analytics)。它还消除了管理安装、升级、备份和一般数据库维护的需要。 

本示例介绍了将自托管的 [Couchbase Server](https://www.couchbase.com/products/server) 环境迁移之 Amazon Web Services Cloud 的最佳做法。该模式提供了一个可重复的过程，用于将数据和索引从本地或云中运行的 Couchbase Server 集群迁移到 Couchbase Capella。使用这些步骤可帮助您避免迁移期间出现问题并加快整个迁移过程。

此模式提供以下两个迁移项：
+ 如果要迁移的索引少于 50 个，则**选项 1** 是合适的。 
+ 如果要迁移的索引超过 50 个，则**选项 2** 是合适的。 

您还可以在自托管 Couchbase 服务器上[设置示例数据](https://docs.couchbase.com/server/current/manage/manage-settings/install-sample-buckets.html)，以便按照迁移指南进行操作。

如果您选择迁移**选项 2**，或者您使用的范围或集合不是默认值，则应参见示例配置文件*其他信息*部分。

## 先决条件和限制
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-prereqs"></a>

**先决条件**
+ 现有 Couchbase Capella 付费账户。您还可以在 [AWS 上创建 Couchbase Capella](https://aws.amazon.com/marketplace/pp/prodview-xrhx5zgue5c26) 账户，并使用 Couchbase Capella 免费试用版，然后升级到付费账户来配置集群以进行迁移。要从试用版开始，请按照 [Couchbase Capella 入门](https://docs.couchbase.com/cloud/get-started/create-account.html)中的说明进行操作。
+ 现有的自托管 Couchbase Server 环境，可以在本地部署或部署在云服务提供商上。 
+ 对于迁移选项 2，使用 Couchbase Shell 和配置文件。若要创建配置文件，可以使用*其他信息*部分中的示例文件。
+ 熟悉管理 Couchbase Server 和 Couchbase Capella。
+ 熟悉打开 TCP 端口及在命令行界面（CLI）中运行命令。

迁移过程还需要下表中描述的角色和专业知识。


| 
| 
|  角色 | 专业知识 | 责任 | 
| --- |--- |--- |
| Couchbase 管理员 | 熟悉 Couchbase Server 和 Couchbase Capella基本的命令行知识很有帮助，但非必需的 | Couchbase Server 与 Capella 特定任务 | 
| 系统管理员、IT 管理员 | 熟悉自托管的 Couchbase 服务器系统环境和管理 | 在自托管的 Couchbase Server 集群节点上打开端口并确定 IP 地址 | 

 

**限制**
+ 这种模式用于将数据、索引和 [Couchbase 全文搜索](https://docs.couchbase.com/server/current/fts/full-text-intro.html)索引从 Couchbase Server 迁移到 AWS 上的 Couchbase Capella。这种模式不适用于迁移 [Couchbase Eventing Service](https://docs.couchbase.com/server/current/eventing/eventing-overview.html) 或 [Couchbase Analytics](https://docs.couchbase.com/server/current/analytics/introduction.html)。
+ Couchbase Capella 在多个 AWS 区域可用。有关 Capella 支持的区域 up-to-date的信息，请参阅 Couchbase 文档中的[亚马逊 Web Services](https://docs.couchbase.com/cloud/reference/aws.html)。

**产品版本**
+ [Couchbase Server（Community Edition 或企业版）版本 5.x 或更高版本](https://docs.couchbase.com/server/current/release-notes/relnotes.html)

## 架构
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-architecture"></a>

**源技术堆栈**
+ Couchbase Server

**目标技术堆栈**
+ Couchbase Capella

**目标架构**

![\[只需四步，即可将 Couchbase Capella 迁移到 AWS Capella 数据面板上的 Couchbase 集群。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/14ac5a81-eade-4708-9335-f5602fa07824/images/95cd7f33-742e-4d10-8e2c-37c7b4d9df45.png)


1. 您可使用**Capella 控制面板**访问 Couchbase Capella。您可使用 Capella 控制面板来执行以下操作：
   + 控制和监控账户。
   + 管理集群和数据、索引、用户和组、访问权限、监控和事件。

1. 创建集群。

1. **Capella 数据面板**位于 Couchbase 管理的 Amazon Web Services account 中。创建新集群后，Couchbase Capella 会将其部署至所选 AWS 区域的多个可用区。

1. 您可在 Amazon Web Services account 的 VPC 中开发和部署 Couchbase 应用程序。通常，此 VPC 通过 [VPC 对等连接](https://docs.couchbase.com/cloud/clouds/private-network.html)访问 Capella 数据面板。

## 工具
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-tools"></a>
+ [Couchbase Cross Data Center Replication (XDCR)](https://docs.couchbase.com/cloud/current/clusters/xdcr/xdcr.html) 有助于在位于不同云提供商和不同数据中心的集群之间复制数据。它用于将数据从自托管的 Couchbase Server 集群迁移至 Couchbase Capella。
**注意**  
XDCR 不能与 Couchbase Server Community Edition 一起用于迁移至 Couchbase Capella。相反，您可以使用 [cbexport](https://docs.couchbase.com/server/current/tools/cbexport.html)。有关更多信息，请参阅*从 Community Edition 迁移数据*操作说明。
+ [Couchbase Shell](https://couchbase.sh/docs/) 是 Couchbase Server 和 Couchbase Capella 访问本地和远程 Couchbase 集群的命令行外壳。在这种模式中，Couchbase Shell 可用于迁移索引。
+ [cbexport](https://docs.couchbase.com/server/current/tools/cbexport.html) 是 Couchbase 实用程序，用于从 Couchbase 集群中导出数据。包含在 [Couchbase Server CLI 工具](https://docs.couchbase.com/server/current/cli/cli-intro.html)中。

## 操作说明
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 评估自托管的 Couchbase Server 集群的大小。 | 登录适用于 Couchbase Server 的 [Couchbase Web 控制台](https://docs.couchbase.com/server/current/manage/manage-ui/manage-ui.html)，然后评测自托管的集群的节点和存储桶。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html)您将使用自托管的 Couchbase Server 集群配置作为在 Couchbase Capella 上调整和配置目标集群的通用指南。如需有关更详细的 Couchbase Capella 缩放练习的帮助，请[联系 Couchbase](https://www.couchbase.com/contact)。 | Couchbase 管理员 | 
| 在自托管的 Couchbase 服务器集群上记录 Couchbase 服务分发情况。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员 | 
| 记录自托管的 Couchbase Server 集群节点的 IP 地址。 | （如果您使用的是Community Edition，请忽略此步骤。） 记录集群中每个节点 IP 地址。稍后它们将被添加到您的 Couchbase Capella 集群上的允许列表中。 | Couchbase 管理员、系统管理员 | 

### 在 Couchbase Capella 上部署和配置资源
<a name="deploy-and-configure-resources-on-couchbase-capella"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| Choose a template。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员 | 
| 选择和配置节点。 | 选择和配置节点以匹配您的自托管的 Couchbase Server 集群环境，包括节点数量、服务分布、计算或 RAM 以及存储。Couchbase Capella 使用[多维缩放最佳实践](https://docs.couchbase.com/cloud/clusters/scale-cluster.html#scale-a-cluster)。只能根据部署最佳实践来选择服务与节点。这可能意味着您无法完全匹配自托管 Couchbase Server 集群配置。 | Couchbase 管理员 | 
| 部署集群。 | 选择支持区域与支持包，然后部署集群。有关详细步骤和说明，请参阅 Couchbase 文档中的[创建集群](https://docs.couchbase.com/cloud/clusters/create-cluster.html)。如果您使用的是 Couchbase Capella 免费试用版，则必须先将其转换为付费账户，然后才能开始迁移。要转换您的账户，请打开 Couchbase Capella 控制面板的**账单**部分，然后选择**添加激活 ID**。在您与 Couchbase 销售人员签订购买协议后，或者在您通过 [Amazon Web Services Marketplace](https://aws.amazon.com/marketplace/pp/prodview-xrhx5zgue5c26) 进行购买之后，激活编号将发送到您的账单联系人电子邮件地址。 | Couchbase 管理员 | 
| 创建数据库凭证用户。 | 数据库凭证用户特定于集群，由用户名、密码和一组存储桶权限组成。此用户是创建存储桶和访问存储桶数据的必要条件 在 Couchbase Capella 控制面板中，按照 Couchbase Capella 文档中[配置数据库凭证](https://docs.couchbase.com/cloud/clusters/manage-database-users.html)中的说明为新集群创建数据库凭证。如果组织用户想要远程或通过 Couchbase Capella 用户界面访问特定集群上的存储桶数据，则需要为其分配组织角色证书。这与数据库凭证是分开的，后者通常由应用程序与集成使用。创建组织用户允许您在 Couchbase Capella 集群创建和管理目标存储桶。 | Couchbase 管理员 | 
| 如果使用迁移选项 2，请安装 Couchbase Shell。 | 您可将 Couchbase Shell 安装在任何能够通过网络访问自托管的 Couchbase 服务器和 Couchbase Capella 集群的系统上。有关更多信息，请参阅 Couchbase Shell 文档中的[安装 Couchbase Shell 版本 1.0.0-beta.5](https://couchbase.sh/docs/#_installation)。通过在命令行终端中[测试与自托管集群的连接](https://couchbase.sh/docs/#_connecting_to_a_cluster)，确认已安装 Couchbase Shell。 | Couchbase 管理员、系统管理员 | 
| 允许 IP 地址。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html)有关允许的 IP 地址的更多信息，请参阅 Couchbase 文档中的[配置允许 IP 地址](https://docs.couchbase.com/cloud/get-started/configure-cluster-access.html#allow-ip-address)。 | Couchbase 管理员、系统管理员 | 
| 配置证书。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员、系统管理员 | 
| 创建 Couchbase Shell 的配置文件。 | 在 Couchbase Shell 安装的主目录中创建配置点文件（例如 `/<HOME_DIRECTORY>/.cbsh/config`）。有关更多信息，请参阅 Couchbase 文档中的 [Config dotfiles](https://couchbase.sh/docs/#_the_config_dotfiles)。将源集群和目标集群连接属性添加到配置文件中。您可使用*其他信息*部分中的示例配置文件并编辑集群的设置。 将包含更新设置的配置文件保存到 `.cbsh` 文件夹（例如 `/<HOME_DIRECTORY>/.cbsh/config`）。 | Couchbase 管理员、系统管理员 | 
| 创建目标存储桶。 | 对于每个源存储桶，请按照 Couchbase 文档中创建存储桶中的说明在您的 Couchbase Capella 集群中[创建目标存储桶](https://docs.couchbase.com/cloud/clusters/data-service/manage-buckets.html#add-bucket)。您的目标存储桶配置必须与您自托管的 Couchbase Server 集群中存储桶的存储桶名称、内存设置和冲突解决设置相匹配。 | Couchbase 管理员 | 
| 创建范围和集合。 | 每个存储桶都包含一个默认作用域和带有密钥空间 `_default._default` 的集合。如果您在作用域和集合中使用任何其他密钥空间，则必须在目标 Capella 集群中创建相同的密钥空间。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html)<pre>scopes --clusters "On-Prem-Cluster" --bucket <BUCKET_NAME> | select scope | where scope != "_default" | each { |it| scopes create $it.scope --clusters "Capella-Cluster" }<br />collections --clusters "On-Prem-Cluster" --bucket <BUCKET_NAME> | select scope collection | where $it.scope != "_default" | where $it.collection != "_default" | each { |it| collections create $it.collection --clusters "Capella-Cluster" --bucket <BUCKET_NAME> --scope $it.scope }</pre> | Couchbase 管理员 | 

### 从 Enterprise Edition 迁移数据
<a name="migrate-the-data-from-enterprise-edition"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在自托管的 Couchbase 服务器集群节点上打开 TCP 端口。 | 确保在自托管的 Couchbase Server 集群的节点上打开相应的端口，以便进行 XDCR 通信。有关更多信息，请参阅 [Couchbase Server 端口文档](https://docs.couchbase.com/server/current/install/install-ports.html#ports-listed-by-communication-path)。 | Couchbase 管理员、系统管理员 | 
| 如果您使用的是 Couchbase Server 企业版，请设置 Couchbase XDCR。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员 | 
| 启动 Couchbase XDCR。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员 | 

### 使用选项 1 迁移索引
<a name="migrate-the-indexes-by-using-option-1"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将自托管的集群索引迁移至 Couchbase Capella。 | 如果要迁移的索引少于 50 个，我们建议您执行此过程。如果您要迁移的索引超过 50 个，建议您使用迁移选项 2。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员、系统管理员 | 

### 使用选项 2 迁移索引
<a name="migrate-the-indexes-by-using-option-2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 迁移索引定义。 | 如果要迁移的索引超过 50 个，我们建议您执行此过程。如果您要迁移的索引少于 50 个，建议您使用迁移选项 1。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员、系统管理员 | 
| 生成索引定义。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员、系统管理员 | 

### 迁移全文搜索索引
<a name="migrate-full-text-search-indexes"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将自托管的集群全文搜索索引迁移至 Couchbase Capella。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员 | 

### 从 Couchbase Community Edition 迁移
<a name="migrate-data-from-couchbase-community-edition"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从自托管的 Couchbase Server Community Edition 导出数据。 | 加密 XDCR 在 Couchbase Community Edition 中不可用。您可以从 Couchbase Community Edition 导出数据，然后手动将数据导入 Couchbase Capella。要从源存储桶导出数据，请在命令行中使用 `cbexport`。以下命令是一个示例。<pre>cbexport json \<br />--cluster localhost \<br />--bucket <SOURCE BUCKET NAME> \<br />--format lines \<br />--username <USERNAME> \<br />--password <PASSWORD> \<br />--include-key cbkey \<br />--scope-field cbscope \<br />--collection-field cbcoll \<br />--output cbexported_data.json</pre>请注意，`cbkey`、`cbscope`、`cbcoll` 和 `cbexported_data.json` 是任意标签。稍后将在此过程中引用它们，因此如果您选择以不同的方式命名它们，请记下它。 | Couchbase 管理员 | 
| 将数据导入 Couchbase Capella。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html)对于大文件，Couchbase Capella 支持使用 curl 执行命令行导入。您可以在 Couchbase Capella 文档中的[导入数据](https://docs.couchbase.com/cloud/clusters/data-service/import-data-documents.html)中更详细地探索导入选项。 | Couchbase 管理员 | 

### 测试和验证迁移
<a name="test-and-verify-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证数据迁移。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员 | 
| 验证索引迁移。 | 在 Couchbase Capella 控制面板，在目标集群的**工具**下拉列表中，选择**索引**。验证索引是否已完成迁移和构建。 | Couchbase 管理员 | 
| 验证查询结果。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员 | 
| 验证全文搜索结果（如果您迁移了 FTS 索引，则适用）。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | Couchbase 管理员 | 

## 相关资源
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-resources"></a>

**准备迁移**
+ [开始使用 Couchbase Capella 免费试用版](https://cloud.couchbase.com/sign-up)
+ [云提供程序对 Couchbase Capella 的要求](https://docs.couchbase.com/cloud/reference/aws.html)
+ [Couchbase Capella 缩放指南](https://docs.couchbase.com/cloud/clusters/sizing.html)

**迁移数据和索引**
+ [Couchbase XDCR](https://docs.couchbase.com/cloud/clusters/xdcr/xdcr.html)
+ [Couchbase Shell 文档](https://couchbase.sh/docs/)

**Couchbase Cap SLAs ella 和支援**
+ [Couchbase Capella 服务](https://www.couchbase.com/capellasla)等级协议 () SLAs
+ [Couchbase Capella 服务支持策略](https://www.couchbase.com/support-policy/cloud)

## 附加信息
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-additional"></a>

以下代码是 [Couchbase Shell 的配置文件](https://couchbase.sh/docs/#_the_config_dotfiles)示例。 

```
Version = 1
 
[[clusters]]
identifier = "On-Prem-Cluster"
hostnames = ["<SELF_MANAGED_COUCHBASE_CLUSTER>"]
default-bucket = "travel-sample"
username = "<SELF_MANAGED_ADMIN>"
password = "<SELF_MANAGED_ADMIN_PWD>"
tls-cert-path = "/<ABSOLUTE_PATH_TO_SELF_MANAGED_ROOT_CERT>"
data-timeout = "2500ms"
connect-timeout = "7500ms"
query-timeout = "75s"
 
[[clusters]]
identifier = "Capella-Cluster"
hostnames = ["<COUCHBASE_CAPELLA_ENDPOINT>"]
default-bucket = "travel-sample"
username = "<CAPELLA_DATABASE_USER>"
password = "<CAPELLA_DATABASE_USER_PWD>"
tls-cert-path = "/<ABSOLUTE_PATH_TO_COUCHBASE_CAPELLA_ROOT_CERT>"
data-timeout = "2500ms"
connect-timeout = "7500ms"
query-timeout = "75s"
```

在保存配置文件之前，请使用下表，以确保您添加了自己的源和目标集群信息。

 


|  |  | 
| --- |--- |
| <SELF\$1MANAGED\$1COUCHBASE\$1CLUSTER> | 使用自托管 Couchbase 服务器集群的 IP 地址。 | 
| <SELF\$1MANAGED\$1ADMIN> | 使用管理员用户来管理您的自托管的 Couchbase 服务器集群。 | 
| <ABSOLUTE\$1PATH\$1TO\$1SELF\$1MANAGED\$1ROOT\$1CERT> | 使用您自托管的 Couchbase Server 集群保存的根证书文件的绝对路径。 | 
| <COUCHBASE\$1CAPELLA\$1ENDPOINT> | 使用您的 Couchbase Capella 集群的连接端点。 | 
| <CAPELLA\$1DATABASE\$1USER> | 使用您的 Couchbase Capella 集群数据库用户。 | 
| <CAPELLA\$1DATABASE\$1USER\$1PWD> | 使用 Couchbase Capella 集群的数据库用户密码。 | 
| <ABSOLUTE\$1PATH\$1TO\$1COUCHBASE\$1CAPELLA\$1ROOT\$1CERT> | 使用为 Couchbase Capella 集群保存的根证书文件的绝对路径。 | 

# 在 Amazon 上从 IBM WebSphere 应用程序服务器迁移到 Apache Tomcat EC2
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2"></a>

*Neal Ardeljan 和 Afroz Khan，Amazon Web Services*

## Summary
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-summary"></a>

此模式将引导您完成从运行 IBM WebSphere 应用程序服务器 (WAS) 的本地红帽企业 Linux (RHEL) 6.9 或更高版本系统迁移到在亚马逊弹性计算云 (Amazon) 实例上运行 Apache Tomcat 的 RHEL 8 的步骤。 EC2 

该模式可以应用于以下源和目标版本： 
+ WebSphere 应用程序服务器 7.x 到 Apache Tomcat 8（使用 Java 7 或更高版本） 
+ WebSphere 应用服务器 8.x 到 Apache Tomcat 8（使用 Java 7 或更高版本） 
+ WebSphere 应用程序服务器 8.5.5.x 到 Apache Tomcat 9（使用 Java 8 或更高版本） 
+ WebSphere 应用程序服务器 8.5.5.x 到 Apache Tomcat 10（使用 Java 8 或更高版本） 

## 先决条件和限制
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-prereqs"></a>

**先决条件**** **
+ 一个有效的 Amazon Web Services account 
+ Java 源代码，假定如下：
  + 使用 Java Development Kit (JDK)，版本的 Java 7 或更高版本 
  + 使用 Spring 或 Apache Struts 框架 
  + 不使用企业 Java Beans (EJB) 框架或任何其他不适合 Tomcat 的 WebSphere 服务器功能
  + 主要使用 servlet 或 Java 服务器页面 () JSPs 
  + 使用 Java Database Connectivity (JDBC) 连接器连接到数据库  
+ 来源 IBM WebSphere 应用程序服务器 7.x 或更高版本 
+ 目标 Apache Tomcat 8.5 或更高版本  

## 架构
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-architecture"></a>

**源技术堆栈****  **
+ 使用 Apache Struts Model-View-Controller (MVC) 框架构建的 Web 应用程序 
+ 在 IBM WebSphere 应用服务器 7.x 或 8.x 版本上运行的 Web 应用程序
+ 使用轻型目录访问协议 (LDAP) 连接器连接至 LDAP 目录 (iPlanet/eTrust) 的 Web 应用程序 
+ 使用 IBM Tivoli Access Manager (TAM) 连接更新 TAM 用户密码的应用程序（在本实现中，应用程序使用 PD.jar）

** ****本地数据库**
+ Oracle Database 21c (21.0.0.0)
+ Oracle Database 19c (19.0.0.0)
+ Oracle Database 12c 第 2 版 (12.2.0.1)
+ Oracle Database 12c 第 1 版 (12.1.0.2)

**目标技术堆栈**
+ Apache Tomcat 版本 8（或更高版本）在实例上的 RHEL 上运行 EC2 
+ Amazon Relational Database Service (Amazon RDS) for Oracle

有关 Amazon RDS 支持的 Oracle 版本的更多信息，请参阅 [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/) 网站。

**目标架构**

![\[在亚马逊上从 IBM WebSphere 迁移到 Apache Tomcat 的架构 EC2\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/96f91201-e0a6-4d3f-a94e-7bd68a59cc4e/images/11afe7c0-b400-423b-9dfe-02a915fe47ff.png)


## 工具
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-tools"></a>
+ 应用程序层：将 Java 应用程序重建至 WAR 文件。
+ 数据库层：Oracle 本机备份与还原。
+ 适用于 Jakarta EE 的 Apache Tomcat 迁移工具。该工具采用为在 Apache Tomcat 9 上运行的 Java EE 8 编写的 Web 应用程序，然后自动将其转换为实现 Jakarta EE 9 的 Apache Tomcat 10 上运行。

## 操作说明
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 完成应用程序发现、当前状态占用空间与性能基准。 |  | BA，迁移主管 | 
| 验证源数据库和目标数据库版本。 |  | 数据库管理员 | 
| 确定目标服务器 EC2 实例的硬件要求。 |  | 数据库管理员， SysAdmin | 
| 识别存储需求（存储类型和容量）。 |  | 数据库管理员， SysAdmin | 
| 根据容量、存储功能和网络功能选择正确的 EC2 实例类型。 |  | 数据库管理员， SysAdmin | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员， SysAdmin | 
| 确定应用程序迁移策略与工具。 |  | 数据库管理员，迁移主管 | 
| 完成应用程序迁移设计与迁移指南。 |  | 构建主管，迁移主管 | 
| 完成应用程序迁移运行手册。 |  | 构建主管，割接主管，测试主管，迁移主管 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 |  | SysAdmin | 
| 创建安全组。 |  | SysAdmin | 
| 配置和启动 Amazon RDS for Oracle。 |  | 数据库管理员， SysAdmin | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建或获取对端点访问权限，以获取数据库备份文件。 |  | 数据库管理员 | 
| 使用原生数据库引擎或第三方工具迁移数据库对象和数据。 | 有关详细信息，请参阅*其他信息*部分中的“迁移数据库对象和数据”。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 提交变更申请 (CR)。以进行迁移。 |  | 割接主管 | 
| 获得 CR 批准，以进行迁移。 |  | 割接主管 | 
| 遵循应用程序迁移运行手册的应用程序迁移策略。 | 有关详细信息，请参阅*其他信息*部分中的设置应用程序层。 | 数据库管理员，迁移工程师，应用程序所有者 | 
| 升级应用程序（如有必要）。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 完成功能测试、非功能测试、数据验证、SLA 与性能测试。 |  | 测试负责人、应用程序所有者、应用程序用户 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获得应用程序所有者或企业主的签名。 |  | 割接主管 | 
| 将应用程序客户端切换至新基础设施。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | DBA，迁移工程师， SysAdmin | 
| 审核和验证项目文档。 |  | 迁移主管 | 
| 收集关于迁移时间、手动任务与自动任务的百分比以及成本节省等指标。 |  | 迁移主管 | 
| 关闭项目并提供反馈。 |  | 迁移主管，应用程序所有者 | 

## 相关资源
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-resources"></a>

**参考**
+ [Apache Tomcat 10.0 文档](https://tomcat.apache.org/tomcat-10.0-doc/index.html)
+ [Apache Tomcat 9.0 文档](https://tomcat.apache.org/tomcat-9.0-doc/index.html)
+ [Apache Tomcat 8.0 文档](https://tomcat.apache.org/tomcat-8.0-doc)
+ [Apache Tomcat 8.0 安装指南](https://tomcat.apache.org/tomcat-8.0-doc/setup.html)
+ [Apache Tomcat JNDI 文档](https://tomcat.apache.org/tomcat-8.0-doc/jndi-datasource-examples-howto.html)
+ [Amazon RDS for Oracle 网站](https://aws.amazon.com/rds/oracle/) 
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/) 
+ [Oracle 和 Amazon Web Services](https://aws.amazon.com/oracle/) 
+ [Amazon RDS 上的 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS Multi-AZ 部署](https://aws.amazon.com/rds/details/multi-az/) 

**教程和视频**
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/) 

## 附加信息
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-additional"></a>

**迁移数据库对象与数据**

例如，如果您使用的是本机 Oracle backup/restore 实用程序：

1. 为数据库备份文件创建 Amazon Simple Storage Service (Amazon S3) 备份（可选）。

1. 将 Oracle Database 数据备份到网络共享文件夹。

1. 登录迁移暂存服务器，以映射网络共享文件夹。

1. 将数据从网络共享文件夹复制到 S3 存储桶。

1. 申请 Amazon RDS Multi-AZ 部署。

1. 将本地数据库备份恢复至 Amazon RDS for Oracle。

**设置应用程序层**

1. 从 Apache Tomcat 网站安装 Tomcat 8（或 9/10）。

1. 将应用程序和共享库打包至 WAR 文件。

1. 在 Tomcat 中部署 WAR 文件。

1. 监控启动日志，查看`Linux cat`所有缺少的共享库 WebSphere。

1. 观看`Linux cat`任何 WebSphere特定部署描述符扩展的起始记录。

1. 从 WebSphere 服务器收集所有缺失的依赖 Java 库。

1. 使用与 Tomc WebSphere at 兼容的等效项修改特定部署描述符元素。

1. 使用依赖 Java 库和更新的部署描述符重建 WAR 文件。

1. 更新 LDAP 配置、数据库配置和测试连接（请参阅 Apache Tomcat 文档中的 [Realm Configuration HOW-TO](https://tomcat.apache.org/tomcat-8.0-doc/realm-howto.html) 以及 [JNDI Datasource HOW-TO](https://tomcat.apache.org/tomcat-8.0-doc/jndi-datasource-examples-howto.html)）。

1. 针对还原的 Amazon RDS for Oracle Database 测试已安装的应用程序。

1. 从该 EC2 实例创建适用于 Linux 的亚马逊系统映像 (AMI)。

1. 使用应用程序负载均衡器和自动扩缩组启动已完成的架构。

1. 更新 URLs （使用 WebSEAL 连接点）以指向 Application Load Balancer。

1. 配置管理数据库 (CMDB) 

# 使用 Auto Scaling 从 IBM WebSphere 应用程序服务器迁移到亚马逊 EC2 上的 Apache Tomcat
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling"></a>

*Kevin Yung 和 Afroz Khan，Amazon Web Services*

## Summary
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-summary"></a>

此模式为在启用了 Amazon Aut EC2 o Scaling 的亚马逊弹性计算云 (亚马逊 EC2) 实例上将 Java WebSphere 应用程序从 IBM 应用程序服务器迁移到 Apache Tomcat 提供了指导。 

通过使用此示例，您可实现：
+ 降低 IBM 许可成本
+ 使用多可用区部署，实现高可用性
+ 使用 Amazon A EC2 uto Scaling 提高了应用程序的弹性

## 先决条件和限制
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-prerequisites-and-limitations"></a>

**先决条件**
+ Java 应用程序（版本 7. *x* 或 8. *x*）应该在 LAMP 堆栈中开发。
+ 目标状态是在 Linux 主机托管的 Java 应用程序。此示例已在 Red Hat Enterprise Linux (RHEL) 7 环境中成功实现。其他 Linux 发行版可遵循这种模式，但应参考 Apache Tomcat 发行版的配置。
+ 您应该了解 Java 应用程序的依赖项。
+ 您必须有权访问 Java 应用程序源代码才能更改。

**限制和更换平台的变化**
+ 您应该了解企业存档 (EAR) 组件，确认所有库都打包在 Web 组件 WAR 文件中。您需要配置 [Apache Maven WAR Plugin](https://maven.apache.org/plugins/maven-war-plugin/) 并生成 WAR 文件构件。
+ 使用 Apache Tomcat 8，servlet-api.jar 和应用程序包内置 jar 文件之间存在已知冲突。若要解决此问题，请将 servlet-api.jar 从应用程序包中删除。
+ 您必须配置位于 [Apache Tomcat 配置](https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html)的*类路径*中的 Web-inf/资源。默认情况下，将 JAR 库加载至以下目录。或者，您可以部署下的所有资源src/main/resources*。*
+ 检查 Java 应用程序中是否存在任何硬编码的上下文根，并更新 [Apache Tomcat 上下文根目录](https://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Defining_a_context)
+ 若要设置 JVM 运行时选项，可以在 Apache Tomcat bin 文件夹中创建配置文件 setenv.sh；如 JAVA\$1OPTS、JAVA\$1HOME** 等**。 
+ 身份验证是在容器级别配置，并在 Apache Tomcat 配置中设置为一个领域。已为以下三个领域中的任何一个建立身份验证： 
  + [JDBC Database Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#JDBC_Database_Realm_-_org.apache.catalina.realm.JDBCRealm) 在 JDBC 驱动程序访问的关系数据库查找用户。
  + [DataSource Database Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#DataSource_Database_Realm_-_org.apache.catalina.realm.DataSourceRealm) 在 JNDI 访问的数据库中查找用户。
  + [JNDI Directory Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#JNDI_Directory_Realm_-_org.apache.catalina.realm.JNDIRealm) 在 JNDI 提供者可以访问的轻型目录访问协议 (LDAP) 目录中查找用户。查询需要： 
    + LDAP 连接详细信息：用户搜索库、搜索筛选条件、角色库、角色筛选条件 
    + 密钥 JNDI Directory Realm：连接至 LDAP、对用户进行身份验证并检索用户所属的所有群组
+ 授权：如果容器具有基于角色授权，可以检查 web.xml 中的授权限制，则必须定义 Web 资源并将其与约束条件中定义的角色进行比较。如果 LDAP 没有组角色映射，则必须在 web.xml 中设置属性 < security-role-ref > 才能实现组角色映射。要查看配置文档的示例，请参见 [Oracle 文档](https://docs.oracle.com/cd/E19226-01/820-7627/bncav/index.html)。 
+ 数据库连接：在 Apache Tomcat 中通过 Amazon Relational Database Service (Amazon RDS) 端点 URL 和连接详细信息创建资源 使用 JNDI 查找更新应用程序代码以引用 a DataSource 。中定义的现有数据库连接 WebSphere 不起作用，因为它使用 WebSphere的 JNDI 名称。你可以<resource-ref>在 web.xml 中添加一个带有 JNDI 名称和 DataSource 类型定义的条目。若要查看示例配置文档，请参阅 [Apache Tomcat](https://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html#JDBC_Data_Sources) 文档。
+ 日志记录：默认情况下，Apache Tomcat 将日志记录到控制台或日志文件中。您可通过更新 *logging.properties*（参见[Tomcat 日志记录](https://tomcat.apache.org/tomcat-8.0-doc/logging.html)），启用 realm 级追踪。如果您使用 Apache Log4j 将日志附加至文件中，则必须下载 tomcat-juli 并将其添加至 *classpath*。
+ 会话管理：如果您保留 IBM WebSEAL 用于应用程序负载平衡与会话管理，则无需进行任何更改。[如果您在 AWS 上使用应用程序负载均衡器或网络负载均衡器来取代 IBM WebSEAL 组件，则必须使用带有 Memcached 集群的 Amazon ElastiCache 实例来设置会话管理，并将 Apache Tomcat 设置为使用开源会话管理。](https://github.com/magro/memcached-session-manager) 
+ 如果您使用的是 IBM WebSEAL 转发代理，则必须设置新的适用于 AWS 的网络负载均衡器。使用 Network Load Balancer IPs 提供的 WebSEAL 接合点配置。
+ SSL 配置：我们建议您使用安全套接字层 (SSL) 进行 end-to-end通信。若要在 Apache Tomcat 中设置 SSL 服务器配置，请按照 [Apache Tomcat 文档](https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html)中的说明进行操作。 

## 架构
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-architecture"></a>

**源技术堆栈**
+ IBM WebSphere 应用程序服务器

 

**目标技术堆栈**
+ 该架构使用 [Elastic Load Balancing（版本 2](https://docs.aws.amazon.com/elasticloadbalancing/)）。如果您使用 IBM WebSEAL 进行身份管理和负载平衡，则可以选择适用于 AWS 的网络负载均衡器与 IBM WebSEAL 反向代理集成。
+ Java 应用程序部署到 Apache Tomcat 应用程序服务器，该服务器在 A [mazon A EC2 uto](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html) Scaling 组中的 EC2 实例上运行。您可以基于 Amazon CloudWatch 指标（例如 CPU 利用率）设置[扩展策略](https://docs.aws.amazon.com/autoscaling/ec2/userguide/scaling_plan.html)。 
+ 如果您要停止使用 IBM WebSEAL 进行负载平衡，则可以使用 A [mazon for Memcached ElastiCache 进行会](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)话管理。
+ 对于后端数据库，您可以部署 [High Availability (Multi-AZ) for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html) 并选择数据库引擎类型。

 

**目标架构**

![\[AWS 云 architecture with VPC, two availability zones, load balancer, and database components.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/52b91dab-7b3b-4751-abe2-25e7c7cd8d89/images/25125023-9a81-452a-9ada-184e2416cc02.png)


## 工具
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)
+ Apache Tomcat（版本 7.*x* 或 8.*x*）
+ RHEL 7 或 Centos 7
+ [Amazon RDS Multi-AZ 部署](https://aws.amazon.com/rds/details/multi-az/)
+ [ ElastiCache 适用于 Memcached 的亚马逊](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)（可选）

## 操作说明
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-epics"></a>

### 设置 VPC
<a name="set-up-the-vpc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 |  |  | 
| 创建子网。 |  |  | 
| 必要时创建路由表。 |  |  | 
| 创建网络访问控制列表 (ACLs)。 |  |  | 
| 设置 AWS Direct Connect 或企业 VPN 连接。 |  |  | 

### 更换应用程序平台
<a name="replatform-the-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 重构应用程序构建 Maven 配置，以生成 WAR 构件。 |  |  | 
| 在 Apache Tomcat 中重构应用程序依赖项数据来源。 |  |  | 
| 重构应用程序源代码，以使用 Apache Tomcat 中的 JNDI 名称。 |  |  | 
| 将 WAR 神器部署至 Apache Tomcat 中。 |  |  | 
| 完成应用程序验证与测试。 |  |  | 

### 配置网络
<a name="configure-the-network"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置公司防火墙，以允许连接到依赖项服务。 |  |  | 
| 将公司防火墙配置为允许最终用户访问 Elastic Load Balancing on AWS。 |  |  | 

### 创建应用程序基础设施
<a name="create-the-application-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 EC2 实例上创建和部署应用程序。 |  |  | 
| 创建 Amazon f ElastiCache or Memcached 集群用于会话管理。 |  |  | 
| 为后端数据库创建 Amazon RDS Multi-AZ 实例。 |  |  | 
| 创建 SSL 证书并将其导入 AWS Certificate Manager (ACM)。 |  |  | 
| 在负载均衡器上安装 SSL 证书。 |  |  | 
| 为 Apache Tomcat 服务器安装 SSL 证书。 |  |  | 
| 完成应用程序验证与测试。 |  |  | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭现有基础设施。 |  |  | 
| 将数据库从生产环境恢复至 Amazon RDS。 |  |  | 
| 通过更改 DNS 割接应用程序。 |  |  | 

## 相关资源
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-related-resources"></a>

**参考**
+ [Apache Tomcat 7.0 文档](https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html)
+ [Apache Tomcat 7.0 安装指南](https://tomcat.apache.org/tomcat-7.0-doc/appdev/installation.html)
+ [Apache Tomcat JNDI 文档](https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html)
+ [Amazon RDS 多可用区部署](https://aws.amazon.com/rds/details/multi-az/)
+ [亚马逊 Memcac ElastiCache hed 版](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)

**教程和视频**
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)

# 将 .NET 应用程序从 Microsoft Azure 应用服务迁移到 AWS Elastic Beanstalk
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk"></a>

*Raghavender Madamshitti，Amazon Web Services*

## Summary
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-summary"></a>

此模式介绍如何将 Microsoft Azure 应用服务上托管的 .NET Web 应用程序迁移到 AWS Elastic Beanstalk。有两种方法可以将应用程序迁移到 Elastic Beanstalk：
+ 使用 AWS Toolkit for Visual Studio - 此插件适用于 Microsoft Visual Studio IDE，提供了将自定义 .NET 应用程序部署到 AWS 的最简单、最直接的方法。您可以使用此方法将 .NET 代码直接部署到 AWS，并直接从 Visual Studio 创建支持资源，例如 Amazon Relational Database Service（Amazon RDS）for SQL Server 数据库。
+ 上传并部署到 Elastic Beanstalk - 每个 Azure 应用服务都包含一个名为 Kudu 的后台服务，该服务可用于捕获内存转储和部署日志、查看配置参数以及访问部署包。您可以使用 Kudu 控制台访问 Azure 应用服务内容，提取部署包，然后使用 Elastic Beanstalk 控制台中的上传和部署选项将程序包上传到 Elastic Beanstalk。

此模式介绍了第二种方法（通过 Kudu 将应用程序上传到 Elastic Beanstalk）。该模式还使用以下 AWS 服务：AWS Elastic Beanstalk、亚马逊虚拟私有云（亚马逊 VPC）、亚马逊、亚马逊弹性计算云（ CloudWatch亚马逊）Auto Scaling、亚马逊简单存储服务（亚马逊 S3 EC2）Simple Storage Scaling 和亚马逊 Route 53。 

.NET Web 应用程序部署到 AWS Elastic Beanstalk 上，后者在亚马 EC2 逊 Auto Scaling 组中运行。您可以基于 Amazon CloudWatch 指标（例如 CPU 利用率）设置扩展策略。对于数据库，您可以在多可用区环境中使用 Amazon RDS 或 Amazon DynamoDB，具体取决于您的应用程序和业务需求。

## 先决条件和限制
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 在 Azure 应用服务中运行的 .NET Web 应用程序
+ 使用 Azure 应用服务 Kudu 控制台的权限

**产品版本**
+ .NET Core (x64) 1.0.1、2.0.0 或更高版本，或 .NET Framework 4.x、3.5（请参阅 Windows Server 平台上的 [.NET 历史记录](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-dotnet.html)）
+ Internet Information Services（IIS）版本 8.0 或更高版本，在 Windows Server 2012 或更高版本上运行
+ .NET 2.0 或 4.0 运行时系统。

## 架构
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-architecture"></a>

**源技术堆栈**
+  使用 .NET Framework 3.5 或更高版本或 .NET Core 1.0.1、2.0.0 或更高版本开发并托管在 Azure 应用服务（Web 应用或 API 应用）上的应用程序

**目标技术堆栈**
+ AWS Elastic Beanstalk 在亚马逊 EC2 Auto Scaling 群组中运行

**迁移架构**

![\[Kudu 访问 Azure 应用服务内容，获取部署包，然后将其上传到 Elastic Beanstalk。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/df606a2d-b0a8-4035-b377-0a760e7300c9/images/dd15f97b-9cf2-4bcc-af45-44df1c4ca4a5.png)


 

**部署工作流**

![\[部署工作流用于创建应用程序、将其发布到启动环境，然后管理环境。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/df606a2d-b0a8-4035-b377-0a760e7300c9/images/accec77d-c753-4166-8f27-bd4932b3d884.png)


## 工具
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-tools"></a>

**工具**
+ .NET Core 或 .NET Framework
+ C\$1
+ IIS
+ Kudu 控制台

**Amazon Web Services 和特征**
+ [AWS Elastic Be](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) anstalk — Elastic Beanstalk 是一项用于部署和扩展 easy-to-use .NET Web 应用程序的服务。Elastic Beanstalk 可自动管理容量预置、负载均衡和自动扩缩。
+ [Amazon A EC2 uto Scaling 组](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html) — Elastic Beanstalk 包括一个 Auto Scaling 组，负责管理环境 EC2 中的亚马逊实例。在单实例环境中，自动扩缩组可确保始终有一个正在运行的实例。在负载平衡的环境中，您可以为该组配置一系列要运行的实例，Amazon A EC2 uto Scaling 会根据需要根据负载添加或删除实例。
+ [Elastic Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) Balancing — 当你在 AWS Elastic Beanstalk 中启用负载平衡时，它会创建一个负载均衡器，用于在环境中的实例之间分配流量 EC2 。
+ [亚马逊 CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) — Elastic Beanstalk 自动 CloudWatch 使用亚马逊来提供有关您的应用程序和环境资源的信息。Amazon CloudWatch 支持标准指标、自定义指标和警报。
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) - Amazon Route 53 是一项高度可用且可扩展的云域名系统（DNS）Web 服务。您可以使用 Route 53 别名记录将自定义域名映射到 AWS Elastic Beanstalk 环境。

## 操作说明
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-epics"></a>

### 设置 VPC
<a name="set-up-a-vpc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置虚拟私有云（VPC）。 | 在您的 Amazon Web Services account 中，使用所需信息创建一个 VPC。 | 系统管理员 | 
| 创建子网。 | 在您的 VPC 中创建两个或更多子网。 | 系统管理员 | 
| 创建路由表。 | 根据您的要求创建路由表。 | 系统管理员 | 

### 设置 Elastic Beanstalk
<a name="set-up-elastic-beanstalk"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 访问 Azure 应用服务 Kudu 控制台。 | 导航到应用服务控制面板，然后选择**高级工具**，然后**转到**，通过 Azure 门户访问 Kudu。或者，可以修改 Azure 应用服务 URL，如下所示：`https://<appservicename>.scm.azurewebsites.net`。 | 应用程序开发人员、系统管理员 | 
| 从 Kudu 下载部署包。 |  PowerShell 通过选择相应**DebugConsole**选项导航到 Windows。这将打开 Kudo 控制台。转到 `wwwroot` 文件夹并下载它。这会将 Azure 应用服务部署包下载为 zip 文件。有关示例，请参阅附件。 | 应用程序开发人员、系统管理员 | 
| 为 Elastic Beanstalk 创建程序包。 | 解压缩从 Azure 应用服务下载的部署包。创建名为 `aws-windows-deployment-manifest.json` 的 JSON 文件（只有 .NET Core 应用程序才需要此文件）。创建一个包含 `aws-windows-deployment-manifest.json` 和 Azure 应用服务部署包文件的 zip 文件。有关示例，请参阅附件。 | 应用程序开发人员、系统管理员 | 
| 创建新的 Elastic Beanstalk 应用程序。 | 打开 Elastic Beanstalk 控制台。选择现有应用程序或创建新应用程序。 | 应用程序开发人员、系统管理员 | 
| 创建环境。 | 在 Elastic Beanstalk 控制台**操作**菜单中，选择**创建环境**。选择 Web 服务器环境和 .NET/IIS 平台。对于应用程序代码，选择**上传**。上传您为 Elastic Beanstalk 准备的 zip 文件，然后选择**创建环境**。 | 应用程序开发人员、系统管理员 | 
| 配置亚马逊 CloudWatch。 | 默认情况下，基本 CloudWatch 监控处于启用状态。如果您想要更改配置，请在 Elastic Beanstalk 向导中选择已发布的应用程序，然后选择**监控**。 | 系统管理员 | 
| 验证部署包是否位于 Amazon S3 中。 | 创建应用程序环境后，您可以在 S3 存储桶中找到部署包。 | 应用程序开发人员、系统管理员 | 
| 测试应用程序。 | 创建环境后，使用 Elastic Beanstalk 控制台中提供的 URL 测试应用程序。 | 系统管理员 | 

## 相关资源
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-resources"></a>
+ [AWS Elastic Beanstack 概念](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.html) （Elastic Beanstalk 文档）
+ [Elastic Beanstalk 上的 .NET 入门](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-getstarted.html)（Elastic Beanstalk 文档）
+ [Kudu 控制台](https://github.com/projectkudu/kudu/wiki/Kudu-console) () GitHub
+ [使用“Kudu”管理 Azure Web 应用程序](https://www.gslab.com/blogs/kudu-azure-web-app/)（GS 实验室文章）
+ [自定义 ASP.NET Core Elastic Beanstalk 部署](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/deployment-beanstalk-custom-netcore.html)（AWS Toolkit for Visual Studio 用户指南）
+ [Elastic Load Balancing 文档](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)
+ [AWS Elastic Beanstalk 支持的平台](https://docs.amazonaws.cn/en_us/elasticbeanstalk/latest/platforms/platforms-supported.html)（Elastic Beanstalk 文档）
+ [将 Web 应用程序部署到 AWS](https://www.c-sharpcorner.com/article/deploying-a-web-application-to-aws/)（C\$1 Corner 文章）
+ [扩展 Auto Scaling 组的规模](https://docs.aws.amazon.com/autoscaling/ec2/userguide/scaling_plan.html)（亚马逊 EC2 文档）
+ [Amazon RDS 的高可用性（多可用区）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html)（Amazon RDS 文档）

## 附加信息
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-additional"></a>

**备注**
+ 如果要将本地或 Azure SQL Server 数据库迁移到 Amazon RDS，还必须更新数据库连接详细信息。 
+ 出于测试目的，附加了一个示例演示应用程序。

## 附件
<a name="attachments-df606a2d-b0a8-4035-b377-0a760e7300c9"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/df606a2d-b0a8-4035-b377-0a760e7300c9/attachments/attachment.zip)

# 在 Amazon ECS 上从 Oracle 迁移 WebLogic 到 Apache Tomcat (ToMee)
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs"></a>

*Anya Epishcheva 和 Harshad Gohil，Amazon Web Services*

## Summary
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-summary"></a>

此模式讨论了使用亚马逊弹性容器服务 ([Amazon ECS) 将运行 Oracle 的本地 Oracle Solaris SPARC 系统迁移 WebLogic 到运行 Apache toMee（增加了容器支持的 Apache Tom](http://tomee.apache.org/) cat）的基于 Docker 容器的安装的步骤。

有关将与要从 Oracle 迁移的应用程序关联的数据库迁移 WebLogic 到 Tomcat 的信息，请参阅此目录中的数据库迁移模式。 

**最佳实践**

迁移 Java 和 Java Enterprise Edition (Java EE) Web 应用程序的步骤有所不同，具体取决于应用程序使用的容器特定资源的数量。基于 Spring 的应用程序通常更容易迁移，因为它们对部署容器有少量依赖项。相比之下，使用企业 JavaBeans (EJBs) 和托管容器资源（例如线程池、Java 身份验证和授权服务 (JAAS) 以及容器管理的持久性 (CMP)）的 Java EE 应用程序需要付出更多努力。 

为 Oracle Application Server 开发的应用程序经常使用 Oracle Identity Management 套件。迁移至开源应用程序服务器的客户通常会选择使用基于 SAML 的联合身份验证来重新实现身份和访问管理。其他人则使用 Oracle HTTP Server Webgate 来处理无法从 Oracle 身份管理套件迁移情况。 

Java 和 Java EE Web 应用程序非常适合部署至基于 Docker 的 Amazon Web Services 上，例如 AWS Fargate 和 Amazon ECS。客户经常选择预装最新版本的目标应用程序服务器（例如 TomEE）和 Java 开发工具包（JDK）的 Docker 映像。他们将应用程序安装在基础 Docker 映像之上，将其发布到 Amazon Elastic Container Registry (Amazon ECR) 注册表中，并使用它在 AWS Fargate 或 Amazon ECS 上进行应用程序的可扩展部署。 

理想情况下，应用程序部署是有弹性的；也就是说，应用程序实例的数量根据流量或工作负载而缩小或缩小。这意味着应用程序实例需要上线或终止按根据需求调整容量。 

将 Java 应用程序迁移至 AWS 时，请考虑将其设置为无状态。这是 AWS Well-Architected Framework 的一项关键架构原则，将使用容器化实现水平扩缩。例如，多数基于 Java 的 Web 应用程序在本地存储用户会话信息。为了避免由于亚马逊弹性计算云 (Amazon EC2) 中的自动扩展或其他原因而导致应用程序实例终止，应在全球范围内存储用户会话信息，以便 Web 应用程序用户无需重新连接或重新登录网络应用程序即可继续无缝透明地工作。这种方法有多种架构选项，包括 Amazon ElastiCache for Redis，或者将会话状态存储在全局数据库中。TomEE 等应用程序服务器具有插件，可以通过 Redis、数据库和其他全局数据存储实现会话存储和管理。

使用可轻松与 Amazon 和 AWS X-Ray 集成的通用集中式日志 CloudWatch 和调试工具。迁移提供了改进应用程序生命周期功能的机会。例如，您可能希望自动化构建过程，以便使用持续集成和持续交付 (CI/CD) 管道轻松进行更改。这可能需要对应用程序进行更改，以便可以在不停机的情况下部署。 

## 先决条件和限制
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-prerequisites-and-limitations"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account 
+ 源代码 Java 代码和 JDK 
+ 使用 Oracle 构建的源应用程序 WebLogic
+ 为身份和访问管理定义的解决方案（SAML 或 Oracle Webgate）
+ 为应用程序会话管理定义的解决方案（移动 like-for-like或与 Amazon 一起移动 ElastiCache，或者根据需要使应用程序处于无状态状态）
+ 了解团队是否需要重构特定于 J2EE 的库才能移植到 Apache ToMee（参见 Apache 网站上的 [Java EE 7 实施状态](http://tomee.apache.org/javaee7-status.html)） 
+ 根据安全要求强化 ToMee 镜像
+ 带有预装目标 ToMee 容器镜像 
+ 同意并在需要时实施应用程序补救措施（例如，记录调试版本、身份验证）

**产品版本**
+ Oracle WebLogic OC4 J、9i、10g 
+ Tomcat 7（使用 Java 1.6 或更高版本） 

## 架构
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-architecture"></a>

 **源技术堆栈**
+ 使用 Oracle 构建的 Web 应用程序 WebLogic
+ 使用 Oracle Webgate 或 SAML 身份验证 Web 应用程序
+ 连接到 Oracle 数据库 10g 及以上版本的 Web 应用程序 

**目标技术堆栈**
+ 在Amazon ECS 上运行的 ToMee（增加了容器支持的 Apache Tomcat）（另请参阅[部署 Java Web 应用程序](https://aws.amazon.com/answers/web-applications/aws-web-app-deployment-java/) 和 [Java Microservices on Amazon ECS](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/)） 
+ 适用于 Oracle 的 Amazon Relational Database Service (Amazon RDS)； 有关 Amazon RDS 支持的 Oracle 版本，请参阅 [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/)** **

**目标架构**

![\[AWS 云 architecture diagram showing VPC, application subnets, and shared services account components.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d5e7b3fa-062f-4559-af56-aa6058f96755/images/762193cf-aa68-4195-b3c7-6541caee61c9.png)


 

## 工具
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-tools"></a>

若要在 ToMee 上运行，必须将 Java 应用程序重新构建为.war 文件。在某些情况下，可能需要更改应用程序才能在 TomEE 上运行应用程序；您应该检查以确保正确定义了必要的配置选项和环境属性。  

此外，还应正确定义 Java 命名和目录接口 (JNDI) 查找和 JavaServer 页面 (JSP) 命名空间。 考虑检查应用程序使用的文件名，以避免与内置 T 库发生命名冲突。例如，persistence.xml 是 Apache OpenJPA 框架（在 ToMee 中与 OpenEJB 捆绑在一起）用于配置目的的文件名。PUI 中的 persistence.xml 文件包含 Spring 框架 bean 声明。  

Tomee 版本 7.0.3 及更高版本（Tomcat 8.5.7 及更高版本）针对带有特殊字符的原始（未编码）返回 HTTP 400 响应（错误请求）。 URLs 服务器响应对最终用户显示为空白页。[Tomee 和 Tomcat 的早期版本允许在中使用某些未编码的特殊字符 URLs；但是，正如 CVE-2016-6816 网站上所述，它被认为是不安全的。](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6816)要解决网址编码问题， JavaScript 必须使用 **encodeURI () 方法对直接 URLs 传递给浏览器的内容进行编**码，而不是用作原始字符串。

在 Tomee 中部署.war 文件后，在 *Linux cat*监视任何缺失的共享库的*启动日志*，并监视特定于 Oracle 的扩展，以添加 Tomcat 库中缺少的组件。 

 

**一般过程**
+ 在 ToMee 配置应用程序。
+ 识别并重新配置应用程序服务器特定的配置文件和资源，从源格式转换为目标格式。
+ 识别和重新配置 JNDI 资源。
+ 将 EJB 命名空间和查询调整为目标应用程序服务器所需格式（如适用）。
+ 重新配置 JAAS 应用程序容器特定的安全角色和主映射（如适用）。
+ 将应用程序和共享库打包至 WAR 文件。
+ 使用提供的 Docker 容器在 ToMee 部署.war 文件。
+ 监控*启动日志*，找出任何缺少的共享库和部署描述符扩展。如果找到任何任务，请返回第一项任务。
+ 针对还原的 Amazon RDS 数据库测试已安装的应用程序。
+ 按照[部署 Docker 容器](https://aws.amazon.com/getting-started/tutorials/deploy-docker-containers/)中的说明启动带有负载均衡器和 Amazon ECS 集群的完整架构。
+ 更新为指 URLs 向负载均衡器。
+ 配置管理数据库 (CMDB) 

## 操作说明
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 执行应用程序发现（当前状态占用空间和性能基准）。 |  | BA，迁移主管 | 
| 验证源和目标数据库的版本。 |  | 数据库管理员 | 
| 验证源应用程序和目标应用程序的设计（身份和会话管理）。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 确定目标服务器实例的硬件要求。 |  | 数据库管理员， SysAdmin | 
| 根据容量、存储功能和网络功能选择正确的实例类型。 |  | 数据库管理员， SysAdmin | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员， SysAdmin | 
| 确定应用程序迁移/切换策略。 |  | 数据库管理员，迁移主管 | 
| 完成应用程序迁移设计与迁移指南。 |  | 构建主管，迁移主管 | 
| 完成应用程序迁移运行手册。 |  | 构建主管，割接主管，测试主管，迁移主管 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 |  | SysAdmin | 
| 创建安全组。 |  | SysAdmin | 
| 配置和启动 Amazon RDS 数据库实例。 |  | 数据库管理员， SysAdmin | 
| 配置 Amazon ECS 部署。 |  | SysAdmin | 
| 将应用程序打包为 Docker 映像。 |  | SysAdmin | 
| 将镜像推送到 Amazon ECR 注册表（或者跳过此步骤并将其推送到 Amazon ECS 集群）。 |  | SysAdmin | 
| 配置应用程序和 Amazon ECS 服务选项的任务定义。 |  | SysAdmin | 
| 配置集群，查看安全设置，设置 AWS Identity and Access Management (IAM) 角色。 |  | SysAdmin | 
| 根据应用程序迁移运行手册启动设置并运行测试。 |  | SysAdmin | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获得安全保障团队的许可，将生产数据转移至 AWS。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 创建或获取对端点访问权限，以获取数据库备份文件。 |  | 数据库管理员 | 
| 使用原生 Microsoft SQL Server 工具或第三方工具迁移数据库对象和数据。 |  | 数据库管理员 | 
| 从应用程序迁移运行手册中运行必要的测试，以确认数据迁移成功。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 提交变更申请 (CR) 以进行迁移。 |  | 割接主管 | 
| 获得 CR 批准，以进行迁移。 |  | 割接主管 | 
| 遵循应用程序迁移运行手册的应用程序迁移策略。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 升级应用程序（如需要）。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 完成功能测试、非功能测试、数据验证、SLA 与性能测试。 |  | 测试负责人、应用程序所有者、应用程序用户 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获得应用程序所有者或企业主的签名。 |  | 割接主管 | 
| 运行表格主题练习，演练割接运行手册的所有步骤。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 将应用程序客户端切换至新基础设施。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | DBA，迁移工程师， SysAdmin | 
| 审核和验证项目文档。 |  | 迁移主管 | 
| 收集与迁移时间、工具成本节约等相关的指标。 |  | 迁移主管 | 
| 关闭项目并提供反馈。 |  | 迁移主管，应用程序所有者 | 

## 相关资源
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-related-resources"></a>

**参考**
+ [Apache Tomcat 7.0 文档](https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html) 
+ [Apache Tomcat 7.0 安装指南](https://tomcat.apache.org/tomcat-7.0-doc/appdev/installation.html) 
+ [Apache Tomcat JNDI 文档](https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html) 
+ [Apache ToMee 文档](http://tomee.apache.org/) 
+ [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/) 
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/) 
+ [Oracle 和 AWS](https://aws.amazon.com/oracle/) 
+ [Oracle on Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS Multi-AZ 部署](https://aws.amazon.com/rds/details/multi-az/) 
+ [Amazon ECS 入门](https://aws.amazon.com/ecs/getting-started/)
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/) 

**教程和视频**
+ [在 Amazon RDS 上运行 Oracle 数据库的最佳实践](https://www.youtube.com/watch?v=j2wqT0EPDbw) 

# 使用 AWS DMS 将 Oracle 数据库从亚马逊迁移 EC2 到 Amazon RDS for Oracle
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms"></a>

*Chethan Gangadharaiah 和 Brian motzer，Amazon Web Services*

## Summary
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-summary"></a>

此模式描述了使用 AWS 数据库迁移服务 (AWS DMS) 将亚马逊弹性计算云 (Amazon EC2) 上的 Oracle 数据库迁移到适用于 Oracle 的亚马逊关系数据库服务 (Amazon RDS) 的步骤。该模式还使用 Oracle SQL Developer 或 SQL \$1Plus 连接到您的 Oracle 数据库实例，并包括一个可自动执行某些任务的 AWS CloudFormation 模板。

迁移至 Amazon RDS for Oracle 让您专注于业务和应用程序，而 Amazon RDS 则负责数据库管理任务，例如预置数据库、备份和恢复、安全补丁、版本升级和存储管理。

## 先决条件和限制
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-prerequisites-and-limitations"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 亚马逊 Oracle 数据库的亚马逊系统映像 (AMI) EC2

**产品版本**
+ AWS DMS 支持适用于 Amazon RDS 实例数据库的 Oracle 版本 11g（版本 11.2.0.3.v1 和更高版本）、12c 和 18c，包括 Enterprise、Standard、Standard One 和 Standard Two 版本。有关支持的版本的最新信息，请参阅 AWS 文档中的[使用 Oracle 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html)。（随附的 AWS CloudFormation 模板使用 Oracle 版本 12c 作为源数据库。）
+ Oracle SQL Developer 4.0.3

## 架构
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-architecture"></a>

**源架构**
+ 亚马逊上的 Oracle 数据库 EC2

**目标架构**
+ Amazon RDS for Oracle

**迁移架构**

![\[AWS 云 architecture showing Oracle database migration from EC2 to RDS across availability zones.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4db0c731-0897-4eb8-a06f-b648c3d94b2c/images/636c2a69-5a78-482d-ae81-55e9ec975ead.png)


## 工具
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/index.html) – AWS Database Migration Service (AWS DMS) 可帮助您快速安全地将数据库迁移到 AWS。其支持同构与异构迁移。有关支持的 Oracle 数据库版本和版本的信息，请参阅 AWS 文档中的[使用 Oracle 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)和[使用 Oracle 数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html)。
+ **Oracle SQL Developer 或 SQL \$1Plus** – 此类工具允许您连接至 Amazon RDS for Oracle 数据库实例。

## 操作说明
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-epics"></a>

### 设置目标数据库
<a name="set-up-your-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon RDS for Oracle 数据库实例。 | 登录 AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台 https://console.aws.amazon.com/rds/。为 Oracle 数据库选择相应的引擎、模板、数据库凭证设置、实例类型、存储、多可用区设置、虚拟私有云（VPC）和配置、登录凭证以及其他设置创建 Oracle 数据库实例。有关说明，请查看 “相关资源” 部分的链接。或者使用附件中的 AWS CloudFormation 模板 (create\$1rds.yaml) 创建 Amazon RDS for Oracle 数据库实例。 | 开发者版 | 
| 连接 Amazon RDS 并向 Oracle 用户授予特权。 | 修改安全组以打开相应端口，以便从本地计算机和 AWS DMS 复制实例连接。配置连接时，请确保选择 “可公开访问” 选项，这样您就可以从 VPC 外部连接至数据库。使用登录凭证通过 Oracle SQL Developer 或 SQL \$1Plus 连接至 Amazon RDS，创建 AWS DMS 用户，并为 AWS DMS 用户提供修改数据库所需权限。 | 开发者版 | 

### 配置源 EC2 实例的安全组
<a name="configure-the-security-group-of-the-source-ec2-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 检查 Oracle 数据库是否已启动并正在运行。 | 使用安全外壳 (SSH) 连接到 EC2 实例，然后尝试使用 SQL \$1Plus 连接到 Oracle 数据库。 | 开发者版 | 
| 修改安全组。 | 修改 EC2 实例的安全组以打开相应的端口，这样您就可以从本地计算机和 AWS DMS 复制实例进行连接。 | 开发者版 | 

### 设置 AWS DMS
<a name="set-up-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS DMS 复制实例。 | 在 AWS DMS 中，在与 Amazon RDS for Oracle 数据库实例相同的 VPC 中创建复制实例。指定复制实例的名称和描述，选择实例类别和复制引擎版本（使用默认值），选择您在其中创建 Amazon RDS 数据库实例的 VPC，根据需要设置多可用区设置，分配存储，指定可用区，并配置其他设置。或者，您可以使用附件中的 AWS CloudFormation 模板 (dms.yaml) 来实现此步骤。 | 数据库管理员 | 
| 连接至源数据库端点和目标数据库端点。 | 经指定端点标识符、引擎、服务器、端口、登录凭证和其他连接属性创建源数据库端点和目标数据库端点。对于源服务器，请使用托管 Oracle 数据库的 EC2 实例的公有 DNS。对于目标服务器，请使用 Amazon RDS for Oracle 端点。运行测试，以验证源连接和目标连接是否正常工作。或者，您可以使用附件中的 AWS CloudFormation 模板 (dms.yaml) 来实现此步骤。 | 数据库管理员 | 
| 创建 AWS DMS 任务。 | 创建 AWS DMS 任务，以将数据从源端点迁移至目标端点，在源端点和目标端点之间设置复制，或同时执行两种操作。创建 AWS DMS 任务时，请指定复制实例、源端点、目标端点、迁移类型（仅数据、仅复制或二者兼而有之）、表映射和筛选条件。在 Amazon CloudWatch 中运行 AWS DMS 任务，监控任务，检查表格统计数据并查看日志。或者，您可以使用附件中的 AWS CloudFormation 模板 (dms.yaml) 来实现此步骤。 | 数据库管理员 | 

## 相关资源
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-related-resources"></a>
+ [创建 Amazon RDS 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateOracleInstance.html)
+ [与运行 Oracle 数据库引擎的数据库实例连接](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToOracleInstance.html)
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS DMS 演练 Step-by-Step](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)
+ [将 Oracle 数据库迁移至 AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)

## 附件
<a name="attachments-4db0c731-0897-4eb8-a06f-b648c3d94b2c"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/4db0c731-0897-4eb8-a06f-b648c3d94b2c/attachments/attachment.zip)

# 使用 Logstash 将本地 Oracle 数据库迁移到亚马逊 OpenSearch 服务
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash"></a>

*Aditya Goteti，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-summary"></a>

此模式描述了如何使用 Logstash 将数据从本地 Oracle 数据库移动到亚马逊 OpenSearch 服务。它包括架构注意事项以及一些所需技能集和建议。数据可以来自单个表，也可以来自需要执行全文搜索的多个表。 

OpenSearch 服务可以在虚拟私有云 (VPC) 中配置，也可以在基于 IP 的限制下公开。此模式描述了在 VPC 中配置 OpenSearch 服务的场景。Logstash 用于从 Oracle 数据库收集数据，将其解析为 JSON 格式，然后将数据馈送到服务中。 OpenSearch  

## 先决条件和限制
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ Java 8（Logstash 6.4.3 要求）
+ 本地数据库服务器与 VPC 中的亚马逊弹性计算云 (AWS EC2) 实例之间的连接，使用 AWS 虚拟专用网络 (AWS VPN) 建立
+ 用于检索要从数据库推送到 Ser OpenSearch vice 的所需数据的查询
+ Oracle Java 数据库连接JDBC 驱动程序

**限制**
+ Logstash 无法识别从数据库硬删除的记录 

**产品版本**
+ Oracle Database 12c
+ OpenSearch 服务 6.3
+ Logstash 6.4.3

## 架构
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-architecture"></a>

**源技术堆栈**
+ 本地 Oracle 数据库
+ 本地 AWS VPN

**目标技术堆栈**
+ VPC
+ EC2 实例
+ OpenSearch 服务 
+ Logstash
+ NAT 网关（用于 EC2 实例上的操作系统更新以及安装 Java 8、Logstash 和插件）

**数据迁移架构**

![\[如何使用 Logstash 将数据从本地 Oracle 数据库移动到亚马逊 OpenSearch 服务。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/09f6d2de-de2f-4ed6-af93-34b71b75a263/images/df6a61fb-09fb-49d4-a7e8-b04e88c003df.png)


## 工具
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-tools"></a>
+ Logstash 6.4.3
+ JDBC 输入插件（[下载及更多信息](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)）
+ [Logstash 输出插件 (\$1es) logstash-output-amazon](https://github.com/awslabs/logstash-output-amazon_es)
+ Oracle JDBC 驱动程序

## 操作说明
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定源数据的大小。 | 源数据的大小是用于确定要在索引中配置的分片数量的参数之一。 | 数据库管理员，数据库开发人员 | 
| 分析每一列的数据类型以及对应的数据。 | OpenSearch 当在文档中发现以前看不见的字段时，服务会动态映射数据类型。如果需要显式声明任何特定的数据类型或格式（例如日期字段），请在创建索引时标识这些字段并定义这些字段的映射。 | 应用程序所有者、开发人员、数据库开发人员 | 
| 确定是否有任何具有主键或唯一键的列。 | 为了避免在更新或插入期间在 Amazon S OpenSearch ervice 中重复记录，您需要在`amazon_es`插件的输出部分配置`document_id`设置（例如，主键`document_id => "%{customer_id}"`在`customer_id`哪里）。 | 应用程序所有者、开发人员 | 
| 分析添加新记录的数量和频率；检查记录删除频率。 | 需要执行此任务来了解源数据的增长率。如果数据读取密集且插入很少，则可以使用单个索引。如果频繁插入新记录并且没有删除，则分片大小很容易超过建议的最大大小 50 GB。在这种情况下，您可通过在 Logstash 中配置索引模式以及在可以使用别名访问它的代码中动态创建索引。 | 应用程序所有者、开发人员 | 
| 确定所需副本数量 |  | 应用程序所有者、开发人员 | 
| 确定在索引上配置的分片数量。 |  | 应用程序所有者、开发人员 | 
| 确定专用主节点、数据节点和 EC2 实例的实例类型。 | 有关更多信息，请参阅[相关资源](#migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources)部分。 | 应用程序所有者、开发人员 | 
| 确定所需专用主节点和数据节点的数量。 | 有关更多信息，请参阅[相关资源](#migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources)部分。 |  | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动实 EC2 例。 | 在 AWS VPN 所连接的 VPC 内启动一个 EC2 实例。 | Amazon VPC 结构，AWS VPN | 
| 在实例上安装 Logstash。 EC2  |  | 开发者版 | 
| 安装 Logstash 插件。 | 安装所需 Logstash 插件 `jdbc-input` 和 ` logstash-output-amazon_es`。 | 开发者版 | 
| 配置 Logstash。 | 创建 Logstash 密钥库以存储 AWS Secrets Manager 密钥和数据库凭证等敏感信息，然后将引用放置在 Logstash 配置文件中。 | 开发者版 | 
| 配置死信队列与永久队列。 | 默认情况下，当 Logstash 遇到由于数据包含映射错误或其他问题而无法处理的事件时，Logstash 管道会挂起或删除不成功的事件。为了防止这种情况下的数据丢失，您可将 Logstash 配置为将不成功的事件写入死信队列而不是丢弃它们。为了防止异常终止期间的数据丢失，Logstash 具有持久队列功能，可将消息队列存储在磁盘上。持久队列提供 Logstash 中的数据持久性。 | 开发者版 | 
| 创建亚马逊 OpenSearch 服务域名。 | 使用不要求使用 AWS 身份和访问管理 (IAM) 凭证签署请求的访问策略创建亚马逊 OpenSearch 服务域。亚马逊 OpenSearch 服务域必须在同一 VPC 内创建。您还应该根据您的分析选择实例类型并设置专用节点和主节点的数量。 | 开发者版 | 
| 配置所需的亚马逊 OpenSearch 服务日志。 | 有关更多信息，请参阅[OpenSearch 服务文档](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/cloudwatch-alarms.html)。 |  | 
| 创建索引。 |  | 开发者版 | 
| 开启 Logstash。 | 将 Logstash 以后台服务运行。Logstash 运行配置的 SQL 查询，提取数据，将其转换为 JSON 格式，然后将其提供给服务。 OpenSearch 对于初始加载，不要在 Logstash 配置文件中配置调度程序。 | 开发者版 | 
| 检查文档。 | 检查索引上的文档数量以及所有文档是否都存在于源数据库中。初始加载期间，它们会被添加至索引中并用于停止 Logstash。更改 Logstash 配置。以添加根据客户端要求固定间隔运行的调度程序，然后重新启动 Logstash。Logstash 将仅选择上次运行后更新或添加的记录，上次运行时间戳存储在 Logstash 配置文件中使用 `last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run"` 属性配置的文件中。 | 开发者版 | 

## 相关资源
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources"></a>
+ [推荐 CloudWatch 警报](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/cloudwatch-alarms.html) 
+ [专用 Amazon OpenSearch 服务主节点](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains-dedicatedmasternodes.html) 
+ [调整亚马逊 OpenSearch 服务域名的大小](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/sizing-domains.html) 
+ [Logstash 文档](https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html) 
+ [JDBC 输入插件](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)
+ [Logstash 输出插件](https://github.com/awslabs/logstash-output-amazon_es)
+ [亚马逊 OpenSearch 服务网站](https://aws.amazon.com/elasticsearch-service/) 

# 将本地 Oracle 数据库迁移到 Amazon RDS for Oracle
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle"></a>

*Baji Shaik 和 Pavan Pusuluri，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-summary"></a>

此模式描述将本地 Oracle 数据库迁移到 Amazon Relational Database Service（Amazon RDS）for Oracle 的步骤。作为迁移过程的一部分，您需要制定迁移计划，并根据源数据库考虑有关目标数据库基础设施的重要因素。您可以根据业务需求和用例从两个迁移选项中选择一个：
+ AWS Database Migration Service（AWS DMS）– 您可以使用 AWS DMS 快速安全地将数据库迁移到 Amazon Web Services Cloud。源数据库可在迁移过程中保持全面运行，从而最大程度地为依赖该数据库的应用程序缩短停机时间。您可以使用 AWS DMS 创建一个任务，在您完成初始全负载迁移后，通过名为[更改数据捕获（CDC）](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html)的过程捕获正在进行的更改，从而缩短迁移时间。
+ Oracle 原生工具 — 您可以使用原生 Oracle 工具迁移数据库，例如 Oracle 和 CDC 版 Or [acle GoldenGate](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/introduction-oracle-goldengate.htm#GGCON-GUID-EF513E68-4237-4CB3-98B3-2E203A68CBD4) [的数据泵导](https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL300)[出](https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm#SUTIL200)和数据泵导入。您也可以使用原始[导出实用程序](https://docs.oracle.com/cd/E11882_01/server.112/e22490/original_export.htm#SUTIL3634)和原始[导入实用程序](https://docs.oracle.com/cd/E11882_01/server.112/e22490/original_import.htm#SUTIL001)等 Oracle 本机工具来缩短全负载时间。

## 先决条件和限制
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地 Oracle 数据库
+ Amazon RDS Oracle 数据库（DB）实例

**限制**
+ 数据库大小限制：64 TB

**产品版本**
+ Oracle 版本 11g（版本 11.2.0.3.v1 及更高版本）以及最高 12.2 和 18c。有关当前支持的版本和版本列表，请参阅 AWS 文档中的 [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)。有关 AWS DMS 支持的 Oracle 版本，请参阅 AWS DMS 文档中的[使用 Oracle 数据库作为 AWS DMS 的源数据库](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)。

## 架构
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-architecture"></a>

**源技术堆栈**
+ 本地 Oracle 数据库

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

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

下图显示了如何使用 AWS DMS 将本地 Oracle 数据库迁移到 Amazon RDS for Oracle。

![\[使用 AWS DMS 将 Oracle 数据库迁移到 Amazon RDS for Oracle 的工作流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/25912997-0ac0-4303-9ce5-0621a7e12406/images/20f94a5c-1095-4182-b964-c379414c9a36.png)


下图显示了如下工作流：

1. 创建或使用现有数据库用户，向该用户授予所需 [AWS DMS 权限](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Self-Managed)，打开 [ARCHIVELOG 模式](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode)，然后设置[补充日志](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging)。

1. 在本地和 AWS 网络之间配置互联网网关。

1. 为 AWS DMS 配置[源端点和目标端点](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)。

1. 配置 [AWS DMS 复制任务](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)，将数据从源数据库迁移到目标数据库。

1. 在目标数据库上完成迁移后活动。

下图显示了如何使用 Oracle 本机工具将本地 Oracle 数据库迁移到 Amazon RDS for Oracle。

![\[使用 Oracle 工具将 Oracle 数据库迁移到 Amazon RDS for Oracle 的工作流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/25912997-0ac0-4303-9ce5-0621a7e12406/images/af8e0e1a-d4c8-4d99-9780-3e093ad9a257.png)


下图显示了如下工作流：

1. 使用 Oracle 导出（`exp`）和导入（`imp`）实用程序创建或使用现有数据库用户并授予备份 Oracle 数据库所需权限。

1. 在本地和 AWS 网络之间配置互联网网关。

1. 在[堡垒](https://www.oracle.com/security/cloud-security/bastion/)主机上配置 Oracle 客户端以获取备份数据库。

1. 将备份数据库上传到 Amazon Simple Storage Service（Amazon S3）存储桶。

1. 将数据库备份从 Amazon S3 恢复到 Amazon RDS for Oracle 数据库。

1. 为 CDC 配置 GoldenGate Oracle。

1. 在目标数据库上完成迁移后活动。

## 工具
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地设置的组合之间迁移。
+ 原生 Oracle 工具可帮助您执行同质迁移。您可以使用 [Oracle 数据泵](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm)在源数据库和目标数据库之间迁移数据。此模式使用 Oracle 数据泵执行从源数据库到目标数据库的完全加载。
+ [Oracle GoldenGate](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/introduction-oracle-goldengate.htm#GGCON-GUID-EF513E68-4237-4CB3-98B3-2E203A68CBD4) 可帮助您在两个或多个数据库之间执行逻辑复制。此模式 GoldenGate 用于在初始加载后使用 Oracle 数据泵复制增量更改。

## 操作说明
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建项目文档并记录数据库详细信息。 | [\[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-rds-for-oracle.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-rds-for-oracle.html)对于[通用型（gp2）固态硬盘卷](https://aws.amazon.com/ebs/volume-types/)，每 1 GB 存储空间可获得三个 IOPS。通过计算源数据库的读取和写入 IOPS 总数来分配存储空间。 | 数据库管理员， SysAdmin | 
| 根据计算要求选择正确的实例类型。 | [\[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-rds-for-oracle.html) | SysAdmin | 
| 识别网络访问安全要求。 | [\[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-rds-for-oracle.html) | 数据库管理员， SysAdmin | 
| 确定应用程序迁移策略。 | [\[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-rds-for-oracle.html) | DBA、 SysAdmin、应用程序所有者 | 
| 识别迁移风险。 | 评测数据库并记录特定于迁移的风险和缓解措施。例如：[\[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-rds-for-oracle.html) | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 VPC。 | 为目标数据库实例[创建新的 Amazon Virtual Private Cloud（Amazon VPC）](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/gsg_create_vpc.html)。 | SysAdmin | 
| 创建安全组。 | 在新 VPC 中[创建安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#creating-security-group)以允许数据库实例的入站连接。 | SysAdmin | 
| 创建 Amazon RDS for Oracle 数据库实例。 | 使用新的 VPC 和安全组[创建目标数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)，然后启动该实例。 | SysAdmin | 

### （选项 1）- 使用原生 Oracle 或第三方工具迁移数据
<a name="option-1---use-native-oracle-or-third-party-tools-to-migrate-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备源数据库。 | [\[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-rds-for-oracle.html) | 数据库管理员， SysAdmin | 
| 准备目标数据库。 | [\[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-rds-for-oracle.html) | 数据库管理员， SysAdmin | 

### （选项 2）- 使用 AWS DMS 迁移数据
<a name="option-2---use-aws-dms-to-migrate-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备数据。 | [\[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-rds-for-oracle.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-rds-for-oracle.html) | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 | [\[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-rds-for-oracle.html) | DBA、 SysAdmin、应用程序所有者 | 
| 实施您的回滚计划。 | [\[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-rds-for-oracle.html) | 数据库管理员、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 清理资源。 | 关闭或移除 AWS 临时资源，例如 AWS DMS 复制实例和 S3 存储桶。 | 数据库管理员， SysAdmin | 
| 查看项目文档。 | 查看迁移计划文档和目标，然后确认您已完成所有必需的迁移步骤。 | DBA、 SysAdmin、应用程序所有者 | 
| 收集指标。 | 记录关键迁移指标，包括完成迁移所需时间、手动任务与基于工具的任务的百分比、成本节省以及其他相关指标。 | DBA、 SysAdmin、应用程序所有者 | 
| 关闭项目。 | 结束迁移项目并收集有关迁移工作的反馈。 | DBA、 SysAdmin、应用程序所有者 | 

## 相关资源
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-resources"></a>

**参考**
+ [将 Oracle 数据库迁移至 AWS 云](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)（AWS 规范指引）
+ [AWS Database Migration Service（AWS DMS）](https://aws.amazon.com/dms/)（AWS DMS 文档）
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)（Amazon RDS 文档）

**教程和视频**
+ [AWS Database Migration Service 入门](https://aws.amazon.com/dms/getting-started/)（AWS DMS 文档）
+ [Amazon RDS 资源](https://aws.amazon.com/rds/getting-started/)（Amazon RDS 文档）
+ [AWS Database Migration Service (DMS) (YouTube)](https://www.youtube.com/watch?v=zb4GcjEdl8U)

# 使用 Oracle 数据泵将本地 Oracle 数据库迁移到 Amazon RDS for Oracle
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump"></a>

*Mohan Annam 和 Brian motzer，Amazon Web Services*

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

此模式描述了如何使用 Oracle 数据泵将 Oracle 数据库从本地数据中心迁移到 Amazon Relational Database Service（Amazon RDS）for Oracle 数据库实例。 

该模式包括从源数据库创建数据转储文件，将文件存储在 Amazon Simple Storage Service（Amazon S3）存储桶中，然后将数据恢复到 Amazon RDS for Oracle 数据库实例中。当您使用 AWS Database Migration Service（AWS DMS）进行迁移遇到限制时，此模式非常有用。

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

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 在 AWS Identity and Access Management (IAM) 中创建角色以及 Amazon S3 分段上传所需权限
+ 从源数据库导出数据所需权限
+ AWS 命令行界面（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)

**产品版本**
+ Oracle 数据泵仅适用于 Oracle 数据库 10g 发行版 1 (10.1) 及更高版本。

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

**源技术堆栈**
+ 本地 Oracle 数据库

**目标技术堆栈**
+ Amazon RDS for Oracle
+ SQL 客户端（Oracle SQL 开发人员）
+ 一个 S3 存储桶

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

![\[使用 Oracle Data Pump 将 Amazon S3 数据分段从本地 Oracle 数据库上传到 Amazon RDS。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d8d6e00f-753e-4ecc-80e5-e60e279a699b/images/1bb6095a-0a95-4469-be0e-7b7bd59b35ae.png)


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

**Amazon Web Services**
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。在这种模式中，IAM 用于创建将数据从 Amazon S3 迁移到 Amazon RDS for Oracle 所需角色和策略。
+ [Amazon Relational Database Service (Amazon RDS) for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩缩 Oracle 关系数据库。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**其他工具**
+ [Oracle 数据泵](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm)可帮助您将数据和元数据从一个数据库高速移动至另一个数据库。在这种模式中，Oracle 数据泵用于将数据转储 (.dmp) 文件导出到 Oracle 服务器，然后将其导入到 Amazon RDS for Oracle 中。有关更多信息，请参阅 Amazon RDS 文档中的[将数据导入到 Amazon RDS 上的 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html#Oracle.Procedural.Importing.DataPump.S3)。
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) 是一个集成的开发环境，可简化传统部署和基于云的部署中 Oracle 数据库的开发和管理。它与本地 Oracle 数据库和 Amazon RDS for Oracle 交互，运行导出和导入数据所需 SQL 命令。

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

### 创建 S3 存储桶
<a name="create-an-s3-bucket"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建存储桶。 | 要创建 S3 存储桶，请按照 [AWS 文档](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)中的说明进行操作。 | AWS 系统管理员 | 

### 创建 IAM 角色并分配策略
<a name="create-the-iam-role-and-assign-policies"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 IAM 权限。 | 要配置权限，请按照 [AWS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing)中的说明进行操作。 | AWS 系统管理员 | 

### 创建 Amazon RDS for Oracle 目标数据库实例并关联 Amazon S3 集成角色
<a name="create-the-target-amazon-rds-for-oracle-db-instance-and-associate-the-amazon-s3-integration-role"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon RDS for Oracle 目标数据库实例。 | 要创建 Amazon RDS for Oracle 实例，请按照 [AWS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)中的说明进行操作。 | AWS 系统管理员 | 
| 将该角色与数据库实例关联。 | 要将角色与实例关联，请按照 [AWS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing.instance)中的说明进行操作。 | 数据库管理员 | 

### 在目标数据库上创建数据库用户
<a name="create-the-database-user-on-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 用户。 | 连接来自 Oracle SQL Developer 或 SQL\$1Plus 的 Amazon RDS for Oracle 目标数据库，然后运行以下 SQL 命令来创建要将架构导入的用户。<pre>create user SAMPLE_SCHEMA identified by <PASSWORD>;<br />grant create session, resource to <USER NAME>;<br />alter user <USER NAME> quota 100M on users;</pre> | 数据库管理员 | 

### 从 Oracle 源数据库创建导出文件
<a name="create-the-export-file-from-the-source-oracle-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建数据转储文件。 | 要在 `DATA_PUMP_DIR` 目录中创建名为 `sample.dmp` 的转储文件（用于导出 `SAMPLE_SCHEMA` 用户），请使用以下脚本。<pre>DECLARE<br />    hdnl NUMBER;<br />BEGIN<br />    hdnl := dbms_datapump.open(operation => 'EXPORT', <br />                                job_mode => 'SCHEMA', <br />                                job_name => NULL);<br /><br />    dbms_datapump.add_file( handle => hdnl, <br />                            filename => 'sample.dmp', <br />                            directory => 'DATA_PUMP_DIR', <br />                            filetype => dbms_datapump.ku$_file_type_dump_file);<br /><br />    dbms_datapump.add_file(handle => hdnl, <br />                            filename => 'export.log', <br />                            directory => 'DATA_PUMP_DIR', <br />                            filetype => dbms_datapump.ku$_file_type_log_file);<br /><br />    dbms_datapump.metadata_filter(hdnl, 'SCHEMA_EXPR', 'IN (''SAMPLE_SCHEMA'')');  <br /><br />    dbms_datapump.start_job(hdnl);<br />END;<br />/</pre>通过查看本地 `DATA_PUMP_DIR` 目录中的 `export.log` 文件来查看导出详细信息。 | 数据库管理员 | 

### 将转储文件上传到 S3 存储桶中
<a name="upload-the-dump-file-to-the-s3-bucket"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将数据转储文件从源上传到 S3 存储桶。 | 使用 AWS CLI 运行以下命令。<pre>aws s3 cp sample.dmp s3://<bucket_created_epic_1>/</pre> | 数据库管理员 | 

### 将导出文件从 S3 存储桶下载到 RDS 实例
<a name="download-the-export-file-from-the-s3-bucket-to-the-rds-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将数据转储文件下载到 Amazon RDS | 要将转储文件 `sample.dmp` 从 S3 存储桶复制到 Amazon RDS for Oracle 数据库，请运行以下 SQL 命令。在此示例中，`sample.dmp` 文件从 S3 存储桶 `my-s3-integration1` 下载到 Oracle 目录 `DATA_PUMP_DIR`。确保分配给 RDS 实例的磁盘空间足以容纳数据库和导出文件。<pre>-- If you want to download all the files in the S3 bucket remove the p_s3_prefix line.<br /><br />SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(<br />      p_bucket_name    =>  'my-s3-integration',    <br />      p_s3_prefix => 'sample.dmp',<br />      p_directory_name =>  'DATA_PUMP_DIR') <br />   AS TASK_ID FROM DUAL;</pre>前述命令输出一个任务 ID。要通过查看任务 ID 中的数据来查看下载状态，请运行以下命令。<pre>SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-<task_id>.log'));<br /><br /></pre>要查看 `DATA_PUMP_DIR` 目录中的文件，请运行以下命令。<pre>SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp<br />FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;</pre> | AWS 系统管理员 | 

### 将转储文件导入到目标数据库中
<a name="import-the-dump-file-into-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将架构和数据恢复到 Amazon RDS。 | 要将转储文件导入 `sample_schema` 数据库架构，请从 SQL Developer 或 SQL\$1Plus 中运行以下 SQL 命令。<pre>DECLARE<br />hdnl NUMBER;<br />BEGIN<br /><br />hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null);<br /><br />DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'sample.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);<br /><br />DBMS_DATAPUMP.ADD_FILE( handle    => hdnl, filename  => 'import.log', directory => 'DATA_PUMP_DIR', filetype  => dbms_datapump.ku$_file_type_log_file);<br /><br />DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''SAMPLE_SCHEMA'')');<br /><br />DBMS_DATAPUMP.START_JOB(hdnl);<br /><br />END;<br />/</pre>要查看导入后的日志文件，请运行以下命令。<pre>SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR','import.log'));</pre> | 数据库管理员 | 

### 从 DATA\$1PUMP\$1DIR 目录中移除转储文件
<a name="remove-the-dump-file-from-the-data_pump_dir-directory"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 列出并清理导出文件。 | 列出并删除 `DATA_PUMP_DIR` 目录中的导出文件，运行以下命令。<pre>-- List the files<br />SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;</pre><pre>-- Remove the files<br />EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample.dmp');<br />EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','import.log');</pre> | AWS 系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-resources"></a>
+ [Amazon S3 集成](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing)
+ [创建数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateDBInstance.html)
+ [将数据导入到 Amazon RDS 上的 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html#Oracle.Procedural.Importing.DataPump.S3)
+ [Amazon S3 文档](https://docs.aws.amazon.com/s3/index.html)
+ [IAM 文档](https://docs.aws.amazon.com/iam/index.html)
+ [Amazon RDS 文档](https://docs.aws.amazon.com/rds/index.html)
+ [Oracle 数据泵文档](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html)
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/)

# 使用 pglogical 从 EC2 亚马逊上的 PostgreSQL 迁移到适用于 PostgreSQL 的亚马逊 RDS
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical"></a>

*Rajesh Madiwale，Amazon Web Services*

## Summary
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-summary"></a>

**此模式概述了使用 PostgreSQL pglogical 扩展将 PostgreSQL 数据库（版本 9.5 及更高版本）从亚马逊弹性计算云（ EC2亚马逊）迁移到适用于 PostgreSQL 的亚马逊关系数据库服务（亚马逊 RDS）的步骤。**Amazon RDS 现在支持 PostgreSQL 版本 10 的 pglogical 扩展。

## 先决条件和限制
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-prereqs"></a>

**先决条件**
+ 选择正确的 Amazon RDS 实例类型。有关更多信息，请参阅 [Amazon RDS 实例类型](https://aws.amazon.com/rds/instance-types/)。
+ 确保 PostgreSQL 的源版本与目标版本相同。  
+ 在亚马逊上安装 p [**glogical 扩展并将其与 P** ostgreSQL](https://github.com/2ndQuadrant/pglogical) 集成。 EC2

**产品版本**
+ Amazon RDS 上的 PostgreSQL 版本 10 及以上版本，Amazon RDS 支持这些功能（参见 AWS 文档中的[PostgreSQL on Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts)）。这种模式是通过在 Amazon RDS 上将 PostgreSQL 9.5 迁移至 PostgreSQL 版本 10 进行测试，但它也适用于最新版 PostgreSQL on Amazon RDS。

## 架构
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-architecture"></a>

**数据迁移架构**

![\[Amazon RDS 上 PostgreSQL 的数据迁移架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/29af3931-48de-499f-9c4b-e10a98e4bba5/images/5f5b906f-dc1a-49a5-ae3f-3e10ae854784.png)


## 工具
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-tools"></a>
+ [https://github.com/2ndQuadrant/pglogical](https://github.com/2ndQuadrant/pglogical) 扩展
+ PostgreSQL 原生实用程序：[https://www.postgresql.org/docs/9.5/app-pgdump.html](https://www.postgresql.org/docs/9.5/app-pgdump.html) 和 [https://www.postgresql.org/docs/9.6/app-pgrestore.html](https://www.postgresql.org/docs/9.6/app-pgrestore.html)

## 操作说明
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-epics"></a>

### 使用 pglogical 扩展迁移数据
<a name="migrate-data-by-using-the-pglogical-extension"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon RDS PostgreSQL 数据库实例。 | 在 Amazon RDS 中设置 PostgreSQL 数据库实例。有关说明，请参阅 [Amazon RDS for PostgreSQL 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html)。 | 数据库管理员 | 
| 从源 PostgreSQL 数据库获取架构转储并将其恢复至目标 PostgreSQL 数据库中。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.html) | 数据库管理员 | 
| 启用逻辑解码。 | 在 Amazon RDS 数据库参数组，将 `rds.logical_replication` 静态参数设置为 1。有关说明，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalDecoding)。 | 数据库管理员 | 
| 在源数据库和目标数据库创建 pglogical 扩展。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.html) | 数据库管理员 | 
| 在源 PostgreSQL 数据库上创建发布者。 | 若要创建发布者，请运行：<pre>psql -d dbname -p 5432 <<EOF<br />SELECT pglogical.create_node( node_name := 'provider1', dsn := 'host=<ec2-endpoint> port=5432 dbname=source-dbname user=source-dbuser' );<br />EOF</pre> | 数据库管理员 | 
| 创建复制集，添加表格和序列。 | 要在源 PostgreSQL 数据库上创建复制集并将表和序列添加到复制集，请运行：<pre>psql -d dbname -p 5432 <<EOF<br />SELECT pglogical.replication_set_add_all_tables('default', '{public}'::text[],synchronize_data := true);<br />EOF</pre> | 数据库管理员 | 
| 创建订阅用户。 | 若要对 PostgreSQL 数据库创建订阅用户，请运行：<pre>psql -h <rds-endpoint> -d target-dbname -U target-dbuser  <<EOF<br />SELECT pglogical.create_node(<br />    node_name := 'subscriber1',<br />    dsn := 'host=<rds-endpoint> port=5432 dbname=target-dbname password=postgres user=target-dbuser'<br />);<br />EOF</pre> | 数据库管理员 | 
| 创建订阅。 | 若要对 PostgreSQL 数据库创建订阅用户，请运行：<pre>psql -h <rds-endpoint> -d target -U postgres  <<EOF<br />SELECT pglogical.create_subscription(<br /> subscription_name := 'subscription1',<br /> replication_sets := array['default'],<br />    provider_dsn := 'host=<ec2-endpoint> port=5432 dbname=<source-dbname> password=<password> user=source-dbuser'<br />);</pre> | 数据库管理员 | 

### 验证数据
<a name="validate-your-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 检查源数据库和目标数据库。 | 检查源数据库和目标数据库，以确认数据迁移正在成功复制。您可以使用 `select count(1)` 对源表和目标表执行基本验证。 | 数据库管理员 | 

## 相关资源
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Amazon RDS 上 PostgreSQL 的逻辑复制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication)（Amazon RDS 文档）
+ [pglogical（存储](https://github.com/2ndQuadrant/pglogical)库）GitHub 
+ [pglogical（GitHub 存储库自述文件）的局限性](https://github.com/2ndQuadrant/pglogical#limitations-and-restrictions)
+ 使用逻辑@@ [复制将 PostgreSQL 从本地或亚马逊迁移 EC2 到 Amazon RDS](https://aws.amazon.com/blogs/database/migrating-postgresql-from-on-premises-or-amazon-ec2-to-amazon-rds-using-logical-replication/)（AWS 数据库博客）

# 将本地 PostgreSQL 数据库迁移到 Aurora PostgreSQL
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql"></a>

*Baji Shaik 和 Jitender Kumar，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-summary"></a>

Amazon Aurora PostgreSQL-Compatible Edition 将高端商业数据库的性能和可用性与开源数据库的简单性和成本效益结合在一起。Aurora 通过在同一 AWS 区域的三个可用区扩展存储来提供这些优势，并支持多达 15 个只读副本实例，用于横向扩展读取工作负载并在单个区域内提供高可用性。通过使用 Aurora 全局数据库，您最多可以在五个区域中复制 PostgreSQL 数据库，以便在区域出现故障时进行远程读取访问和灾难恢复。此模式描述了将本地 PostgreSQL 源数据库迁移到 Aurora PostgreSQL-Compatible 数据库的步骤。该模式包括两个迁移选项：使用 AWS 数据迁移服务（AWS DMS）或使用原生 PostgreSQL 工具（例如 [pg\$1dump](https://www.postgresql.org/docs/current/app-pgdump.html)、[pg\$1restore](https://www.postgresql.org/docs/current/app-pgrestore.html) 和 [psql](https://www.postgresql.org/docs/current/app-psql.html)）或第三方工具。 

此模式中描述的步骤也适用于亚马逊关系数据库服务 (Amazon RDS) 和亚马逊弹性计算云 (Amazon) 实例上的目标 PostgreSQL 数据库。 EC2

## 先决条件和限制
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心中的 PostgreSQL 源数据库
+ [Aurora PostgreSQL-Compatible 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)或 [Amazon RDS for PostgreSQL 数据库实例](https://aws.amazon.com/getting-started/hands-on/create-connect-postgresql-db/)

**限制**
+ Amazon RDS for PostgreSQL 的数据库大小限制为 64 TB，Aurora PostgreSQL-Compatible 的数据库大小限制为 128 TB。
+ 如果您使用的是 AWS DMS 迁移选项，请查看[使用 PostgreSQL 数据库作为源的 AWS DMS 限制](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Limitations)。

**产品版本**
+ 有关 Amazon RDS 对 PostgreSQL 主要版本和次要版本的支持，请参阅 Amazon RDS 文档中的 [Amazon RDS for PostgreSQL 更新](https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/postgresql-versions.html)。
+ 有关 Aurora 中 PostgreSQL 的支持，请参阅 Aurora 文档中的 [Amazon Aurora PostgreSQL 更新](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html)。
+ 如果您使用的是 AWS DMS 迁移选项，请参阅 AWS DMS 文档中[支持的 PostgreSQL 版本](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html)。

## 架构
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-architecture"></a>

**源技术堆栈**
+ 本地 PostgreSQL 数据库

**目标技术堆栈**
+ Aurora PostgreSQL-Compatible 数据库实例

**源架构**

![\[本地 PostgreSQL 数据库的源架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/82114165-8102-44a2-8b12-485ac9eb8989/images/a8621ad3-781b-45a9-86a8-d0b0ec5c79ea.png)


**目标架构**

![\[Amazon Aurora 上 PostgreSQL 数据库的目标架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/82114165-8102-44a2-8b12-485ac9eb8989/images/fc2ec0cb-7b9b-4cc0-b70c-40e47c2f4c45.png)


**数据迁移架构**

*使用 AWS DMS*

![\[使用 AWS DMS 将本地 PostgreSQL 数据库迁移到 Aurora\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/82114165-8102-44a2-8b12-485ac9eb8989/images/5336adb4-e9eb-47d0-a5b5-d149261b1638.png)


*使用原生 PostgreSQL 工具*

![\[使用 pg_dump 和 pg_restore 将本地 PostgreSQL 数据库迁移到 Aurora\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/82114165-8102-44a2-8b12-485ac9eb8989/images/3c6fb533-45ff-443e-bfb1-97e60cbdd583.png)


## 工具
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-tools"></a>
+ [AWS Database Migration Service（AWS DMS）](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)可帮助您将数据存储迁移到 Amazon Web Services Cloud，或者在云和本地配置的组合之间迁移。该服务支持不同的源数据库和目标数据库。有关如何验证 AWS DMS 支持的 PostgreSQL 源数据库和目标数据库版本和版本的信息，请参阅[使用 PostgreSQL 数据库作为 AWS DMS 源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html)。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。
+ PostgreSQL 原生工具包括 [pg\$1dump](https://www.postgresql.org/docs/current/app-pgdump.html)、[pg\$1restore](https://www.postgresql.org/docs/current/app-pgrestore.html) 和[psql](https://www.postgresql.org/docs/current/app-psql.html)。

## 操作说明
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-epics"></a>

### 分析迁移
<a name="analyze-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库的版本。 | 如果您使用的是 AWS DMS。请确保您使用的是 [PostgreSQL 的受支持版本](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html)。 | 数据库管理员 | 
| 确定存储类型和容量。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | 数据库管理员、系统管理员 | 
| 选择正确的实例类型、容量、存储功能和网络功能。 | 确定目标数据库实例的计算要求。查看可能需要额外注意的已知性能问题。要确定合适的实例类型，请考虑以下因素：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html)有关更多信息，请参阅 Amazon Aurora 用户指南中的 [Aurora 数据库实例类](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)。 | 数据库管理员、系统管理员 | 
| 确定源数据库和目标数据库的网络访问安全要求。 | 确定使应用程序能够与数据库通信的相应安全组。 | 数据库管理员、系统管理员 | 
| 确定应用程序迁移策略。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 VPC。 | 为目标数据库实例创建新的虚拟私有云（VPC）。 | 系统管理员 | 
| 创建安全组。 | 在 VPC 内创建安全组（如前一个操作说明中所述），以允许数据库实例的入站连接。 | 系统管理员 | 
| 配置并启动 Aurora 数据库集群。 | 使用新的 VPC 和安全组创建目标数据库实例并启动该实例。 | 系统管理员 | 

### 迁移数据 – 选项 1（使用 AWS DMS）
<a name="migrate-data-option-1-using-aws-dms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 完成迁移前步骤。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | 数据库管理员 | 
| 完成迁移步骤。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | 数据库管理员 | 
| 验证数据。 | 要确保您的数据从源准确迁移到目标，请按照 AWS DMS 文档中的[数据验证步骤](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)进行操作。 | 数据库管理员 | 

### 迁移数据-选项 2（使用 pg\$1dump 和 pg\$1restore）
<a name="migrate-data-option-2-using-pg_dump-and-pg_restore"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备源数据库。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html)有关更多信息，请参阅 [pg\$1dump](https://www.postgresql.org/docs/current/app-pgdump.html) 文档和 AWS DMS 文档中的[演练](https://docs.aws.amazon.com/dms/latest/sbs/chap-manageddatabases.postgresql-rds-postgresql-full-load-pd_dump.html)。 | 数据库管理员 | 
| 准备目标数据库。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html)有关更多信息，请参阅 [pg\$1restore](https://www.postgresql.org/docs/current/app-pgrestore.html) 文档和 AWS DMS 文档中的[演练](https://docs.aws.amazon.com/dms/latest/sbs/chap-manageddatabases.postgresql-rds-postgresql-full-load-pd_dump.html)。 | 数据库管理员 | 
| 验证数据。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序迁移策略。 | 实施您在第一个操作说明中创建的应用程序迁移策略。 | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | 数据库管理员、应用程序所有者、系统管理员 | 
| 如果您需要回滚迁移。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | 数据库管理员、应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭资源。 | 关闭临时 AWS 资源。 | 数据库管理员、系统管理员 | 
| 验证文档。 | 查看和验证项目文档。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 收集指标。 | 收集与迁移时间、手动与工具占比、成本节约等相关的指标。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 关闭项目。 | 关闭项目并提供任何反馈。 | 数据库管理员、应用程序所有者、系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-resources"></a>

**参考**
+ [AWS 数据库迁移服务](https://aws.amazon.com/dms/)
+ [VPCs 还有亚马逊 Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.html)
+ [Amazon Aurora 定价](https://aws.amazon.com/rds/aurora/pricing/)
+ [使用 PostgreSQL 数据库作为 AWS DMS 源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html)
+ [如何创建 AWS DMS 复制实例](https://aws.amazon.com/premiumsupport/knowledge-center/create-aws-dms-replication-instance/)
+ [如何使用 AWS DMS 创建源端点和目标端点](https://aws.amazon.com/premiumsupport/knowledge-center/create-source-target-endpoints-aws-dms/)

**其他资源**
+ [AWS DMS 入门](https://aws.amazon.com/dms/getting-started/)
+ [数据迁移 step-by-step演练](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)
+ [Amazon Aurora 资源](https://aws.amazon.com/rds/aurora/getting-started/)

# 将本地微软 SQL Server 数据库迁移到 EC2 运行 Linux 的亚马逊上的微软 SQL Server
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux"></a>

*Tirumala Dasari，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-summary"></a>

此模式描述了如何使用备份和还原实用程序从在微软 Windows 上运行的本地 Microsoft SQL Server 数据库迁移到亚马逊弹性计算云 (亚马逊 EC2) Linux 实例上的微软 SQL Server。

## 先决条件和限制
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 带微软 SQL Server 的亚马逊 EC2 Linux AMI（亚马逊机器映像）
+ 在本地 Windows 和 Linux EC2 实例上的微软 SQL Server 之间的 AWS Direct Connect

## 架构
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-architecture"></a>

**源技术堆栈**
+ 本地 Microsoft SQL Server 数据库

**目标技术堆栈**
+ 带有微软 SQL Server 数据库的 Linux EC2 实例

**数据库迁移架构**

![\[将本地 SQL Server 数据库迁移到 Linux EC2 实例的架构图。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f331ad15-2d41-4087-a6d1-60e3443e2acf/images/f50a779a-ce5d-44b1-8d37-dedd6400a12c.png)


## 工具
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-tools"></a>
+ **WinSCP** - 此工具使 Windows 用户能够轻松地与 Linux 用户共享文件。
+ **Sqlcmd** - 此命令行实用程序允许您将 T-SQL 语句或批处理提交到 SQL Server 的本地和远程实例。该实用程序对于重复的数据库任务（例如批处理或单元测试）非常有用。

## 操作说明
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-epics"></a>

### 使用 SQL Server 准备 EC2 Linux 实例
<a name="prepare-the-ec2-linux-instance-with-sql-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 选择提供 Linux 操作系统并包括 Microsoft SQL Server 的 AMI。 |  | 系统管理员 | 
| 配置 AMI 以创建 EC2 实例。 |  | 系统管理员 | 
| 创建安全组的入站和出站规则。 |  | 系统管理员 | 
| 为微软 SQL Server 数据库配置 Linux EC2 实例。 |  | 数据库管理员 | 
| 创建用户并提供与源数据库中一样的权限。 |  | 应用程序所有者、数据库管理员 | 
| 在 Linux 实例上安装 SQL Server 工具和 sqlcmd 实用程序。 EC2  |  | 数据库管理员 | 

### 备份数据库并将备份文件移至 Linux EC2 实例
<a name="back-up-the-database-and-move-backup-file-to-linux-ec2-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 备份本地 SQL Server 数据库。 |  | 数据库管理员 | 
| 在 Microsoft SQL Server 上安装 WinSCP。 |  | 数据库管理员 | 
| 将备份文件移至运行微软 SQL Server 的 Linux EC2 实例。 |  | 数据库管理员 | 

### 在运行 SQL Server 的 Linux EC2 实例上恢复数据库
<a name="restore-the-database-on-linux-ec2-instance-running-sql-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 sqlcmd 实用程序从数据库备份文件恢复数据库。 |  | 数据库管理员 | 
| 验证数据库对象和数据。 |  | 开发人员、测试工程师 | 

### 在 Linux EC2 实例上从 Windows SQL 服务器切换到 Windows SQL Server
<a name="cut-over-from-windows-sql-server-to-windows-sql-server-on-linux-ec2-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证数据库对象和数据。 |  | 开发人员、测试工程师 | 
| 从本地微软 SQL Server 数据库切换到运行微软 SQL Server 的 Linux EC2 实例。 |  | 数据库管理员 | 

## 相关的资源
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-resources"></a>
+ [如何在亚马逊 Linux 和 Ubuntu 上配置 SQL Server 2017 AMIs](https://aws.amazon.com/blogs/database/configuring-sql-server-2017-on-amazon-linux-2-and-ubuntu-amis/) 
+ [在 Linux 实例上安装 SQL 工具](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools?view=sql-server-2017#RHEL) 
+ [在 Linux EC2 实例上从本地微软 SQL Server 数据库备份和恢复到微软 SQL Server](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-migrate-restore-database?view=sql-server-2017#create-a-backup-on-windows) 

# 使用链接服务器将本地 Microsoft SQL Server 数据库迁移至 Amazon RDS for SQL Server
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers"></a>

*Kevin Yung、Viqash Adwani 和 Vishal Singh，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-summary"></a>

链接服务器使 Microsoft SQL Server 能够在数据库服务器的其他实例上运行 SQL 语句。此模式描述了如何将本地 Microsoft SQL Server 数据库迁移到 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server，以实现更低的成本和更高的可用性。目前，Amazon RDS for Microsoft SQL Server 不支持 Amazon Virtual Private Cloud (Amazon VPC) 网络外部的连接。 

您可使用此模式来实现以下目标：
+ 在不中断链接服务器功能的情况下将 Microsoft SQL Server 迁移至 Amazon RDS for Microsoft SQL Server。
+ 在不同的批次中确定优先级并迁移链接的 Microsoft SQL Server。

## 先决条件和限制
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-prerequisites-and-limitations"></a>

**先决条件**
+ 检查[Amazon RDS 上的 Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html) 是否支持需要的功能。
+ 确保您可使用[具有默认排序规则的 Amazon RDS for Microsoft SQL Server，或者在数据库级别上设置排序规则。](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Collation.html) 

## 架构
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-architecture"></a>

**源技术堆栈**
+ 本地数据库 (Microsoft SQL Server)

 **目标技术堆栈**
+ Amazon RDS for SQL Server

**源状态架构**

![\[Diagram showing data replication between two data centers with primary and secondary SQL servers.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/95234758-cb8b-46e5-afd2-3d4aaf6ed668/images/776b453a-7fa0-43fd-b1ca-fb9e5cc21820.png)


 

 

 

 

 

 

 

 

 

 

 

 

**目标状态架构**

在目标状态下，您可使用链接服务器将 Microsoft SQL Server 迁移至 Amazon RDS for Microsoft SQL Server。此架构使用网络负载均衡器将流量从 Amazon RDS for Microsoft SQL Server 代理到运行 Microsoft SQL Server 的本地服务器。下图显示了网络负载均衡器反向代理功能。

![\[AWS 云 architecture with RDS SQL Server instances in two availability zones and on-premises databases.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/95234758-cb8b-46e5-afd2-3d4aaf6ed668/images/6bdbdfbf-b048-4fbd-acef-0aeb826edb50.png)


 

## 工具
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-tools"></a>
+ AWS CloudFormation
+ Network Load Balancer 
+ 多个可用区（多AZs）中的 Amazon RDS for SQL Server
+ AWS Database Migration Service (AWS DMS) 

## 操作说明
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-epics"></a>

### 创建登录区 VPC
<a name="create-a-landing-zone-vpc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 CIDR 分配。 |  | AWS SysAdmin | 
| 创建虚拟私有云（VPC）。 |  | AWS SysAdmin | 
| 创建 VPC 子网。 |  | AWS SysAdmin | 
| 创建子网访问控制列表 (ACLs)。 |  | AWS SysAdmin | 
| 创建子网路由表。 |  | AWS SysAdmin | 
| 通过 AWS Direct Connect 或 AWS 虚拟专用网络（VPN）创建连接。 |  | AWS SysAdmin | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon RDS for Microsoft SQL Server DB 实例。 |  | AWS SysAdmin | 
| 创建 AWS DMS 复制实例。 |  | AWS SysAdmin | 
| 在 AWS DMS 中创建源和目标数据库端点。 |  | AWS SysAdmin | 
| 创建迁移任务，并在满负荷后将连续复制设置为“打开”。 |  | AWS SysAdmin | 
| 请求更改防火墙，以允许 Amazon RDS for Microsoft SQL Server 访问本地 SQL Server 数据库。 |  | AWS SysAdmin | 
| 创建网络负载均衡器。 |  | AWS SysAdmin | 
| 创建针对数据中心中的数据库服务器的目标组 | 我们建议您在目标设置中使用主机名来合并数据中心 (DC) 故障转移事件。 | AWS SysAdmin | 
| 运行 SQL 语句执行链接服务器设置。 | 使用 Microsoft SQL 管理工具针对 Amazon RDS for Microsoft SQL Server 数据库实例运行用于添加链接服务器的 SQL 语句。在 SQL 语句中，设置 @datasrc 以使用网络负载均衡器主机名。使用 Microsoft SQL 管理工具针对 Amazon RDS for Microsoft SQL Server 数据库实例添加链接服务器登录凭证。 | AWS SysAdmin | 
| 测试和验证 SQL Server 函数。 |  | AWS SysAdmin | 
| 创建割接。 |  | AWS SysAdmin | 

## 相关资源
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-related-resources"></a>
+ [Amazon RDS 上 Microsoft SQL Server 的常见管理任务](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General)
+ [Microsoft SQL Server 的排序规则和字符集](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Collation.html) 
+ [网络负载均衡器文档](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 
+ [使用 Amazon RDS for Microsoft SQL Server 实施链接服务器（博客文章）](https://aws.amazon.com/blogs/database/implement-linked-servers-with-amazon-rds-for-microsoft-sql-server/)

# 使用本机备份和还原将本地 Microsoft SQL Server 数据库迁移到 Amazon RDS for SQL Server。
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods"></a>

*Tirumala Dasari、David Queiroz 和 Vishal Singh，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-summary"></a>

此模式描述如何将本地 Microsoft SQL Server 数据库迁移到 SQL Server 数据库实例的 Amazon Relational Database Service (Amazon RDS)（同质迁移）。迁移进程基于本机 SQL Server 备份和还原方法。它使用 SQL Server Management Studio (SSMS) 创建数据库备份文件，并使用 Amazon Simple Storage Service (Amazon S3) 存储桶来存储备份文件，然后再将其恢复到 Amazon RDS for SQL Server 中。

## 先决条件和限制
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ AWS Identity and Access Management(IAM) 角色策略，用于访问 S3 存储桶和 Amazon RDS for SQL Server 数据库实例。

**限制**
+ 此模式中描述的进程仅迁移数据库。SQL 登录名或数据库用户（包括任何 SQL Server 代理作业）不会迁移，因为它们需要额外的步骤。

**产品版本**
+ SQL Server 2012-2017。有关当前支持的版本和功能的最新列表，请参阅 AWS 文档中的 [Microsoft SQL Server on Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport)。

## 架构
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-architecture"></a>

**源技术堆栈**
+ 本地 Microsoft SQL Server 数据库

**目标技术堆栈**
+ Amazon RDS for SQL Server DB 实例

**数据迁移****架构**

![\[将本地 SQL Server 数据库迁移至 Amazon RDS for SQL Server 数据库实例的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/c2dcd6ab-deb1-4d5e-b3c5-3bf48c02ca4e/images/29f90473-6dd4-4574-bfbd-5c6a0481c40e.png)


## 工具
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-tools"></a>
+ Microsoft SQL Server Management Studio (SSMS) 是一个用于管理 SQL Server 基础设施的集成环境。它提供了用户界面和一组工具，其中包含与 SQL Server 交互的丰富脚本编辑器。

## 操作说明
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-epics"></a>

### 创建 Amazon RDS for SQL Server 数据库实例
<a name="create-an-amazon-rds-for-sql-server-db-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Amazon RDS for SQL Server 中选择 SQL Server 作为数据库引擎。 |  | 数据库管理员 | 
| 选择 SQL Server Express Edition。 |  | 数据库管理员 | 
| 指定数据库详细信息。 | 有关创建数据库实例的信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)。 | 数据库管理员、应用程序所有者 | 

### 从本地 SQL Server 数据库创建备份文件
<a name="create-a-backup-file-from-the-on-premises-sql-server-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 通过 SSMS 连接至本地 SQL Server 数据库。 |  | 数据库管理员 | 
| 创建数据库的备份。 | 有关说明，请参阅 [SSMS 文档](https://learn.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms)。 | 数据库管理员、应用程序所有者 | 

### 将备份文件上载到 Amazon S3
<a name="upload-the-backup-file-to-amazon-s3"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Amazon S3 中创建一个桶。 | 有关更多信息，请参阅 [Amazon S3 文档](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。 | 数据库管理员 | 
| 将备份文件上传到 S3 存储桶。 | 有关更多信息，请参阅 [Amazon S3 文档](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。 | SysOps 管理员 | 

### 还原 Amazon RDS for SQL Server 数据库
<a name="restore-the-database-in-amazon-rds-for-sql-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 向 Amazon RDS 添加选项组。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.html)有关更多信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithOptionGroups.html)。 | SysOps 管理员 | 
| 还原数据库。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.html) | 数据库管理员 | 

### 校验目标数据库
<a name="validate-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证对象和数据。 | 验证源数据库与 Amazon RDS for SQL Server 之间的对象和数据。此任务仅迁移数据库。不迁移登录名和作业。 | 应用程序所有者，数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 重定向应用程序流量。 | 验证后，将应用程序流量重定向至 Amazon RDS for SQL Server 数据库实例。 | 应用程序所有者，数据库管理员 | 

## 相关资源
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-resources"></a>
+ [Amazon S3 文档](https://docs.aws.amazon.com/s3/) 
+ [Amazon RDS for SQL Server 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html) 
+ [适用于 Microsoft SQL Server 数据库引擎的选项](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.html) 

# 使用 AWS DMS 和 AWS SCT 将 Microsoft SQL Server 数据库迁移到 Aurora MySQL
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct"></a>

*Mark Szalkiewicz 和 Pavan Pusuluri，Amazon Web Services*

## Summary
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-summary"></a>

此模式描述了如何将本地或亚马逊弹性计算云 (亚马逊 EC2) 实例上的微软 SQL Server 数据库迁移到亚马逊 Aurora MySQL。该模式使用 AWS Database Migration Service (AWS DMS) 和 AWS Schema Conversion Tool (AWS SCT) 进行数据迁移和架构转换。

## 先决条件和限制
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-prerequisites-and-limitations"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心或 EC2 实例上的 Microsoft SQL Server 源数据库 
+ AWS SCT 连接器的 Java 数据库连接 (JDBC) 驱动程序，安装在本地计算机或安装了 AWS SCT 的 EC2 实例上 

 

**限制**
+ 数据库大小限制：64 TB

**产品版本**
+ Microsoft SQL Server 2008、2008 R2、2012、2014、2016 和 2017（Enterprise、Standard、Workgroup 和 Developer 版）。AWS DMS 不支持 Web 和 Express 版本。有关受支持版本的最新列表，请参阅[将 Microsoft SQL Server 数据库作为 AWS DMS 的源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)。建议使用最新版本的 AWS DMS，以获得最全面的版本和功能支持。有关 AWS SCT 支持的 Microsoft SQL Server 版本的信息，请参阅 [AWS SCT 文档](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。
+ MySQL 版本 5.5、5.6 和 5.7。有关受支持版本的最新列表，请参阅[将 MySQL 兼容数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)。

## 架构
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-architecture"></a>

**源技术堆栈**

下列情况之一： 
+ 本地 Microsoft SQL Server 数据库
+  EC2 实例上的微软 SQL Server 数据库

**目标技术堆栈**
+ Aurora MySQL

**数据迁移架构**
+ 从在 Amazon Web Services Cloud 中运行的 Microsoft SQL Server 数据库 

![\[AWS 云 architecture showing VPC with private subnet containing SQL Server and Aurora MySQL databases.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/e2de4507-82a8-4bd6-b25b-1e830b197b9f/images/c675ada4-e92c-4ddb-b49f-69668f532504.png)

+ 从本地数据中心运行的 Microsoft SQL Server 数据库

![\[AWS 云 architecture diagram showing on-premises to cloud migration using AWS SCT, DMS, and Aurora MySQL.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/e2de4507-82a8-4bd6-b25b-1e830b197b9f/images/b6ce0199-fc56-4bf2-a8cc-67de161e3cf0.png)


## 工具
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-tools"></a>
+ **AWS DMS** - [AWS Data Migration Service](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html) (AWS DMS) 可帮助您将数据迁移到广泛使用的商业和开源数据库，包括 Oracle、SQL Server、MySQL 和 PostgreSQL。您可以使用 AWS DMS 将数据迁移到 Amazon Web Services Cloud、本地实例之间（通过 Amazon Web Services Cloud 设置）或云和本地设置的组合之间。
+ **AWS SCT** - [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) (AWS SCT) 通过自动将源数据库架构和大部分自定义代码转换为与目标数据库兼容的格式，使异构数据库迁移变得轻松。

## 操作说明
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-epics"></a>

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库版本和引擎。 |  | 数据库管理员 | 
| 为源数据库和目标数据库创建出站安全组。 |  | SysAdmin | 
| 如果需要，为 AWS SCT 创建和配置 EC2 实例。 |  | 数据库管理员 | 
| 下载最新版本的 AWS SCT 和相关驱动程序。 |  | 数据库管理员 | 
| 在源数据库中添加和验证必备用户和授权。 |  | 数据库管理员 | 
| 为工作负载创建 AWS SCT 项目并连接到源数据库。 |  | 数据库管理员 | 
| 生成评测报告并评测可行性。 |  | 数据库管理员 | 

### 准备目标数据库
<a name="prepare-the-target-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 Amazon Aurora 作为数据库引擎创建目标 Amazon RDS 数据库实例。 |  | 数据库管理员 | 
| 从源中提取用户、角色和授权的列表。 |  | 数据库管理员 | 
| 将现有数据库用户映射到新的数据库用户。 |  | 应用程序所有者 | 
| 在目标数据库中创建用户。 |  | 数据库管理员 | 
| 将上一步的角色应用至目标数据库。 |  | 数据库管理员 | 
| 查看源数据库中的数据库选项、参数、网络文件和数据库链接，然后评估它们对目标数据库的适用性。 |  | 数据库管理员 | 
| 将任何相关设置应用于目标。 |  | 数据库管理员 | 

### 传输对象
<a name="transfer-objects"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为目标数据库配置 AWS SCT 连接。 |  | 数据库管理员 | 
| 使用 AWS SCT 转换架构。 | AWS SCT 会自动将源数据库架构和大多数自定义代码转换为与目标数据库兼容的格式。该工具无法自动转换的任何代码都会被清楚地标记出来，以便您可以自己转换。 | 数据库管理员 | 
| 查看生成的 SQL 报告并保存所有错误和警告。 |  | 数据库管理员 | 
| 将自动架构更改应用于目标或将其另存为 .sql 文件。 |  | 数据库管理员 | 
| 验证 AWS SCT 是否在目标创建了对象。 |  | 数据库管理员 | 
| 手动重写、拒绝或重新设计任何无法自动转换的项目。 |  | 数据库管理员 | 
| 应用生成的角色和用户授权并查看任何例外情况。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定迁移方法。 |  | 数据库管理员 | 
| 从 AWS DMS 控制台创建复制实例。 | 有关使用 AWS DMS 的详细信息，请参阅“相关资源”部分中的链接。 | 数据库管理员 | 
| 创建源端点和目标端点。 |  | 数据库管理员 | 
| 创建复制任务。 |  | 数据库管理员 | 
| 启动复制任务并监控日志。 |  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS SCT 分析和转换应用程序代码中的 SQL 项。 | 当您将数据库架构从一个引擎转换到另一个引擎时，还需要更新应用程序中的 SQL 代码，以便与新数据库引擎 (而非旧引擎) 进行交互。您可以查看、分析、编辑和保存转换后的 SQL 代码。有关使用 AWS SCT 的详细信息，请参阅“相关资源”部分中的链接。 | 应用程序所有者 | 
| 在 AWS 上创建新应用程序服务器。 |  | 应用程序所有者 | 
| 将应用程序代码迁移至新服务器。 |  | 应用程序所有者 | 
| 为目标数据库和驱动程序配置应用程序服务器。 |  | 应用程序所有者 | 
| 修复应用程序中特定于源数据库引擎的任何代码。 |  | 应用程序所有者 | 
| 优化目标引擎的应用程序代码。 |  | 应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将任何新用户、授权和代码更改应用于目标。 |  | 数据库管理员 | 
| 锁定应用程序以进行任何更改。 |  | 应用程序所有者 | 
| 验证所有更改是否都已传播到目标数据库。 |  | 数据库管理员 | 
| 将新的应用程序服务器指向目标数据库。 |  | 应用程序所有者 | 
| 重新检查所有内容。 |  | 应用程序所有者 | 
| 上线。 |  | 应用程序所有者 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时的 AWS 资源（AWS DMS 复制 EC2 实例和用于 AWS SCT 的实例）。 |  | 数据库管理员、应用程序所有者 | 
| 更新内部团队对于 AWS DMS 流程的反馈。 |  | 数据库管理员、应用程序所有者 | 
| 如有必要，请修改 AWS DMS 流程并改进模板。 |  | 数据库管理员、应用程序所有者 | 
| 审查和验证项目文档。 |  | 数据库管理员、应用程序所有者 | 
| 收集有关迁移时间、手动成本与工具成本节省百分比等指标。 |  | 数据库管理员、应用程序所有者 | 
| 关闭项目并提供任何反馈。 |  | 数据库管理员、应用程序所有者 | 

## 相关资源
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-related-resources"></a>

**参考**
+ [AWS DMS 用户指南](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS SCT 用户指南](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)  
+ [Amazon Aurora 定价](https://aws.amazon.com/rds/aurora/pricing/) 

**教程和视频**
+ [AWS Database Migration Service 入门](https://aws.amazon.com/dms/getting-started/)
+ [AWS Schema Conversion Tool 入门](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS 资源](https://aws.amazon.com/rds/getting-started/)
+ [AWS DMS 演练 Step-by-Step](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html) 

# 使用原生工具将本地 MariaDB 数据库迁移至 Amazon RDS for MariaDB
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools"></a>

*Shyam Sunder Rakhecha，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-summary"></a>

此模式为使用原生工具将本地 MariaDB 数据库迁移至 Amazon Relational Database Service (Amazon RDS) for MariaDB 提供了指导。如果安装了 MySQL 工具，则可使用 **mysql **和 **mysqldump**。**如果安装了 Mariadb 工具，则可使用 **mariadb** 和 mariadb-dump**。MySQL 和 MariaDB 工具的源相同，但二者在 MariaDB 版本 10.6 及更高版本中存在细微差别。

## 先决条件和限制
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 本地数据中心的 MariaDB 源数据库

**限制**
+ 数据库大小限制：64 TB

**产品版本**
+ MariaDB 版本 10.0-10.6（有关支持版本的最新列表，请参阅 AWS 文档中的 [Amazon RDS 上的 MariaDB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html#MariaDB.Concepts.VersionMgmt)）

## 架构
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-architecture"></a>

**源技术堆栈**
+ 本地数据中心的 MariaDB 数据库

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

**目标架构**

![\[不同可用区中的主实例和备用 RDS 数据库实例架构图。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/7be644e0-da42-4515-87b7-04da7a054adb/images/eca8eb55-579a-42e2-96ce-9b14b097b4c9.png)


**数据迁移架构**

![\[将本地 MariaDB 数据库迁移至 Amazon RDS 架构图\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/7be644e0-da42-4515-87b7-04da7a054adb/images/daba40e2-a2b1-44f8-8e69-31458206a823.png)


## 工具
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-tools"></a>
+ 原生 MySQL 工具：**mysql** 和 **mysqldump**
+ 原生 MariaDB 工具：**mariadb** 和 **mariadb-dump**

## 操作说明
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证源数据库和目标数据库版本和引擎。 |  | 数据库管理员 | 
| 确定目标服务器实例的硬件要求。 |  | 数据库管理员、系统管理员 | 
| 识别存储需求（存储类型和容量）。 |  | 数据库管理员、系统管理员 | 
| 根据容量、存储功能和网络功能选择正确的实例类型。 |  | 数据库管理员、系统管理员 | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员、系统管理员 | 
| 确定应用程序迁移策略。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 |  | 系统管理员 | 
| 创建安全组。 |  | 系统管理员 | 
| 配置并启动运行 MariaDB 的 Amazon RDS 数据库实例。 |  | 系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用原生工具迁移数据库对象和数据。 | 在源数据库中，使用 **mysqldump** 或 **mariadb-dump** 创建包含数据库对象和数据的输出文件。在目标数据库中，使用 **mysql** 或 **mariadb ** 恢复数据。 | 数据库管理员 | 
| 验证数据。 | 检查源数据库和目标数据库，以确认数据迁移已成功。 | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循应用程序迁移策略。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将应用程序客户端切换至新基础设施。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | 系统管理员 | 
| 查看和验证项目文档。 |  | 数据库管理员、应用程序所有者、系统管理员 | 
| 收集与迁移时间、工具成本节约等相关的指标。 |  | 数据库管理员、应用程序所有者、系统管理员 | 
| 关闭项目并提供反馈。 |  | 数据库管理员、应用程序所有者、系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-resources"></a>

**Amazon RDS 参考**
+ [Amazon RDS for MariaDB](https://aws.amazon.com/rds/mariadb/)
+ [亚马逊 Virtual Private Cloud VPCs 和 Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html)
+ [Amazon RDS 多可用区部署](https://aws.amazon.com/rds/details/multi-az/)
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)

**MySQL 和 MariaDB 参考**
+ [mariadb-dump/mysqldump](https://mariadb.com/kb/en/mariadb-dumpmysqldump/) 
+ [mysql 命令行客户端](https://mariadb.com/kb/en/mysql-command-line-client/) 

**教程和视频**
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)

# 将本地 MySQL 数据库迁移至 Aurora MySQL
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql"></a>

*Igor Obradovic，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-summary"></a>

此模式说明了如何将本地 MySQL 源数据库迁移至 Amazon Aurora MySQL 兼容版。**它描述了两个迁移选项：使用 AWS Database Migration Service (AWS DMS) 或使用原生 MySQL 工具，例如 mysql **dbcopy 和 mysqld** ump。**

## 先决条件和限制
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 本地数据中心的源 MySQL 数据库

**限制**
+ 数据库大小限制：128 TB

**产品版本**
+ MySQL 版本 8.0（Aurora MySQL 版本 3）提供标准支持。
+ MySQL 版本 5.7（Aurora MySQL 版本 2）提供扩展支持，但需要额外付费。

有关支持版本的最新列表，请参阅 AWS 文档中的 [Amazon Aurora 版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraMySQLReleaseNotes/AuroraMySQL.release-calendars.html)。如果您正在使用 AWS DMS，另请参阅使用与 M [ySQL 兼容的数据库作为目标适用于](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)支持的 AWS DMS MySQL 版本。 AWS DMS

## 架构
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-architecture"></a>

**源技术堆栈**
+ 本地数据库。

**目标技术堆栈**
+ Amazon Aurora MySQL 兼容版 

**目标架构**

Aurora 数据存储在集群卷中，集群卷是一个使用固态硬盘 (SSDs) 的单个虚拟卷。集群卷由跨一个 AWS 区域中的三个可用区的数据副本组成。由于数据会自动跨可用区复制，因此，其具有高持久性，同时数据丢失的可能性很小。

Aurora 会自动将您的数据库卷划分为多个 10 GB 的分段，分布在多个磁盘上。数据库卷中每 10 GB 的数据块会以六种方式进行复制，覆盖三个可用区。下图说明了 Aurora 数据库集群中的集群卷、写入器数据库实例和读取器数据库实例之间的关系，以及计算能力和存储的分离情况。有关此架构的更多信息，请参阅 [Aurora 文档](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.html)和[常见问题解答](https://aws.amazon.com/rds/aurora/faqs/#product-faqs)。

![\[AWS 上的 Aurora MySQL 数据库实例和共享存储卷。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/22729803-e4ff-45a2-ab5b-8ba2445e5e21/images/0d7d8ebd-e0f2-4bcf-b296-8bdfb2f12b64.png)


**数据迁移架构**

*使用 AWS DMS：*

下图说明了使用将本地 MySQL 数据库迁移到与 Aurora MySQL 兼容的集群的 AWS 云过程。 AWS DMS

![\[使用 AWS DMS 将本地 MySQL 数据库迁移到 Aurora MySQL。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/22729803-e4ff-45a2-ab5b-8ba2445e5e21/images/e5d72ebd-d157-45d7-8844-d1011f1646c0.png)


*使用原生 MySQL 工具：*

**下图说明了使用 mysqldbcopy 和 mysqldump 等原生 MySQL 工具将本地 MySQL 数据库迁移到中兼容 Aurora MySQL 的集群**的情况**。 AWS 云**

![\[使用 mysqldbcopy 和 mysqldump 将本地 MySQL 数据库迁移到 Aurora MySQL。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/22729803-e4ff-45a2-ab5b-8ba2445e5e21/images/26258752-24f6-4241-a49f-59c15e946314.png)


 

## 工具
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 支持多个源数据库和目标数据库引擎。有关支持的 MySQL 源数据库和目标数据库的信息 AWS DMS，请参阅[将兼容 MySQL 的数据库迁移到](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MySQL.html)。 AWS我们建议您使用最新版本的， AWS DMS 以获得最全面的版本和功能支持。
+ [mysqldbcopy](https://manpages.ubuntu.com/manpages/focal/man1/mysqldbcopy.1.html) 是 MySQL 实用程序，用于在单台服务器上或服务器之间复制 MySQL 数据库。
+ [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 是 MySQL 实用程序，用于从 MySQL 数据库创建转储文件，以实现备份或迁移目的。

## 操作说明
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证版本和引擎。 | 验证源数据库和目标数据库的版本和引擎。 | 数据库管理员 | 
| 确定硬件要求。 | 确定目标服务器实例的硬件要求。 | 数据库管理员、系统管理员 | 
| 确定存储要求。 | 识别存储需求（存储类型和容量）。 | 数据库管理员、系统管理员 | 
| 选择实例类型。 | 根据计算、存储和网络要求选择合适的实例类型。 | 数据库管理员、系统管理员 | 
| 确定网络访问安全要求。 | 确定源数据库和目标数据库的网络访问安全要求。 | 数据库管理员、系统管理员 | 
| 确定策略。 | 确定应用程序迁移策略。 | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 | 有关说明，请参阅 Amazon Virtual Private Cloud（Amazon VPC）文档中的[创建 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)。 | 系统管理员 | 
| 创建安全组。 | 有关说明，请参阅 Amazon VPC 文档中的[为 VPC 创建安全组](https://docs.aws.amazon.com/vpc/latest/userguide/creating-security-groups.html)。 | 系统管理员 | 
| 在 AWS 账户中配置并启动 Aurora MySQL 兼容版数据库集群。 | 有关说明，请参阅 Aurora 文档中的[创建 Amazon Aurora 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html)。 | 系统管理员 | 

### 迁移数据 - 选项 1
<a name="migrate-data---option-1"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用原生 MySQL 工具或第三方工具迁移数据库对象和数据。 | 有关说明，请参阅 MySQL 工具（例如 [mysqldbcopy](https://manpages.ubuntu.com/manpages/focal/man1/mysqldbcopy.1.html) 和 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)）文档。 | 数据库管理员 | 

### 迁移数据 - 选项 2
<a name="migrate-data---option-2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用迁移数据 AWS DMS。 | 有关说明，请参阅文档中的[使用与 MySQL 兼容的数据库作为源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html)和[使用 MySQL 兼容的数据库作为目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)。 AWS DMS  | 数据库管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 遵循策略。 | 遵循应用程序迁移策略。 | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 切换应用程序客户端。 | 将应用程序客户端切换为连接到新的 Aurora 集群端点。 | 数据库管理员、应用程序所有者、系统管理员 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭资源。 | 关闭临时 AWS 资源。 | 数据库管理员、系统管理员 | 
| 查看文档。 | 查看和验证项目文档。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 收集指标。 | 收集与迁移时间、手动步骤与使用工具的比例、成本节约等方面的指标。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 完成迁移项目。 | 关闭项目并提供反馈。 | 应用程序所有者，数据库管理员，系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-resources"></a>

**参考**
+ [将数据迁移到 Amazon Aurora MySQL 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.html)
+ [AWS DMS 网站](https://aws.amazon.com/dms/)
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [Amazon Aurora 定价](https://aws.amazon.com/rds/aurora/pricing/)
+ [创建并连接到 Aurora MySQL 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.Aurora.html)
+ [Amazon VPC 和 Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html)
+ [Amazon Aurora 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)

**教程和视频**
+ [入门 AWS DMS](https://aws.amazon.com/dms/getting-started/)
+ [Amazon Aurora 入门](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.html)

# 使用 Percona、A XtraBackup mazon EFS 和 Amazon S3 将本地 MySQL 数据库迁移到 Aurora MySQL
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3"></a>

*Rohan Jamadagni、Udayasimha Theepireddy 和 sajith menon，Amazon Web Services*

## Summary
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-summary"></a>

此模式描述了如何使用 Percon XtraBackup a 将大型本地 MySQL 数据库高效地迁移到 Amazon Aurora MySQL。Percona XtraBackup 是一款适用于基于 MySQL 的服务器的开源、非阻塞备份实用程序。该模式显示了如何使用 Amazon Elastic File System（Amazon EFS）来缩短将备份上传到 Amazon Simple Storage Service（Amazon S3）的时间，以及将备份恢复到 Amazon Aurora MySQL 的时间。该模式还详细介绍了如何进行 Percona 增量备份，以最大限度地减少要应用于目标 Aurora MySQL 数据库的二进制日志数量。 

## 先决条件和限制
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 创建 AWS Identity and Access Management（IAM）角色和策略的权限
+ 本地 MySQL 数据库与 AWS 上的虚拟私有云（VPC）之间的网络连接

**限制**
+ 源服务器必须是基于 Linux 的系统，可以安装网络文件系统 (NFS) 客户端 (nfs-utils/nfs-common)。
+ 用于上传备份文件的 S3 存储桶仅支持服务器端加密(SSE-S3/SSE-KMS)。
+ Amazon S3 将备份文件大小限制为 5 TB。如果备份文件超过 5 TB，则可以将其分为多个较小的文件。
+ 上传到 S3 存储桶的源文件个数不能超过 100 万个。
+ 该模式仅支持 Percona XtraBackup 完整备份和增量备份。它不支持使用 `--tables`、`--tables-exclude`、`--tables-file`、`--databases`、`--databases-exclude` 或 `--databases-file` 的部分备份。
+ Aurora 不会从 MySQL 源数据库中恢复用户、函数、存储过程或时区信息。

**产品版本**
+ 源数据库必须是 MySQL 版本 5.5、5.6 或 5.7。
+ 对于 MySQL 5.7，你必须使用 Percona XtraBackup 2.4。
+ 对于 MySQL 5.6 和 5.6，你必须使用 Percona XtraBackup 2.3 或 2.4。

## 架构
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-architecture"></a>

**源技术堆栈**
+ 基于 Linux 的操作系统
+ MySQL 服务器
+ Percona XtraBackup

**目标技术堆栈**
+ Amazon Aurora
+ Amazon S3
+ Amazon EFS

**目标架构**

![\[使用 Perc XtraBackup ona 将大型 MySQL 数据库迁移到 Amazon Aurora MySQL 的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/bf327776-bafd-484d-9ae2-a6f5c8af6edd/images/7a410539-1511-4106-90e2-8c0c8e95f92b.png)


## 工具
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-tools"></a>

*Amazon Web Services*
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html) 是一款完全托管型关系数据库引擎，可以让您通过简单且经济高效的方式设置、操作和扩展 MySQL 部署。Aurora MySQL 是 MySQL 的插拔式替换。
+ [Amazon Elastic File System（Amazon EFS）](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)可帮助您在 Amazon Web Services Cloud 中创建和配置共享文件系统。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**其他工具**
+ [Percona XtraBackup](https://www.percona.com/doc/percona-xtrabackup/2.4/index.html) 是一个开源实用程序，可在不中断或阻塞数据库的情况下执行 MySQL 数据库的流式备份、压缩备份和增量备份。

## 操作说明
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-epics"></a>

### 创建 Amazon EFS 文件系统
<a name="create-an-amazon-efs-file-system"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个与 Amazon EFS 挂载目标关联的安全组。 | 在 VPC 中创建一个安全组，该组配有通过 AWS Transit Gateway 连接到本地数据库的 VPN。有关本文和其他文章中描述的命令和步骤的更多信息，请参阅此模式末尾的“相关资源”部分中的链接。 | AWS DevOps/database 管理员 | 
| 编辑安全组规则。 | 添加入站规则，使用类型 NFS、端口 2049 和本地数据库服务器的 IP 范围作为源。默认情况下，出站规则允许所有流量离开。如果不是这种情况，请添加出站规则以打开 NFS 端口的连接。再添加两个入站规则：端口 2049（来源：同一安全组的安全组 ID）和端口 22（来源：您将从中连接到 EC2 实例的 IP 范围）。 | AWS DevOps/database 管理员 | 
| 创建文件系统。 | 在挂载目标中，使用您在上一个情节中创建的 VPC 和安全组。根据本地数据库的 I/O 要求选择吞吐量模式和性能。或者，启用静态加密。 | AWS DevOps/database 管理员 | 

### 挂载文件系统
<a name="mount-the-file-system"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建要与实例关联的 IAM EC2 实例配置文件角色。 | 创建有权上传和访问 Amazon S3 中的对象的 IAM 角色。选择将备份存储为策略资源的 S3 存储桶。 | AWS DevOps | 
| 创建实 EC2 例。 | 启动基于 Linux 的 EC2 实例，并附加您在上一步中创建的 IAM 实例配置文件角色和之前创建的安全组。 | AWS DevOps | 
| 安装 NFS 客户端。 | 在本地数据库服务器和 EC2 实例上安装 NFS 客户端。有关安装说明，请参阅“其他信息”部分。 | DevOps | 
| 挂载 Amazon EFS 文件系统。 | 在本地和 EC2 实例上安装 Amazon EFS 文件系统。在每台服务器上，创建一个用于存储备份的目录，然后使用挂载目标端点挂载文件系统。有关示例，请参阅“其他信息”部分。 | DevOps | 

### 生成 MySQL 源数据库的备份
<a name="make-a-backup-of-the-mysql-source-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 Percona XtraBackup。 | 在本地数据库服务器上安装 Percona XtraBackup 2.3 或 2.4（取决于您的 MySQL 数据库的版本）。有关安装链接，请查看“相关资源”部分。 | 数据库管理员 | 
| 计数源数据库中的架构和表。 | 收集并记下 MySQL 源数据库中架构和对象的数量。迁移后，您将使用这些计数来验证 Aurora MySQL 数据库。 | 数据库管理员 | 
| （可选）记下源数据库中最新的二进制日志序列。 | 如果要在源数据库和 Aurora MySQL 之间建立二进制日志复制以最大限度地减少停机时间，请执行此步骤。必须启用日志箱，且 server\$1id 必须是唯一的。在启动备份之前，请记下源数据库中当前的二进制日志序列。如果您计划仅使用完整备份，请在完整备份之前执行此步骤。如果您计划在完整备份后进行增量备份，请先执行此步骤，然后再在 Aurora MySQL 数据库实例上恢复最终增量备份。 | 数据库管理员 | 
| 创建 MySQL 源数据库的完整备份。 | 使用 Percon XtraBackup a 对 MySQL 源数据库进行完整备份。有关完整备份和增量备份的命令示例，请参阅“其他信息”部分。 | 数据库管理员 | 
| （可选）使用 Percon XtraBackup a 进行增量备份。 | 增量备份可用于减少将源数据库与 Aurora MySQL 同步所需二进制日志量。大型和事务密集型数据库可能会在备份期间生成大量二进制日志。通过进行增量备份并将其存储在共享的 Amazon EFS 文件系统上，您可以显著缩短备份和上传数据库的时间。有关详细信息，请参阅“其他信息”部分。继续进行增量备份，直到准备好开始向 Aurora 的迁移过程。 | 数据库管理员 | 
| 准备备份。 | 在此步骤中，将事务日志应用于备份期间传输中的事务的备份。继续对每个增量备份应用事务日志 (--apply-log-only) 以合并除上次备份之外的备份。有关示例，请参阅“其他信息”部分。完成此步骤后，完整的合并备份将位于 \$1/<efs\$1mount\$1name>/fullbackup。 | 数据库管理员 | 
| 压缩并拆分最终合并的备份。 | 准备好最终的合并备份后，使用 tar、zip 和 split 命令创建较小的备份压缩文件。有关示例，请参阅“其他信息”部分。 | 数据库管理员 | 

### 将备份恢复到 Aurora MySQL 数据库集群
<a name="restore-the-backup-to-an-aurora-mysql-db-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将备份文件上传到 Amazon S3。 | 存储备份文件的 Amazon EFS 文件系统同时安装在本地数据库和 EC2 实例上，因此备份文件随时可供 EC2 实例使用。<bucket\$1name>使用安全外壳 (SSH) 连接到 EC2 实例，然后将压缩后的备份文件上传到新的或现有的 S3 存储桶；例如：aws s3 sync \$1/ <efs\$1mount\$1name>/fullbackup s3: ///fullbackup s3: //fullbackup。有关其他详细信息，请查看“相关资源”部分的链接。 | AWS DevOps | 
| 为 Aurora 创建服务角色以访问 Amazon S3。 | 创建具有信任“rds.amazonaws.com”的 IAM 角色和一个允许 Aurora 访问存储备份文件的 S3 存储桶的策略。所需的权限是 ListBucket GetObject、和 GetObjectVersion。 | AWS DevOps | 
| 为 Aurora 创建联网配置。 | 创建一个集群数据库子网组，该子网组具有至少两个可用区和一个允许对源数据库进行出站连接的子网路由表配置。创建一个安全组，允许对本地数据库进行出站连接，并允许管理员连接到 Aurora 数据库集群。有关更多信息，请参阅“相关资源”部分中的链接。 | AWS DevOps/database 管理员 | 
| 将备份恢复到 Aurora MySQL 数据库集群。 | 通过上传到 Amazon S3 的备份恢复数据。指定源数据库的 MySQL 版本，提供上传备份文件的 S3 存储桶名称和文件夹路径前缀（例如，“其他信息”部分中的示例为“fullbackup”），并提供您为授权 Aurora 访问 Amazon S3 而创建的 IAM 角色。 | AWS DevOps/database 管理员 | 
| 验证 Aurora MySQL 数据库。 | 根据您从源数据库获得的计数来验证已恢复的 Aurora 数据库集群中的架构和对象计数。 | 数据库管理员 | 
| 设置二进制日志复制。 | 在创建恢复到 Aurora 数据库集群的最后一次备份之前，请使用您之前记下的二进制日志序列。在源数据库上创建复制用户，然后按照“其他信息”部分中的说明提供相应的权限，在 Aurora 上启用复制，并确认复制已同步。 | AWS DevOps/database 管理员 | 

## 相关资源
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-resources"></a>

**创建 Amazon EFS 文件系统**
+ [创建安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups)（Amazon VPC 文档）
+ [传输网关 VPN 连接](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpn-attachments.html)（Amazon VPC 文档）
+ [使用 AWS Transit Gateway 扩展 VPN 吞吐量](https://aws.amazon.com/blogs/networking-and-content-delivery/scaling-vpn-throughput-using-aws-transit-gateway/)（联网和内容交付博客）
+ [创建 Amazon EFS 文件系统](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step1-efs)（Amazon EFS 文档）
+ [创建挂载目标](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)（Amazon EFS 文档）
+ [加密静态数据](https://docs.aws.amazon.com/efs/latest/ug/encryption-at-rest.html)（Amazon EFS 文档）

**挂载 EFS 文件系统**
+ 亚马逊@@ [的 IAM 角色 EC2（亚马逊](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) EC2 文档）
+ [启动亚马逊 EC2 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance)（亚马逊 EC2 文档）
+ [安装 NFS 客户端](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step4-install-nfs)（Amazon EFS 文档）
+ [在本地客户端上安装 Amazon EFS 文件系统](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step3-connect)（Amazon EFS 文档）
+ [安装 EFS 文件系统](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)（Amazon EFS 文档）

**创建 MySQL 源数据库的备份**
+ [安装 Percona XtraBackup 2.3](https://www.percona.com/doc/percona-xtrabackup/2.3/installation.html)（Per XtraBackup cona 文档）
+ [安装 Percona XtraBackup 2.4](https://www.percona.com/doc/percona-xtrabackup/2.4/installation.html)（Per XtraBackup cona 文档） 
+ [设置复制主配置](https://dev.mysql.com/doc/refman/5.7/en/replication-howto-masterbaseconfig.html)（MySQL 文档）
+ [将数据从外部 MySQL 数据库迁移到 Aurora MySQL 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html)（Aurora 文档）
+ [增量备份](https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/incremental_backup.html)（Percona 文档 XtraBackup ）

**将备份恢复到 Amazon Aurora MySQL**
+ [创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#create-bucket-intro)（Amazon S3 文档）
+ [使用 SSH 连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)（Amazon EC2 文档）
+ [配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)（AWS CLI 文档）
+ [同步命令](https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html)（AWS CLI 命令参考）
+ [创建 IAM policy 以访问 Amazon S3 资源](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.html)（Aurora 文档）
+ [数据库集群先决条件](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html#Aurora.CreateInstance.Prerequisites)（Aurora 文档）
+ [使用数据库子网组](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#USER_VPC.Subnets)（Aurora 文档）
+ [为私有数据库实例创建 VPC 安全组](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html#CHAP_Tutorials.WebServerDB.CreateVPC.SecurityGroupDB)（Aurora 文档）
+ [从 S3 存储桶恢复 Aurora MySQL 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3.Restore)（Aurora 文档）
+ [使用 MySQL 或其他 Aurora 数据库集群设置复制](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.html#AuroraMySQL.Replication.MySQL.SettingUp)（Aurora 文档）
+ [mysql.rds\$1set\$1external\$1master procedure](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_set_external_master.html)（Amazon RDS 上的 MySQL 参考）
+ [mysql.rds\$1start\$1replication procedure](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_start_replication.html)（Amazon RDS 上的 MySQL SQL 参

**其他参考资料**
+ [将数据从外部 MySQL 数据库迁移到 Aurora MySQL 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html)（Aurora 文档）
+ [MySQL 服务器下载](https://downloads.mysql.com/archives/community/)（Oracle 网站）

**教程和视频**
+  [使用 Amazon S3 将 MySQL 数据迁移到 Aurora MySQL 数据库集群](https://aws.amazon.com/premiumsupport/knowledge-center/migrate-mysql-aurora-innobackup/)（AWS Knowledge Center）
+  [Amazon EFS 设置和挂载](https://www.youtube.com/watch?v=NR8rVsSn_dY)（视频）

## 附加信息
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-additional"></a>

**安装 NFS 客户端**
+ 如果您使用的是 Red Hat 或类似的 Linux 操作系统，请使用以下命令： 

```
$ sudo yum -y install nfs-utils
```
+ 如果您使用的是 Ubuntu 或类似的 Linux 操作系统，请使用以下命令： 

```
$ sudo apt-get -y install nfs-common
```

有关更多信息，请参阅 Amazon EFS 文档中的[演练](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step4-install-nfs)。

**挂载 Amazon EFS 文件系统**

使用命令：

```
mkdir ~/<efs_mount_name>
$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-IP:/ ~/<efs_mount_name>
```

有关更多信息，请参阅 Amazon EFS 文档中的[演练](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step3-connect)和[挂载 EFS 文件系统](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)。

**生成 MySQL 源数据库的备份**

*完整备份*

使用如下命令，该命令获取备份，将其压缩，然后将其拆分为每个大小 1 GB 的小块：

```
xtrabackup --backup --user=dbuser --password=<password> --binlog-info=AUTO --stream=tar --target-dir=~/<efs_mount_name>/fullbackup | gzip - | split -d --bytes=1024MB - ~/<efs_mount_name>/fullbackup/backup.tar.gz &
```

如果您计划在完整备份后进行后续增量备份，请不要压缩和拆分备份。使用类似于以下内容的命令：

```
xtrabackup --backup --user=dbuser --password=<password> --target-dir=~/<efs_mount_name>/fullbackup/
```

*增量备份*

使用完整备份路径作为 `--incremental-basedir` 参数；例如：

```
xtrabackup --backup --user=dbuser --password=<password> --target-dir=~/<efs_mount_name>/incremental/backupdate --incremental-basedir=~/<efs_mount_name>/fullbackup
```

其中 *basedir* 是完整备份和 xtrabackup\$1checkpoints 文件的路径。

有关更多信息，请参阅 Aurora 文档中的[将数据从外部 MySQL 数据库迁移到 Amazon Aurora MySQL 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html)。

**准备备份**

要准备完整备份，请执行以下操作：

```
xtrabackup --prepare --apply-log-only --target-dir=~/<efs_mount_name>/fullbackup
```

要准备增量备份，请执行以下操作：

```
xtrabackup --prepare --apply-log-only --target-dir=~/<efs_mount_name>/fullbackup --incremental-dir=~/<efs_mount_name>/incremental/06062020
```

要准备最终备份，请执行以下操作：

```
xtrabackup --prepare --target-dir=~/<efs_mount_name>/fullbackup --incremental-dir=~/<efs_mount_name>/incremental/06072020
```

有关更多信息，请参阅 Percona XtraBackup 文档中的[增量备份](https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/incremental_backup.html)。

**压缩和拆分合并的备份**

要将合并的备份压缩到 \$1/<efs\$1mount\$1name>/fullbackup，请执行以下操作：

```
tar -zcvf <backupfilename.tar.gz> ~/<efs_mount_name>/fullbackup
```

要拆分备份，请执行以下操作：

```
split -d -b1024M --verbose  <backupfilename.tar.gz> <backupfilename.tar.gz>
```

**设置二进制日志复制**

要在源数据库上创建复制用户并提供相应的权限，请执行以下操作：

```
CREATE USER 'repl_user'@'' IDENTIFIED BY ''; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'';
```

要通过连接到 Aurora 数据库集群在 Aurora 上启用复制，请在数据库集群参数组中启用二进制日志。设置 `binlog_format = mixed`（首选混合模式）。此更改要求您重新启动实例才能应用更新。

```
CALL mysql.rds_set_external_master ('sourcedbinstanceIP', sourcedbport, 'repl_user', '', 'binlog_file_name', binlog_file_position, 0); CALL mysql.rds_start_replication;
```

要确认复制是否处于同步状态，请执行以下操作：

```
SHOW Slave Status \G;
```

**落后秒数主**字段显示 Aurora 与本地数据库相比落后了多远。

# 使用 AWS App2Container 将本地 Java 应用程序迁移到 AWS
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container"></a>

*Dhananjay Karanjkar，Amazon Web Services*

## Summary
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-summary"></a>

AWS App2Container（A2C）是一款命令行工具，无需更改代码即可帮助将虚拟机上运行的现有应用程序转换至容器。A2C 发现服务器上运行的应用程序、识别依赖项并生成相关构件，以便无缝部署到 Amazon Elastic Container Service (Amazon ECS) 和 Amazon Elastic Kubernetes Service (Amazon EKS)。

此模式提供了通过 Worker 计算机，使用 App2Container 将部署在应用程序服务器上的本地 Java 应用程序远程迁移到 AWS Fargate 或 Amazon EKS 的步骤。 

Worker 计算机可用于以下用例：
+ 运行 Java 应用程序的应用程序服务器上不允许安装 Docker，或者安装 Docker 不可用。
+ 您必须管理部署在不同物理或虚拟服务器上的多项应用程序迁移。

此模式使用 AWS CodeCommit AWS CodePipeline、和 AWS CodeBuild。

## 先决条件和限制
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-prereqs"></a>

**先决条件**
+ Java 应用程序在 Linux 服务器上运行的应用程序服务器
+ 装有 Linux 操作系统的 Worker 计算机
+ 至少有 20 GB 可用磁盘空间的 Worker 计算机

**限制**
+ 并非所有应用程序都受支持。有关更多信息，请参阅[支持的应用程序（适用于 Linux）](https://docs.aws.amazon.com/app2container/latest/UserGuide/supported-applications.html)。

## 架构
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-architecture"></a>

**源技术堆栈**
+ 在 Linux 服务器运行的 Java 应用程序

**目标技术堆栈**
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodeDeploy
+ AWS CodePipeline
+ Amazon Elastic Container Registry
+ AWS Fargate

**目标架构**

![\[AWS 上本地 Java 应用程序的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/61ed65a0-fab2-4fc8-8531-18bfd56a25b3/images/602cde7b-ab0c-46a5-8c37-afe304adf061.png)


 

## 工具
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-tools"></a>

**工具**
+ [AWS App2Container](https://docs.aws.amazon.com/app2container/latest/UserGuide/what-is-a2c.html) – AWS App2Container（A2C）是一款命令行工具，可帮助您直接迁移在本地部署的数据中心或在虚拟机上运行的应用程序，以便它们在由 Amazon ECS 或 Amazon EKS 托管的容器中运行。
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) — AWS CodeBuild 是一项完全托管的云端构建服务。 CodeBuild 编译您的源代码、运行单元测试并生成可随时部署的工件。
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) — AWS CodeCommit 是一项由 Amazon Web Services 托管的版本控制服务，您可以使用它来私下存储和管理云中的资产（例如文档、源代码和二进制文件）。
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) — AWS CodePipeline 是一项持续交付服务，可用于对发布软件所需的步骤进行建模、可视化和自动化。
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) – Amazon Elastic Container Service (Amazon ECS) 是一项可扩展性高的快速容器管理服务，可用于运行、停止和管理集群上的容器。
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) – Amazon Elastic Container Registry (Amazon ECR) 是一项 AWS 托管容器映像注册表服务，它安全、可扩展且可靠。
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) – Amazon Elastic Kubernetes Service (Amazon EKS) 是一项托管服务，可让您在 AWS 上轻松运行 Kubernetes，而无需安装、操作和维护您自己的 Kubernetes 控制面板或节点。
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) — AWS Fargate 是一项可以与 Amazon ECS 一起使用的技术，无需管理服务器或亚马逊弹性计算云 (Amazon) 实例集群即可运行容器。 EC2使用 Fargate，您不必再预配置、配置或扩展虚拟机集群即可运行容器。

## 操作说明
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-epics"></a>

### 设置凭证
<a name="set-up-credentials"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建访问应用程序服务器的密钥。 | 要从 Worker 计算机远程访问应用程序服务器，请在 AWS Secrets Manager 中创建密钥。对于您的机密，您可以使用 SSH 私有密钥或证书和 SSH 私有密钥。有关更多信息，请参阅[管理 AWS App2Container 的密钥](https://docs.aws.amazon.com/app2container/latest/UserGuide/manage-secrets.html)。 | DevOps，开发者 | 

### 设置 Worker 计算机
<a name="set-up-the-worker-machine"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 tar 文件。 | 运行 `sudo yum install -y tar`。 | DevOps，开发者 | 
| 安装 Amazon CLI。 | 要安装 Amazon 命令行界面（AWS CLI），请运行 `curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"`。 解压缩 `awscliv2.zip`。运行 `sudo ./aws/install`。 | DevOps，开发者 | 
| 安装 App2Container。 | 运行以下 命令：`curl -o AWSApp2Container-installer-linux.tar.gz https://app2container-release-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/AWSApp2Container-installer-linux.tar.gz``sudo tar xvf AWSApp2Container-installer-linux.tar.gz``sudo ./install.sh` | DevOps，开发者 | 
| 配置这些配置文件。 | 要配置 AWS 默认配置文件，请运行 `sudo aws configure`。要配置已命名的 AWS 默认配置文件，请运行 `sudo aws configure --profile <profile name>`。 | DevOps，开发者 | 
| 安装 Docker。 | 运行以下命令。`sudo yum install -y docker``sudo systemctl enable docker & sudo systemctl restart docker` |  | 
| 初始化 App2Container。 | 要初始化 App2Container，您需要以下信息：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-on-premises-java-applications-to-aws-using-aws-app2container.html)运行 `sudo app2container init`。 | DevOps，开发者 | 

### 配置 Worker 计算机
<a name="configure-the-worker-machine"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 Worker 计算机，以远程连接并在应用程序服务器上运行 App2Container 命令。 | 要配置 Worker 计算机，需要以下信息：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-on-premises-java-applications-to-aws-using-aws-app2container.html)运行 `sudo app2container remote configure`。 | DevOps，开发者 | 

### 发现、分析和提取 Worker 计算机上的应用程序
<a name="discover-analyze-and-extract-applications-on-the-worker-machine"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 探索本地 Java 应用程序。 | 要远程发现应用程序服务器上运行的所有应用程序，请运行以下命令。`sudo app2container remote inventory --target <FQDN/IP of App server>`此命令生成 `inventory.json` 中已部署应用程序的列表。 | 开发者， DevOps | 
| 分析所发现的应用程序。 | 要通过使用在清单阶段获得的 application-id 来远程分析每个应用程序，请运行以下命令。`sudo app2container remote analyze --application-id <java-app-id> --target <FQDN/IP of App Server>`这将在工作区位置生成 `analysis.json` 文件。生成此文件后，您可根据需要更改容器化参数。 | 开发者， DevOps | 
| 提取分析的应用程序。 | 要为分析的应用程序生成应用程序存档，请远程运行以下命令，这将在工作区位置生成 tar 包。`sudo app2container remote extract --application-id <application id> --target <FQDN/IP of App Server>`提取的构件可以在本地 Worker 计算机上生成。 | 开发者， DevOps | 

### 在 Worker 计算机上对提取的构件进行容器化
<a name="containerize-the-extracted-artifacts-on-the-worker-machine"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 对提取的构件进行容器化。 | 运行以下命令，将上一步中提取的构件容器化。`sudo app2container containerize --input-archive <tar bundle location on worker machine>` | 开发者， DevOps | 
| 最终确定目标。 | 要最终确定目标，请打开 `containerize` 命令运行时创建的 `deployment.json`。要将 AWS Fargate 指定为目标，请将 `createEcsArtifacts` 设置为 `true`。要将 Amazon EKS 设置为目标，请将 `createEksArtifacts` 设置为 true。 | 开发者， DevOps | 

### 生成和预调配 AWS 构件
<a name="generate-and-provision-aws-artifacts"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Worker 计算机上生成 AWS 部署项目。 | 要生成部署构件，请运行以下命令。`sudo app2container generate app-deployment --application-id <application id>`这将在工作空间中生成 `ecs-master.yml` AWS CloudFormation 模板。 | DevOps | 
| 预调配构件。 | 要进一步配置生成的项目，请运行以下命令部署 AWS CloudFormation 模板。`aws cloudformation deploy --template-file <path to ecs-master.yml> --capabilities CAPABILITY_NAMED_IAM --stack-name <application id>–ECS` | DevOps | 
| 生成管线。 | 根据您的需求，修改在上一个情节中创建的 `pipeline.json`。然后运行 `generate pipeline` 命令以生成管线部署构件。 | DevOps | 

## 相关资源
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-resources"></a>
+ [什么是 App2Container？](https://docs.aws.amazon.com/app2container/latest/UserGuide/what-is-a2c.html)
+ [AWS App2Container 博客文章](https://aws.amazon.com/blogs/aws/aws-app2container-a-new-containerizing-tool-for-java-and-asp-net-applications/)
+ [AWS CLI 配置基础知识](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)
+ [Amazon ECS 的 Docker 基本信息](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)
+ [Docker 命令](https://docs.docker.com/engine/reference/commandline/cli/)

# 在 AWS 大型迁移中迁移共享文件系统
<a name="migrate-shared-file-systems-in-an-aws-large-migration"></a>

*Amit Rudraraju、Sam Apa、Bheemeswararao Balla、Wally Lu 和 Sanjeev Prakasam，Amazon Web Services*

## Summary
<a name="migrate-shared-file-systems-in-an-aws-large-migration-summary"></a>

迁移 300 台或更多服务器时，就被视为*大规模迁移*。大规模迁移的目的是将工作负载从其现有的本地数据中心迁移到 AWS 云，而这些项目通常侧重于应用程序和数据库工作负载。但是，共享文件系统需要集中精力，并制定单独的迁移计划。此模式描述了共享文件系统的迁移进程，并提供了在大规模迁移项目中成功迁移共享文件系统的最佳实践。

*共享文件系统* (SFS)，也称为*网络*或*集群*文件系统，是装载到多个服务器上的文件共享。共享文件系统可通过 Network File System (NFS)、Common Internet File System (CIFS) 或 Server Message Block (SMB)等协议进行访问。

这些系统不是使用标准迁移工具进行迁移的， AWS Application Migration Service 例如，它们既不是专用于要迁移的主机，也不是表示为块设备。尽管大多数主机依赖项都为透明迁移，但依赖文件系统的协调和管理必须分开处理。

您可通过下几个阶段迁移共享文件系统：发现、规划、准备、割接和验证。使用此模式和随附的工作簿，您可以将共享文件系统迁移到 AWS 存储服务，例如亚马逊弹性文件系统（Amazon EFS）、亚马逊 FSx 版 NetApp ONTAP 或亚马 FSx 逊 Windows 文件服务器。要传输文件系统，您可以使用 AWS DataSync 或第三方工具，例如 NetApp SnapMirror。

**注意**  
这种模式是 AWS 规范性指南系列的一部分，该系列讲述了[向的大规模迁移。 AWS 云](https://aws.amazon.com/prescriptive-guidance/large-migrations/)此模式包括最佳实践和说明，用于将服务器 SFSs 纳入波浪计划。如果您要在大型迁移项目之外迁移一个或多个共享文件系统，请参阅 [Amazon E](https://docs.aws.amazon.com/efs/latest/ug/trnsfr-data-using-datasync.html) FS、Amazon for [Windows 文件服务器和 Amazon FSx ](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/migrate-to-fsx.html) for [ NetApp ONTAP AWS](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/migrating-fsx-ontap.html) 文档中的数据传输说明。 FSx 

## 先决条件和限制
<a name="migrate-shared-file-systems-in-an-aws-large-migration-prereqs"></a>

**先决条件**

先决条件可能会不同，具体取决于您的源和目标共享文件系统以及您的用例。最常见的条件如下：
+ 活跃 AWS 账户的.
+ 您已完成了大规模迁移项目的应用程序组合发现，并开始制定波次计划。有关更多信息，请参阅[适用于 AWS 大型迁移的投资组合手册](https://docs.aws.amazon.com/prescriptive-guidance/latest/large-migration-portfolio-playbook/welcome.html)。
+ 虚拟私有云 (VPCs) 和安全组，允许本地数据中心和您的 AWS 环境之间的入口和出口流量。有关更多信息，请参阅[网络到 Amazon VPC 的连接选项](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)和[AWS DataSync 网络](https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html)要求。
+ 创建 AWS CloudFormation 堆栈的权限或创建 Amazon EFS 或亚马逊 FSx 资源的权限。有关更多信息，请参阅[CloudFormation 文档](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)、[Amazon EFS 文档](https://docs.aws.amazon.com/efs/latest/ug/security-iam.html)或[亚马逊 FSx 文档](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/security-iam.html)。
+ 如果您使用执行 AWS DataSync 迁移，则需要以下权限：
  + 向 Amazon Logs 日志组发送 CloudWatch 日志的权限。 AWS DataSync 有关更多信息，请参阅[允许将日志上传 DataSync 到 CloudWatch 日志组](https://docs.aws.amazon.com/datasync/latest/userguide/monitor-datasync.html#cloudwatchlogs)。
  + 访问 CloudWatch 日志组的权限。有关更多信息，请参阅[管理 CloudWatch 日志资源访问权限概述](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html)。
  + 在中创建代理和任务的权限 DataSync。有关更多信息，请参阅[使用所需的 IAM 权限 AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/permissions-requirements.html)。

**限制**
+ 这种模式旨在 SFSs 作为大型迁移项目的一部分进行迁移。它包括最佳实践和说明，用于 SFSs 将其纳入迁移应用程序的浪潮计划。如果您要在大型迁移项目之外迁移一个或多个共享文件系统，请参阅 [Amazon E](https://docs.aws.amazon.com/efs/latest/ug/trnsfr-data-using-datasync.html) FS、Amazon for [Windows 文件服务器和 Amazon FSx ](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/migrate-to-fsx.html) for [ NetApp ONTAP AWS](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/migrating-fsx-ontap.html) 文档中的数据传输说明。 FSx 
+ 这种模式基于常用的架构、服务与迁移模式。但是，大规模迁移项目和策略可能会因组织而异。您可能需要根据自己的要求自定义此解决方案或工作簿。

## 架构
<a name="migrate-shared-file-systems-in-an-aws-large-migration-architecture"></a>

**源技术堆栈**

下列一个或多个：
+ Linux (NFS) 文件服务器
+ Windows (SMB) 文件服务器
+ NetApp 存储阵列
+ Dell EMC Isilon 存储阵列

**目标技术堆栈**

下列一个或多个：
+ Amazon Elastic File System
+  FSx 适用于 NetApp ONTAP 的亚马逊
+  FSx 适用于 Windows 文件服务器的亚马逊

**目标架构**

![\[使用 AWS 将本地共享文件系统迁移 DataSync 到 AWS 的架构图。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/a30cf791-7a8a-4f71-8927-bc61f3b332f2/images/13232433-7d33-44c8-8998-b720f33f67b3.png)


此图显示以下流程：

1. 您可以使用 AWS Direct Connect 或之 AWS 服务 类的方法在本地数据中心和之间建立连接 AWS Site-to-Site VPN。 AWS 云 

1. 您在本地数据中心安装 DataSync 代理。

1. 根据您的波浪计划，您可以使用 DataSync 将数据从源共享文件系统复制到目标 AWS 文件共享。

**迁移阶段**

下图介绍了在大规模迁移项目中迁移 SFS 的阶段和高级步骤。

![\[将共享文件系统迁移至 AWS 的五个阶段：发现、规划、准备、割接和验证。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/a30cf791-7a8a-4f71-8927-bc61f3b332f2/images/f1e0c94d-0eea-46a8-bdec-3297b34c1d43.png)


此模式的[操作说明](#migrate-shared-file-systems-in-an-aws-large-migration-epics)部分包含有关如何完成迁移以及使用所附工作簿的详细说明。以下是此分阶段方法步骤的高度概述。


| 
| 
| 阶段 | Steps | 
| --- |--- |
| 发现 | 1. 使用发现工具，您可收集有关共享文件系统的数据，包含服务器、挂载点和 IP 地址。2. 使用配置管理数据库 (CMDB) 或迁移工具，您可收集有关服务器的详细信息，包含有关迁移波次、环境、应用程序所有者、IT 服务管理 (ITSM) 服务名称、组织单位和应用程序 ID 的信息。 | 
| 规划 | 3. 使用收集到的有关 SFSs 和服务器的信息，创建 SFS 波浪计划。4. 使用生成工作表中的信息，为每个 SFS 选择目标 AWS 服务 和迁移工具。 | 
| 准备 | 5. 在 Amazon EFS、 FSx 适用于 NetApp ONTAP 的亚马逊或适用于 Windows 文件服务器 FSx 的亚马逊中设置目标基础架构。6. 设置数据传输服务，例如 DataSync，然后开始初始数据同步。初始同步完成后，您可将重复同步设置为按计划运行。7. 使用有关目标文件共享的信息 (例如 IP 地址或路径) 更新 SFS 波次计划。 | 
| 割接 | 8. 停止主动访问源 SFS 的应用程序。9. 在数据传输服务中，执行最终数据同步。10. 同步完成后，通过查看日志中的 CloudWatch 日志数据来验证同步是否完全成功。 | 
| 验证 | 11. 在服务器上，将挂载点更改为新 SFS 路径。12. 重新启动和验证应用程序。 | 

## 工具
<a name="migrate-shared-file-systems-in-an-aws-large-migration-tools"></a>

**AWS 服务**
+ [Amazon CloudWatch Lo](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) gs 可帮助您集中所有系统和应用程序的日志， AWS 服务 这样您就可以监控它们并安全地将其存档。
+ [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)是一项在线数据传输和发现服务，可帮助您在 AWS 存储服务之间移动文件或对象数据。
+ [Amazon Elastic File System（Amazon EFS）](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)可帮助您在 AWS 云中创建和配置共享文件系统。
+ [Amazon FSx](https://docs.aws.amazon.com/fsx/?id=docs_gateway) 提供的文件系统支持行业标准的连接协议，并提供高可用性和跨 AWS 区域复制功能。

**其他工具**
+ [SnapMirror](https://library.netapp.com/ecmdocs/ECMP1196991/html/GUID-BA1081BE-B2BB-4C6E-8A82-FB0F87AC514E.html)是一种 NetApp 数据复制工具，可将数据从指定的源卷或 [qtre](https://library.netapp.com/ecmdocs/ECMP1154894/html/GUID-8F084F85-2AB8-4622-B4F3-2D9E68559292.html) e 分别复制到目标卷或 qtree。您可以使用此工具将 NetApp 源文件系统迁移到 Amazon FSx for NetApp ONTAP。
+ [Robocopy](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy) 是 *Roboost File Copy* 的缩写，是 Windows 的命令行目录和命令。您可以使用此工具将 Windows 源文件系统迁移到亚马逊 Window FSx s 文件服务器版。

## 最佳实践
<a name="migrate-shared-file-systems-in-an-aws-large-migration-best-practices"></a>

**波次规划方法**

在为大规模迁移项目规划波次时，请考虑延迟和应用程序性能。当 SFS 和依赖应用程序在不同的位置运行时，例如一个在云端，一个在本地数据中心，可能会增加延迟并影响应用程序性能。创建波次计划时可用的选项如下：

1. **在同一波中迁移 SFS 和所有依赖项服务器** — 这种方法可以防止性能问题并最大限度地减少返工，例如多次重新配置挂载点。当应用程序和 SFS 间需要非常低的延迟时，建议使用它。但是，波次规划很复杂，目标通常是从依赖项分组中移除变量，而不是将其添加到依赖项分组中。此外，如果许多服务器访问相同 SFS，则不建议使用这种方法，因为这会使波次过大。

1. **最后一台依赖服务器迁移后迁移 SFS** — 例如，如果多台服务器访问一个 SFS，并且这些服务器计划在第 4、6 和第 7 波中迁移，请安排 SFS 在第 7 波中迁移。

   对于大规模迁移，这种方法通常最合乎逻辑，推荐用于对延迟敏感的应用程序。它降低了数据传输的相关成本。它还可以最大限度地缩短 SFS 和更高级别的应用程序（例如生产）之间的延迟时间，因为更高级别的应用程序通常计划在开发和 QA 应用程序之后最后迁移。

   但是，这种方法仍然需要发现、规划以及敏捷性。您可能需要在较早的波次中迁移 SFS。确认应用程序能够承受从第一个依赖波到包含 SFS 的波次之间的时间段内的额外延迟。与应用程序所有者进行发现会话，并在同一波次中迁移对延迟最敏感的应用程序。如果在迁移依赖应用程序后发现性能问题，请快速调整以尽快迁移 SFS。

1. **在大规模迁移项目结束时迁移 SFS** — 如果延迟并非重要因素，例如不经常访问 SFS 中的数据或对应用程序性能不重要时，建议使用这种方法。这种方法简化了迁移并简化了割接任务。

您可根据应用程序的延迟敏感度来混合这些方法。例如，您可以使用方法 1 或 2 迁移延 SFSs 迟敏感型，然后使用方法 3 迁移其余部分。 SFSs 

**选择 AWS 文件系统服务**

AWS 提供多种用于文件存储的云服务。每种方法在性能、规模、可访问性、集成、合规性和成本优化方面有不同的优势和限制。包含合乎逻辑的默认选项。例如，如果你当前的本地文件系统运行的是 Windows Server，那么亚马逊 FSx 版 Windows 文件服务器是默认选择。或者，如果本地文件系统运行的是 NetApp ONTAP，则默认选择 Amazon FSx fo NetApp r ONTAP。但是，您可根据应用程序的要求或实现其他云运营优势来选择目标服务。有关更多信息，请参阅[为您的部署选择合适 AWS 的文件存储服务（Sum](https://d1.awsstatic.com/events/Summits/awsnycsummit/Choosing_the_right_AWS_file_storage_service_for_your_deployment_STG302.pdf)AWS mit 演示文稿）。

**选择迁移工具**

Amazon EFS 和 Amazon FSx 支持使用将共享文件系统迁移到 AWS 云。 AWS DataSync 有关支持的存储系统和服务、优势和用例的更多信息，请参阅[什么是 AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)。有关使用 DataSync 传输文件的过程的概述，请参阅[AWS DataSync 传输的工作原理](https://docs.aws.amazon.com/datasync/latest/userguide/how-datasync-transfer-works.html)。

还有几种第三方工具可用，包含：
+ 如果您选择 Amazon FSx for NetApp ONTAP，则可以使用将文件从本地数据中心迁移 NetApp SnapMirror 到云端。 SnapMirror 使用块级复制，它可以比数据传输过程更快， DataSync 并且可以缩短数据传输的持续时间。有关更多信息，请参阅[使用 NetApp SnapMirror迁移到 FSx ONTAP 版](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/migrating-fsx-ontap-snapmirror.html)。
+ 如果你选择 Amazon f FSx or Windows 文件服务器，则可以使用 Robocopy 将文件迁移到云端。有关更多信息，请参阅[使用 Robocopy 将 FSx 现有文件迁移到 Windows 文件服务器](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/migrate-files-to-fsx.html)。

## 操作说明
<a name="migrate-shared-file-systems-in-an-aws-large-migration-epics"></a>

### 发现
<a name="discover"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备 SFS 发现工作簿。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 迁移工程师，迁移主管 | 
| 收集有关源 SFS 的信息。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 迁移工程师，迁移主管 | 
| 收集有关服务器的信息。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 迁移工程师，迁移主管 | 

### 规划
<a name="plan"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 制定 SFS 波次计划。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 构建主管，割接主管，迁移工程师，迁移主管 | 
| 选择目标 AWS 服务 和迁移工具。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 迁移工程师，迁移主管 | 

### 准备
<a name="prepare"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置目标文件系统。 | 根据波浪计划中记录的详细信息，在目标 AWS 账户、VPC 和子网中设置目标文件系统。有关说明，请参阅以下 AWS 文档：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 迁移工程师，迁移主管，AWS 管理员 | 
| 设置迁移工具和传输数据。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | AWS 管理员，云管理员，迁移工程师，迁移主管 | 
| 更新波次计划。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 迁移工程师、迁移主管 | 

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


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 停止应用程序。 | 如果应用程序或客户端正在源 SFS 主动执行读写操作，请在执行最终数据同步之前将其停止。有关说明，请参阅应用程序文档或停止读写活动的内部流程。例如，请参阅[启动或停止 Web 服务器 (IIS 8)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/jj635851(v=ws.11))（Microsoft 文档）或[使用 systemctl 管理系统服务](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/managing-systemd_configuring-basic-system-settings#managing-system-services-with-systemctl_managing-systemd)（Red Hat 文档）。 | 应用程序所有者、应用程序开发人员 | 
| 执行最后数据传输。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 迁移工程师、迁移主管 | 
| 验证数据传输。 | 如果您使用的是 AWS DataSync，请执行以下操作以验证最终数据传输成功完成：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html)如果您使用第三方工具，请参阅所选迁移工具文档中的数据传输验证说明。 | 迁移工程师，迁移主管 | 

### 验证
<a name="validate"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 重新安装文件系统，并验证应用程序的功能和性能。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | AWS 系统管理员、应用程序所有者 | 

## 故障排除
<a name="migrate-shared-file-systems-in-an-aws-large-migration-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| Microsoft Excel 中的单元格值不会更新。 | 通过拖动填充手柄，复制示例行中的公式。有关更多信息，请参阅 [Windows](https://support.microsoft.com/en-us/office/fill-a-formula-down-into-adjacent-cells-041edfe2-05bc-40e6-b933-ef48c3f308c6) 或 [Mac](https://support.microsoft.com/en-au/office/copy-a-formula-by-dragging-the-fill-handle-in-excel-for-mac-dd928259-622b-473f-9a33-83aa1a63e218) 的说明（Microsoft 支持网站）  | 

## 相关资源
<a name="migrate-shared-file-systems-in-an-aws-large-migration-resources"></a>

**AWS 文档**
+ [AWS DataSync 文档](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)
+ [Amazon EFS 文档](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)
+ [亚马逊 FSx 文档](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/index.html)
+ [大规模迁移到 AWS 云](https://aws.amazon.com/prescriptive-guidance/large-migrations/)
  + [AWS 大型迁移指南](https://docs.aws.amazon.com/prescriptive-guidance/latest/large-migration-guide/welcome.html)
  + [适用于 AWS 大型迁移的投资组合手册](https://docs.aws.amazon.com/prescriptive-guidance/latest/large-migration-portfolio-playbook/welcome.html)

**故障排查**
+ [疑难解答 AWS DataSync 问题](https://docs.aws.amazon.com/datasync/latest/userguide/troubleshooting-datasync.html)
+ [故障排除 Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/troubleshooting.html)
+ [对适用 FSx 于 Windows 的亚马逊文件服务器进行故障排除](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/troubleshooting.html)
+ [ FSx 对亚马逊版 NetApp ONTAP 进行故障排除](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/troubleshooting.html)

## 附件
<a name="attachments-a30cf791-7a8a-4f71-8927-bc61f3b332f2"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/a30cf791-7a8a-4f71-8927-bc61f3b332f2/attachments/attachment.zip)

# 使用 Oracle GoldenGate 平面文件适配器将 Oracle 数据库迁移到 Amazon RDS for Oracle
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters"></a>

*Dhairya Jindani 和 Baji Shaik，Amazon Web Services*

## Summary
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-summary"></a>

Oracle GoldenGate 是一项适用于异构数据库和 IT 环境的实时数据捕获和复制服务。但是，该服务目前不支持适用于 Oracle 的 Amazon Relational Database Service (Amazon RDS)。有关支持的数据库的列表，请参阅 [Oracle GoldenGate 异构数据库](https://docs.oracle.com/goldengate/c1230/gg-winux/GGHDB/12.3-what-is-oracle-goldengate-heterogeneous-databases.htm#GGHDB-GUID-08EAC588-F76C-4E37-BEBA-0DC57B98CA46)（Oracle 文档）。此模式描述了如何使用 Oracle GoldenGate 和 Oracle GoldenGate 平面文件适配器从源 Oracle 数据库生成平面文件，这些文件可以在本地或亚马逊弹性计算云 (Amazon EC2) 实例上。然后，您可以将这些平面文件导入至 Amazon RDS for Oracle 数据库实例。

在这种模式中，您可以使用 Oracle GoldenGate 从源 Oracle 数据库中提取跟踪文件。数据泵将跟踪文件复制到集成服务器（即 Amazon EC2 实例）。在集成服务器上，Oracle GoldenGate 使用平面文件适配器根据跟踪文件的事务数据捕获生成一系列连续的平面文件。Oracle 将数据 GoldenGate 格式化为分隔符分隔的值或长度分隔的值。然后，您可以使用 Oracle SQL\$1Loader 将平面文件导入至目标 Amazon RDS for Oracle 数据库实例。

**目标受众**

这种模式适用于那些对 Oracle GoldenGate 基本构件有经验和了解的人。有关更多信息，请参阅 [Oracle GoldenGate 架构概述](https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_about_gg.htm#GWUAD115)（Oracle 文档）。

## 先决条件和限制
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的.
+ 甲骨文 GoldenGate 许可证。
+ Oracle GoldenGate 适配器的单独许可证。
+ 一种源 Oracle 数据库，可以在本地运行或在 Amazon EC2 实例上运行。
+ 用作集成服务器的 Amazon EC2 Linux 实例。有关更多信息，请参阅[亚马逊 EC2 Linux 实例入门](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)（亚马逊 EC2 文档）。
+ 目标 Amazon RDS for Oracle 数据库实例。有关更多信息，请参阅[创建 Oracle 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)（Amazon RDS 文档）。

**产品版本**
+ Oracle Database Enterprise Edition 版本 10g、11g、12c 或更高版本
+ 甲骨文 GoldenGate 版本 12.2.0.1.1 或更高版本

## 架构
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-architecture"></a>

**源技术堆栈**

Oracle 数据库（本地数据库或在亚马逊 EC2 实例上）

**目标技术堆栈**

Amazon RDS for Oracle

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

![\[使用 Oracle GoldenGate 适配器将 Oracle 数据库迁移到 Amazon RDS for Oracle。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f34961f7-aa9a-41cb-b1ea-522e36ef2f67/images/21ef5177-e669-4591-aced-28d2f22decf2.png)


1. Oracle 从源数据库日志中 GoldenGate 提取跟踪。

1. Data Pump 提取跟踪，并将其迁移至集成服务器。

1. Oracle GoldenGate 平面文件适配器读取轨迹、源定义和数据提取参数。

1. 您可以退出可生成控制文件和平面数据文件的提取。

1. 您可以将平面数据文件迁移到 AWS 云中的 Amazon RDS for Oracle 数据库实例。

## 工具
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-tools"></a>

**AWS 服务**
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在中提供可扩展的计算容量 AWS 云。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [Amazon Relational Database Service（Amazon RDS）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) for Oracle 可帮助您在 AWS 云中设置、操作和扩缩 Oracle 关系数据库。

**其他服务**
+ [Oracle GoldenGate](https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_about_gg.htm#GWUAD110) 是一项服务，可帮助您将数据从一个数据库复制、筛选和转换到另一个异构数据库或另一个目标拓扑（例如平面文件）。
+ [Oracle GoldenGate 应用程序适配器](https://docs.oracle.com/goldengate/gg121211/gg-adapter/GADAD/flatfile_config.htm#GADAD424)使 Oracle GoldenGate 能够根据源数据库的跟踪文件中捕获的事务数据生成一系列顺序平面文件和控制文件。这些适配器广泛用于数据仓库应用程序以及专有或旧版应用程序中的提取、转换、加载（ETL）操作。Oracle GoldenGate 执行此捕获并近乎实时地将其应用于异构数据库、平台和操作系统。此类适配器支持不同的输出文件格式，如 CSV 或 Apache Parquet。您可加载此类已生成文件，以便将数据加载至不同的异构数据库。

## 操作说明
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-epics"></a>

### 在源数据库服务器 GoldenGate 上设置 Oracle
<a name="set-up-oracle-goldengate-on-the-source-database-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载甲骨文 GoldenGate。 | 在源数据库服务器上，下载 Oracle GoldenGate 版本 12.2.0.1.1 或更高版本。有关说明，请参阅[下载 Oracle GoldenGate](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA164)（Oracle 文档）。 | 数据库管理员 | 
| 安装甲骨文 GoldenGate。 | 有关说明，请参阅[安装 Oracle GoldenGate](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA162)（Oracle 文档）。 | 数据库管理员 | 
| 设置 Oracle GoldenGate。 | 有关说明，请参阅为 [Oracle 准备数据库 GoldenGate（O](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/setup.htm#GIORA357) racle 文档）。 | 数据库管理员 | 

### 在集成服务器 GoldenGate 上设置 Oracle
<a name="set-up-oracle-goldengate-on-the-integration-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载甲骨文 GoldenGate。 | 在集成服务器上，下载 Oracle GoldenGate 版本 12.2.0.1.1 或更高版本。有关说明，请参阅[下载 Oracle GoldenGate](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA164)（Oracle 文档）。 | 数据库管理员 | 
| 安装甲骨文 GoldenGate。 | 创建目录，设置管理器进程，并为异构环境创建 `defgen`文件。有关说明，请参阅[安装 Oracle GoldenGate](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA162)（Oracle 文档）。 | 数据库管理员 | 

### 更改 Oracle GoldenGate 数据捕获配置
<a name="change-the-oracle-goldengate-data-capture-configuration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备 Oracle GoldenGate 适配器。 | 在集成服务器上，设置 Oracle GoldenGate 适配器软件。执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.html) | 数据库管理员 | 
| 配置数据泵。 | 在源服务器上，配置 Data Pump，以将跟踪文件从源服务器传输至集成服务器。创建数据泵参数文件和跟踪文件目录。有关说明，请参阅[配置平面文件适配器](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-DF13488D-E0E9-497C-8AFF-70B839DE4843.htm#GADAD424)（Oracle 文档）。 | 数据库管理员 | 

### 生成并迁移平面文件
<a name="generate-and-migrate-the-flat-files"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 生成平面文件。 | 创建提取文件和控制文件，然后在集成服务器上启动提取过程。这将提取数据库更改，并将源数据库写入平面文件。有关说明，请参阅[使用平面文件适配器](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-D30CC70D-B90F-4209-BEB5-9BA53EA869EF.htm#GADAD432)（Oracle 文档）。 | 数据库管理员 | 
| 将平面文件加载至目标数据库。 | 将平面文件加载至目标 Amazon RDS for Oracle 数据库实例。有关更多信息，请参阅 [使用 Oracle SQL\$1Loader 导入](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.SQLLoader.html)（Amazon RDS 文档）。 | 数据库管理员 | 

## 问题排查
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| Oracle GoldenGate 平面文件适配器生成错误。 | 有关适配器错误的描述，请参阅 [定位错误消息](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-D30CC70D-B90F-4209-BEB5-9BA53EA869EF.htm#GADAD437)（Oracle 文档）。有关故障排除说明，请参阅[平面文件适配器故障排除](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-CB3D9B2C-49CC-408A-8C00-06E0C7923DD6.htm#GADAD552)（Oracle 文档）。 | 

## 相关资源
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-resources"></a>
+ [安装 Oracle GoldenGate](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA162)（甲骨文文档）
+ [配置 Oracle GoldenGate](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/setup.htm#GIORA357)（甲骨文文档）
+ [了解 Oracle GoldenGate 适配器](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-F9105B02-9836-4F98-99F8-6E9C46D42764.htm#GADAD101)（Oracle 文档）
+ [配置平面文件适配器](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-DF13488D-E0E9-497C-8AFF-70B839DE4843.htm#GADAD424)（Oracle 文档）

# 更改 Python 和 Perl 应用程序以支持数据库从Microsoft SQL Server 迁移至兼容 Amazon Aurora PostgreSQL 的版本
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition"></a>

*Dwarika Patra 和 Deepesh Jayaprakash，Amazon Web Services*

## Summary
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-summary"></a>

此模式描述了将数据库从 Microsoft SQL Server 迁移到 Amazon Aurora PostgreSQL 兼容版时可能需要对应用程序存储库进行的更改。该模式假设这些应用程序基于 Python 或 Perl，并为这些脚本语言提供单独的指令。

将 SQL Server 数据库迁移至兼容 Aurora PostgreSQL 的数据库涉及架构转换、数据库对象转换、数据迁移和数据加载。由于 PostgreSQL 和 SQL Server 之间存在差异（与数据类型、连接对象、语法和逻辑有关），因此最困难的迁移任务是对代码库进行必要的更改，使其能够在 PostgreSQL 中正常运行。

对于基于 Python 的应用程序，连接对象和类分散在整个系统中。此外，Python 代码库可能使用多个库来连接到数据库。如果数据库连接接口发生变化，运行应用程序内联查询的对象也需要更改。

对于基于 Perl 的应用程序，更改涉及连接对象、数据库连接驱动程序、静态和动态内联 SQL 语句以及应用程序如何处理复杂的动态 DML 查询和结果集。

迁移应用程序时，您还可以考虑 AWS 上可能的增强功能，例如使用 Amazon Simple Storage Service (Amazon S3) 访问替换 FTP 服务器。

应用程序迁移过程涉及以下挑战：
+ 连接对象。如果连接对象分散在具有多个库和函数调用的代码中，您可能必须找到一种通用方法来更改它们以支持 PostgreSQL。
+ 记录检索或更新期间的错误或者异常处理。如果对返回变量、结果集或数据帧的数据库进行条件创建、读取、更新和删除 (CRUD) 操作，则任何错误或异常都可能导致应用程序错误并产生级联效应。应通过适当的验证和保存点来仔细处理这些问题。此类保存点之一是调用 `BEGIN...EXCEPTION...END` 块内的大型内联 SQL 查询或数据库对象。
+ 控制事务及其验证。其中包括手动和自动提交与回滚。Perl 的 PostgreSQL 驱动程序要求您始终明确设置自动提交属性。
+ 处理动态 SQL 查询。这需要对查询逻辑和迭代测试有深入的了解，以确保查询按预期工作。
+ 性能。您应该确保代码更改不会导致应用程序性能下降。

此模式详细解释了转换进程。

## 先决条件和限制
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-prereqs"></a>

**先决条件**
+ Python 和 Perl 语法工作知识。
+ SQL Server 和 PostgreSQL 基本技能。
+ 了解现有的应用程序架构。
+ 访问您的应用程序代码、SQL Server 数据库以及 PostgreSQL 数据库。
+ 使用开发、测试和验证应用程序更改的凭证访问 Windows 或 Linux (或其他 Unix)开发环境。
+ 对于基于 Python 的应用程序，您的应用程序可能需要的标准 Python 库，例如用于处理数据帧的 **Pandas**，以及用于数据库连接的 **psycopg2**。**SQLAlchemy**
+ 对于基于 Perl 应用程序，需要带有依赖库或模块的 Perl 包。全面的 Perl 存档网络 (CPAN) 模块可支持大多数应用程序要求。
+ 所有必需依赖自定义库或模块。 
+ 用于对 SQL Server 进行读取访问和 read/write 访问 Aurora 的数据库凭据。
+ PostgreSQL 通过服务和用户验证和调试应用程序更改。
+ 在应用程序迁移期间访问开发工具，例如Visual Studio Code、 Sublime Text 或 **pgAdmin**。

**限制**
+ 某些 Python 或 Perl 版本、模块、库以及包与云环境不兼容。
+ 某些用于 SQL Server 的第三方库和框架无法替换支持 PostgreSQL 迁移。 
+ 性能变化可能需要更改应用程序、内联 Transact-SQL (T-SQL) 查询、数据库函数以及存储过程。
+ PostgreSQL 支持表名、列名和其他数据库对象小写名称。 
+ 某些数据类型（例如 UUID 列）仅以小写形式存储。Python 和 Perl 应用程序必须要处理此类大小写差异。 
+ 必须使用 PostgreSQL 数据库相应文本列的正确数据类型来处理字符编码差异。                               

**产品版本**
+ Python 3.6 或更高版本（使用支持您的操作系统的版本）
+ Perl 5.8.3 或更高版本（使用支持您的操作系统的版本）
+ 兼容 Aurora PostgreSQL 的版本 4.2 或更高版本（查看[详细信息](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html#AuroraPostgreSQL.Updates.20180305.42)）

## 架构
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-architecture"></a>

**源技术堆栈**
+ 脚本(应用程序编程)语言：Python 2.7 或更高版本，或 Perl 5.8 
+ 数据库：Microsoft SQL Server 版本 13
+ 操作系统：Red Hat Enterprise Linux (RHEL) 7 

**目标技术堆栈**
+ 脚本(应用程序编程)语言：Python 3.6 或更高版本，或 Perl 5.8 或更高版本 
+ 数据库：Aurora PostgreSQL-Compatible 4.2
+ 操作系统：RHEL 7 

**迁移架构**

![\[将带有 SQL Server 的 Perl 或 Python 应用程序迁移至兼容 Aurora PostgreSQL\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/b64de64a-bd55-4db7-ba7b-0a2557862af1/images/b8fab3e2-ded5-4f58-86bf-3f645252e9fc.png)


## 工具
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-tools"></a>

**AWS 工具和服务**
+ [Aurora PostgreSQL–Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) 是一个完全托管式、兼容 PostgreSQL 和 ACID 的关系数据库引擎，结合了高端商用数据库的速度和可靠性，同时还具有开源数据库的成本效益。Aurora PostgreSQL 是 PostgreSQL 的直接替代品，可以让您通过简单且经济高效的方式设置、运行和扩展新的和现有的 PostgreSQL 部署。
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它使您能够使用命令行 Shell 中的命令与 Amazon Web Services 交互。

**其他工具**
+ [Python 和 P](https://www.python.org/) [ostgresSQL 数据库连接库，比如 psycopg2 和 [SQLAlchemy](https://www.sqlalchemy.org/)](https://pypi.org/project/psycopg2/)
+ [Perl](https://www.perl.org/) 及其 [DBI 模块](https://metacpan.org/pod/DBD::Pg)
+ [PostgreSQL 交互式终端](https://www.postgresql.org/docs/13/app-psql.html) (psql)

## 操作说明
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-epics"></a>

### 将您的应用程序存储库迁移至 PostgreSQL — 高级步骤
<a name="migrate-your-application-repository-to-postgresql-ndash-high-level-steps"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 按照以下代码转换步骤将您的应用程序迁移至 PostgreSQL。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html)以下操作说明详细说明了 Python 和 Perl 应用程序的一些转换任务。 | 应用程序开发人员 | 
| 为迁移的每个步骤使用清单。 | 将以下内容添加到应用程序迁移的每个步骤（包括最后一步）的清单中：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 应用程序开发人员 | 

### 分析和更新您的应用程序 — Python 代码库
<a name="analyze-and-update-your-application-ndash-python-code-base"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 分析现有的 Python 代码库。 | 您的分析应包含以下内容，以简化应用程序迁移过程：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 应用程序开发人员 | 
| 将您的数据库连接转换至支持 PostgreSQL。 | 大多数 Python 应用程序使用 **pyodbc** 库连接 SQL Server 数据库，如下所示。<pre>import pyodbc<br />....<br />try:<br />    conn_string = "Driver=ODBC Driver 17 for SQL<br />    Server;UID={};PWD={};Server={};Database={}".format (conn_user, conn_password,<br />    conn_server, conn_database)<br />    conn = pyodbc.connect(conn_string)<br />    cur = conn.cursor()<br />    result = cur.execute(query_string)<br />    for row in result:<br />    print (row)<br />except Exception as e:<br />    print(str(e))</pre>将数据库连接转换至支持 PostgreSQL，如下所示。<pre>import pyodbc<br />import psycopg2<br />....<br />try:<br />    conn_string = ‘postgresql+psycopg2://’+<br />    conn_user+’:’+conn_password+’@’+conn_server+’/’+conn_database<br />    conn = pyodbc.connect(conn_string, connect_args={‘options’:’-csearch_path=dbo’})<br />    cur = conn.cursor()<br />    result = cur.execute(query_string)<br />    for row in result:<br />    print (row)<br />except Exception as e:<br />    print(str(e))</pre> | 应用程序开发人员 | 
| 将内联 SQL 查询更改为 PostgreSQL。 | 将您的内联 SQL 查询转换为与 PostgreSQL 兼容的格式。例如，以下 SQL Server 查询从表中检索字符串。<pre>dtype = "type1"<br />stm = ‘"SELECT TOP 1 searchcode FROM TypesTable (NOLOCK)<br />WHERE code="’ + "’" + str(dtype) + "’"<br /># For Microsoft SQL Server Database Connection<br />engine = create_engine(‘mssql+pyodbc:///?odbc_connect=%s’ % urllib.parse.quote_plus(conn_string), connect_args={‘connect_timeout’:login_timeout})<br />conn = engine_connect()<br />rs = conn.execute(stm)<br />for row in rs:<br />    print(row)</pre>转换后，与 PostgreSQL 兼容的内联 SQL 查询如下所示。<pre>dtype = "type1"<br />stm = ‘"SELECT searchcode FROM TypesTable<br />WHERE code="’ + "’" + str(dtype) + "’ LIMIT 1"<br /># For PostgreSQL Database Connection<br />engine = create_engine(‘postgres+psycopg2://%s’ %conn_string, connect_args={‘connect_timeout’:login_timeout})<br />conn = engine.connect()<br />rs = conn.execute(stm)<br />for row in rs:<br />    print(row)</pre> | 应用程序开发人员 | 
| 处理动态 SQL 查询。 | 动态 SQL 可以出现在一个脚本或多个 Python 脚本中。前面的示例展示了如何使用 Python 的字符串替换函数插入变量以构建动态 SQL 查询。另一种方法是在适用的情况下在查询字符串中附加变量。 在以下示例中，查询字符串是根据函数返回的值动态构造的。<pre>query = ‘"SELECT id from equity e join issues i on e.permId=i.permId where e.id’"<br />query += get_id_filter(ids) + " e.id is NOT NULL</pre>这些类型的动态查询在应用程序迁移过程中非常常见。请按照以下步骤处理动态查询：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 应用程序开发人员 | 
| 处理结果集、变量与数据框。 | 对于 Microsoft SQL Server，您可以使用 Python 方法（例如 `fetchone()` 或 `fetchall()`）从数据库中检索结果集。您也可以使用 `fetchmany(size)` 并指定要从结果集中返回的记录数。为此，您可使用 **pyodbc** 连接对象，如以下示例中所示。**pyodbc (Microsoft SQL Server)**<pre>import pyodbc <br />server = 'tcp:myserver.database.windows.net' <br />database = 'exampledb' <br />username = 'exampleusername' <br />password = 'examplepassword' <br />conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)<br />cursor = conn.cursor()<br />cursor.execute("SELECT * FROM ITEMS") <br />row = cursor.fetchone() <br />while row: <br />    print(row[0])<br />    row = cursor.fetchone()</pre>**在 Aurora 中，要执行类似的任务，例如连接到 PostgreSQL 和获取结果集，你可以使用 psycopg2 或。**SQLAlchemy****这些 Python 库提供了连接模块和游标对象来遍历 PostgreSQL 数据库记录，如以下示例所示。**psycopg2（兼容Aurora PostgreSQL）**<pre>import psycopg2<br />query = "SELECT * FROM ITEMS;"<br />//Initialize variables<br />host=dbname=user=password=port=sslmode=connect_timeout=""<br />connstring = "host='{host}' dbname='{dbname}' user='{user}' \<br />password='{password}'port='{port}'".format(host=host,dbname=dbname,\<br />user=user,password=password,port=port) <br />conn = psycopg2.connect(connstring)<br />cursor = conn.cursor()<br />cursor.execute(query)<br />column_names = [column[0] for column in cursor.description]<br />print("Column Names: ", column_names)<br />print("Column values: "<br />for row in cursor:<br />    print("itemid :", row[0])<br />    print("itemdescrption :", row[1])<br />    print("itemprice :", row[3]))</pre>**SQLAlchemy （兼容 Aurora PostgreSQL）**<pre>from sqlalchemy import create_engine<br />from pandas import DataFrame<br />conn_string = 'postgresql://core:database@localhost:5432/exampledatabase'<br />engine = create_engine(conn_string)<br />conn = engine.connect()<br />dataid = 1001<br />result = conn.execute("SELECT * FROM ITEMS")<br />df = DataFrame(result.fetchall())<br />df.columns = result.keys()<br />df = pd.DataFrame()<br />engine.connect()<br />df = pd.read_sql_query(sql_query, engine, coerce_float=False)<br />print("df=", df)</pre> | 应用程序开发人员 | 
| 在迁移期间和迁移之后测试应用程序。 | 测试迁移的 Python 应用程序是持续的过程。由于迁移包括连接对象更改（**psycopg2** 或 **SQLAlchemy**）、错误处理、新功能（数据框）、内联 SQL 更改、批量复制功能（`bcp`而不是`COPY`）和类似更改，因此在应用程序迁移期间和迁移之后都必须对其进行仔细测试。检查：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 应用程序开发人员 | 

### 分析和更新您的应用程序 — Perl 代码库
<a name="analyze-and-update-your-application-ndash-perl-code-base"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 分析现有 Perl 代码库。 | 您的分析应包含以下内容，以简化应用程序迁移过程。您应确定：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 应用程序开发人员 | 
| 转换 Perl 应用程序和 DBI 模块的连接以支持 PostgreSQL。 | 基于Perl的应用程序通常使用 Perl DBI 模块，它是 Perl 编程语言的标准数据库访问模块。您可以为 SQL Server 和 PostgreSQL 使用相同 DBI 模块和不同的驱动程序。有关所需 Perl 模块、安装和其他说明的更多信息，请参阅 [DBD::Pg documentation](https://metacpan.org/pod/DBD::Pg)。以下示例连接到与 Aurora PostgreSQL 兼容的网址 `exampletest-aurorapg-database.cluster-sampleclusture.us-east.-rds.amazonaws.com`。<pre>#!/usr/bin/perl<br />use DBI;<br />use strict;<br />my $driver = "Pg";<br />my $hostname = "exampletest-aurorapg-database-sampleclusture.us-east.rds.amazonaws.com"<br />my $dsn = "DBI:$driver: dbname = $hostname;host = 127.0.0.1;port = 5432";<br />my $username = "postgres";<br />my $password = "pass123";<br />$dbh = DBI->connect("dbi:Pg:dbname=$hostname;host=$host;port=$port;options=$options",<br />      $username,<br />      $password,<br />      {AutoCommit => 0, RaiseError => 1, PrintError => 0}<br />      );</pre> | 应用程序开发人员 | 
| 将内联 SQL 查询更改为 PostgreSQL。 | 您的应用程序可能包含带有 `SELECT`、`DELETE`、`UPDATE` 的内联 SQL 查询，以及包含 PostgreSQL 不支持的查询子句的类似语句。例如，PostgreSQL 中不支持 `TOP` 和 `NOLOCK` 等查询关键字。以下示例说明如何处理 `TOP`、`NOLOCK` 和 Boolean 变量。SQL Server 中：<pre>$sqlStr = $sqlStr<br />. "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id   \<br />FROM active_student_record b WITH (NOLOCK) \<br />INNER JOIN student_contributor c WITH (NOLOCK) on c.contributor_id = b.c_st)</pre>对于 PostgreSQL，请转换为：<pre>$sqlStr = $sqlStr<br />. "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id  \<br />FROM active_student_record b INNER JOIN student_contributor c  \<br />on c.contributor_id = b.c_student_contr_id WHERE b_current_1 is true \<br />LIMIT $numofRecords)"</pre> | 应用程序开发人员 | 
| 处理动态 SQL 查询与 Perl 变量。 | 动态 SQL 查询是在应用程序运行时生成 SQL 语句。这些查询是在应用程序运行时根据某些条件动态构建的，因此直到运行时才知道查询的全文。一个例子是一个金融分析应用程序，它每天分析排名前 10 的股票，并且这些股票每天都在变化。SQL 表是根据最佳执行者创建的，并且直到运行时才知道这些值。假设此示例的内联 SQL 查询被传递给包装函数以获取变量中的结果集，然后变量使用条件来确定表是否存在：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html)下面是变量处理的示例，后面是该用例的 SQL Server 和 PostgreSQL 查询。<pre>my $tableexists = db_read( arg 1, $sql_qry, undef, 'writer');<br />my $table_already_exists = $tableexists->[0]{table_exists};<br />if ($table_already_exists){<br /># do some thing<br />}<br />else {<br /># do something else<br />}</pre>SQL Server：<pre>my $sql_qry = "SELECT OBJECT_ID('$backendTable', 'U') table_exists", undef, 'writer')";</pre>PostgreSQL：<pre>my $sql_qry = "SELECT TO_REGCLASS('$backendTable', 'U') table_exists", undef, 'writer')";</pre>以下示例在内联 SQL 中使用一个** **Perl 变量，该变量使用带有 `JOIN` 的 `SELECT` 语句来获取表的主键和键列的位置。SQL Server：<pre>my $sql_qry = "SELECT column_name', character_maxi mum_length \<br />FROM INFORMATION_SCHEMA.COLUMNS \<br />WHERE TABLE_SCHEMA='$example_schemaInfo' \<br />AND TABLE_NAME='$example_table' \<br />AND DATA_TYPE IN ('varchar','nvarchar');";</pre>PostgreSQL：<pre>my $sql_qry = "SELECT c1.column_name, c1.ordinal_position \<br />FROM information_schema.key_column_usage AS c LEFT \<br />JOIN information_schema.table_constraints AS t1 \<br />ON t1.constraint_name = c1.constraint_name \<br />WHERE t1.table_name = $example_schemaInfo'.'$example_table’ \<br />AND t1.constraint_type = 'PRIMARY KEY' ;";</pre> | 应用程序开发人员 | 

### 对基于 Perl 或 Python 的应用程序进行其他更改以支持 PostgreSQL
<a name="make-additional-changes-to-your-perl-based-or-python-based-application-to-support-postgresql"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将其他 SQL Server 结构转换至 PostgreSQL。 | 以下更改适用于所有应用程序，无论编程语言如何。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 应用程序开发人员 | 

### 提高性能。
<a name="improve-performance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 利用 Amazon Web Services 提高性能。 | 迁移至 Amazon Web Services Cloud 时，您可以完善应用程序和数据库设计以利用 Amazon Web Services。例如，如果来自连接到 Aurora PostgreSQL 兼容数据库服务器的 Python 应用程序的查询比原始 Microsoft SQL Server 查询花费更多时间，您可以考虑将历史数据直接创建到 Amazon Simple Storage 来自 Amazon Simple Storage Service (Amazon S3) 存储桶，并使用基于 Amazon Athena 的 SQL 查询为用户控制面板生成报告和分析数据查询。 | 应用程序开发人员、云架构师 | 

## 相关资源
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-resources"></a>
+ [Perl](https://www.perl.org/)
+ [Perl DBI 模块](https://metacpan.org/pod/DBI)
+ [Python](https://www.python.org/)
+ [psycopg2](https://pypi.org/project/psycopg2/)
+ [SQLAlchemy](https://www.sqlalchemy.org/)
+ [批量复制 - PostgreSQL](https://www.postgresql.org/docs/9.2/sql-copy.html)
+ [批量复制 — Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver15)
+ [PostgreSQL](https://www.postgresql.org/)
+ [使用 Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

## 附加信息
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-additional"></a>

Microsoft SQL Server 和 Aurora PostgreSQL 兼容均符合 ANSI SQL。但是，在将 Python 或 Perl 应用程序从 SQL Server 迁移至 PostgreSQL 时，您仍应注意语法、列数据类型、本地数据库专用函数、批量插入和区分大小写等方面的任何不兼容之处。

以下部分提供有关每个不一致地方的更多信息。

**数据类型比较**

从 SQL Server 到 PostgreSQL 的数据类型更改可能会导致应用程序操作的结果数据出现显着差异。有关数据类型的比较，请参阅 [Sqlines 网站](https://www.sqlines.com/sql-server-to-postgresql)的表格。

**原生或内置 SQL 函数**

SQL Server 和 PostgreSQL 数据库之间的某些函数的行为有所不同。下表提供了对比。


| 
| 
| Microsoft SQL Server | 说明 | PostgreSQL | 
| --- |--- |--- |
| `CAST`  | 将值从一个数据类型转换为另一个数据类型。 | PostgreSQL `type :: operator` | 
| `GETDATE()` | 以某种 `YYYY-MM-DD hh:mm:ss.mmm` 格式返回当前数据库系统的日期和时间。 | `CLOCK_TIMESTAMP` | 
| `DATEADD` | 为日期添加 time/date 间隔。 | `INTERVAL` 表达式 | 
| `CONVERT` | 将值转换为特定数据格式。 | `TO_CHAR` | 
| `DATEDIFF` | 返回两个日期字段相差的天数。 | `DATE_PART` | 
| `TOP` | 限制 `SELECT` 结果集中的行数。 | `LIMIT/FETCH` | 

**匿名区块**

结构化 SQL 查询分为声明、可执行文件以及异常处理等部分。下表比较了 Microsoft SQL Server 和 PostgreSQL 版本的简单匿名块。对于复杂匿名块，我们建议您在应用程序中调用自定义数据库函数。


| 
| 
| Microsoft SQL Server | PostgreSQL | 
| --- |--- |
| <pre>my $sql_qry1=<br />my $sql_qry2 =<br />my $sqlqry = "BEGIN TRAN<br />$sql_qry1 $sql_qry2<br />if @\@error !=0 ROLLBACK<br />TRAN<br />else COMIT TRAN";</pre> | <pre>my $sql_qry1=<br />my $sql_qry2 =<br />my $sql_qry = " DO \$\$<br />BEGIN<br />$header_sql $content_sql<br />END<br />\$\$";</pre> | 

 

**其他区别**
+ **批量插入行：** [Microsoft SQL Server bcp utility](https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver15) 实用程序的 PostgreSQL 等效工具是 [COPY](https://www.postgresql.org/docs/9.2/sql-copy.html)。
+ **区分大小写：**在 PostgreSQL 中，列名区分大小写，因此您必须将 SQL Server 列名转换为小写或大写。当您提取或比较数据，或者将列名放置在结果集或变量中时，这将成为一个因素。以下示例标识了可能以大写或小写形式存储值列。

```
my $sql_qry = "SELECT $record_id FROM $exampleTable WHERE LOWER($record_name) = \'failed transaction\'"; 
```
+ **串联：**SQL Server 使用 `+` 作为字符串连接的运算符，而 PostgreSQL 则使用`||`。
+ **验证：**在 PostgreSQL 的应用程序代码中使用内联 SQL 查询和函数前，应对其进行测试和验证。
+ **ORM 库的包含：**你也可以寻找包含现有数据库连接库，或者用 PynoModb 等 Python ORM 库替换现有数据库连接库[。[SQLAlchemy](https://www.sqlalchemy.org/)](https://pynamodb.readthedocs.io/en/latest/quickstart.html)这将有助于使用面向对象的范例轻松地查询和操作数据库中的数据。

# 按照工作负载分类的迁移模式
<a name="migration-migration-patterns-by-workload-pattern-list"></a>

**Topics**
+ [IBM](migration-migration-patterns-by-workload-ibm-pattern-list.md)
+ [Microsoft](migration-migration-patterns-by-workload-microsoft-pattern-list.md)
+ [不适用](migration-migration-patterns-by-workload-notapplicable-pattern-list.md)
+ [开源](migration-migration-patterns-by-workload-open-source-pattern-list.md)
+ [Oracle](migration-migration-patterns-by-workload-oracle-pattern-list.md)
+ [SAP](migration-migration-patterns-by-workload-sap-pattern-list.md)

# IBM
<a name="migration-migration-patterns-by-workload-ibm-pattern-list"></a>

**Topics**
+ [使用 AWS DMS 将 Db2 数据库从亚马逊迁移 EC2 到兼容 Aurora MySQL](migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.md)
+ [使用日志传送将适用于 LUW 的 Db2 迁移 EC2 到 Amazon 以减少中断时间](migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.md)
+ [通过高可用性灾难恢复将 Db2 for LUW 迁移到 Amazon EC2](migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.md)
+ [使用 AWS DMS 和 AWS SCT 从亚马逊上的 IBM Db2 迁移 EC2 到兼容 Aurora PostgreSQL](migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.md)
+ [在 Amazon 上从 IBM WebSphere 应用程序服务器迁移到 Apache Tomcat EC2](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2.md)

# Microsoft
<a name="migration-migration-patterns-by-workload-microsoft-pattern-list"></a>

**Topics**
+ [加速 Microsoft 工作负载的发现以及向 AWS 的迁移](accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.md)
+ [更改 Python 和 Perl 应用程序以支持数据库从Microsoft SQL Server 迁移至兼容 Amazon Aurora PostgreSQL 的版本](change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.md)
+ [使用微软 Excel 和 Python 为 AWS DMS 任务创建 AWS CloudFormation 模板](create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python.md)
+ [使用 AWS DMS 将 Microsoft SQL Server 数据库导出至 Amazon S3](export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms.md)
+ [从 SQL Server 迁移到 PostgreSQL 时，对 PII 数据实施 SHA1 哈希处理](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [将 EC2 Windows 实例提取并迁移到 AWS Managed Services 账户](ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.md)
+ [将消息队列从 Microsoft Azure 服务总线迁移到 Amazon SQS](migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs.md)
+ [使用 AWS DMS 将微软 SQL Server 数据库从亚马逊迁移 EC2 到亚马逊 DocumentDB](migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms.md)
+ [使用 AWS DMS 和 AWS SCT 将 Microsoft SQL Server 数据库迁移到 Aurora MySQL](migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct.md)
+ [将 .NET 应用程序从 Microsoft Azure 应用服务迁移到 AWS Elastic Beanstalk](migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk.md)
+ [将本地微软 SQL Server 数据库迁移到亚马逊 EC2](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.md)
+ [将本地 Microsoft SQL Server 数据库迁移至 Amazon RDS for SQL Server](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server.md)
+ [使用链接服务器将本地 Microsoft SQL Server 数据库迁移至 Amazon RDS for SQL Server](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers.md)
+ [使用本机备份和还原将本地 Microsoft SQL Server 数据库迁移到 Amazon RDS for SQL Server。](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.md)
+ [使用 AWS DMS 将本地 Microsoft SQL Server 数据库迁移至 Amazon Redshift](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms.md)
+ [使用 AWS SCT 数据提取代理将本地 Microsoft SQL Server 数据库迁移至 Amazon Redshift](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.md)
+ [将本地微软 SQL Server 数据库迁移到 EC2 运行 Linux 的亚马逊上的微软 SQL Server](migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux.md)
+ [使用 Rclone 将数据从 Microsoft Azure Blob 迁移至 Amazon S3](migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone.md)
+ [使用 appcmd.exe 将 IIS 托管的应用程序迁移 EC2 到亚马逊](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [EC2 使用应用程序迁移服务将本地 Microsoft SQL Server 数据库迁移到亚马逊](migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.md)
+ [使用 ACM 将 Windows SSL 凭证迁移到应用程序负载均衡器](migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.md)
+ [在 Amazon Web Services Cloud 中重新托管本地工作负载：迁移核对清单](rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist.md)
+ [解决将 Microsoft SQL Server 迁移至 Amazon Web Services Cloud 后出现的连接错误](resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.md)
+ [使用 Amazon 为 SQL Server Always On FCI 设置多可用区基础架构 FSx](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)

# 不适用
<a name="migration-migration-patterns-by-workload-notapplicable-pattern-list"></a>

**Topics**
+ [在重新托管迁移到的过程中，为防火墙请求创建批准流程 AWS](create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws.md)

# 开源
<a name="migration-migration-patterns-by-workload-open-source-pattern-list"></a>

**Topics**
+ [在 Aurora PostgreSQL 兼容中创建应用程序用户和角色](create-application-users-and-roles-in-aurora-postgresql-compatible.md)
+ [使用并使用和，将 Amazon RDS for Oracle 迁移到适用于 PostgreSQL AWS SCT 的 Amazon RDS AWS DMS AWS CLI CloudFormation](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.md)
+ [使用原生工具将本地 MariaDB 数据库迁移至 Amazon RDS for MariaDB](migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools.md)
+ [将本地 MySQL 数据库迁移至 Amazon RDS for MySQL](migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql.md)
+ [将本地 MySQL 数据库迁移至 Aurora MySQL](migrate-an-on-premises-mysql-database-to-aurora-mysql.md)
+ [将本地 PostgreSQL 数据库迁移到 Aurora PostgreSQL](migrate-an-on-premises-postgresql-database-to-aurora-postgresql.md)
+ [将 Couchbase 服务器数据库迁移到亚马逊 EC2](migrate-couchbase-server-ec2.md)
+ [使用 Auto Scaling 从 IBM WebSphere 应用程序服务器迁移到亚马逊 EC2 上的 Apache Tomcat](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling.md)
+ [使用 pglogical 从 EC2 亚马逊上的 PostgreSQL 迁移到适用于 PostgreSQL 的亚马逊 RDS](migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.md)
+ [使用 AWS App2Container 将本地 Java 应用程序迁移到 AWS](migrate-on-premises-java-applications-to-aws-using-aws-app2container.md)
+ [使用 Percona、A XtraBackup mazon EFS 和 Amazon S3 将本地 MySQL 数据库迁移到 Aurora MySQL](migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3.md)
+ [将 Oracle 外部表迁移到 Amazon Aurora PostgreSQL-Compatible](migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible.md)
+ [重启 RHEL 源服务器 SELinux 后，无需禁用 AWS 复制代理即可自动重启 AWS 复制代理](restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server.md)
+ [使用 pg\$1transport 在两个 Amazon RDS 数据库实例之间传输 PostgreSQL 数据库](transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.md)

# Oracle
<a name="migration-migration-patterns-by-workload-oracle-pattern-list"></a>

**Topics**
+ [将 Oracle 的 VARCHAR2 (1) 种数据类型转换为亚马逊 Aurora PostgreSQL 的布尔数据类型](convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.md)
+ [通过使用兼容 PostgreSQL 的 Aurora 全局数据库来模拟 Oracle 灾难恢复](emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.md)
+ [使用 Oracle SQL Developer 和 AWS SCT 以增量方式从 Amazon RDS for Oracle 迁移至 Amazon RDS for PostgreSQL](incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.md)
+ [使用兼容 Aurora PostgreSQL 的文件编码将 BLOB 文件加载至文本中](load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.md)
+ [使用 AWS DMS 在 SSL 模式下将 Amazon RDS for Oracle 迁移到 Amazon RDS for PostgreSQL](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.md)
+ [将 Amazon RDS for Oracle 数据库迁移到另一个 AWS 区域 数据库 AWS 账户 并 AWS DMS 用于持续复制](migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication.md)
+ [使用 Oracle 数据泵将本地 Oracle 数据库迁移到亚马逊 EC2](migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.md)
+ [使用 Logstash 将本地 Oracle 数据库迁移到亚马逊 OpenSearch 服务](migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash.md)
+ [使用 AWS DMS 和 AWS SCT 将本地 Oracle 数据库迁移至 Amazon RDS for MySQL](migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [将本地 Oracle 数据库迁移到 Amazon RDS for Oracle](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.md)
+ [使用 Oracle 数据泵将本地 Oracle 数据库迁移到 Amazon RDS for Oracle](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump.md)
+ [使用 Oracle Bystander 和 AWS DMS 将本地 Oracle 数据库迁移到 Amazon RDS for PostgreSQL](migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.md)
+ [将本地 Oracle 数据库迁移到亚马逊上的 Oracle EC2](migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2.md)
+ [使用 AWS DMS 和 AWS SCT 将 Oracle 数据库从亚马逊迁移 EC2 到适用于 MariaDB 的亚马逊 RDS](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct.md)
+ [使用 AWS DMS 将 Oracle 数据库从亚马逊迁移 EC2 到 Amazon RDS for Oracle](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms.md)
+ [使用 Oracle GoldenGate 平面文件适配器将 Oracle 数据库迁移到 Amazon RDS for Oracle](migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.md)
+ [使用 AWS DMS 和 AWS SCT 将 Oracle 数据库迁移至 Amazon Redshift](migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct.md)
+ [使用 AWS DMS 和 AWS SCT 将 Oracle 数据库迁移至 Aurora PostgreSQL](migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.md)
+ [使用 Oracle 数据泵和 AWS DMS 将 Oracle JD Edwards EnterpriseOne 数据库迁移到 AWS](migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.md)
+ [使用 AWS DMS 将 Oracle 分区表迁移到 PostgreSQL](migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms.md)
+ [使用 AWS DMS 将 Oracle PeopleSoft 数据库迁移到 AWS](migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.md)
+ [将数据从本地 Oracle 数据库迁移到 Aurora PostgreSQL](migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql.md)
+ [从 Amazon RDS for Oracle 迁移到 Amazon RDS for MySQL](migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql.md)
+ [使用实体化视图和 AWS DMS 从 Oracle 8i 或 9i 迁移至 Amazon RDS for PostgreSQL](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms.md)
+ [使用和 AWS DMS 从 Oracle 8i 或 9i 迁移到适用于 SharePlex PostgreSQL 的亚马逊 RDS](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms.md)
+ [使用 Oracle 从 Oracle 数据库迁移到 Amazon RDS for PostgreSQL GoldenGate](migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.md)
+ [使用 AWS DMS 和 AWS SCT 从 Amazon EC2 上的 Oracle 迁移至 Amazon RDS for MySQL](migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [在 Amazon ECS 上从 Oracle 迁移 WebLogic 到 Apache Tomcat (ToMee)](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [将基于函数的索引从 Oracle 迁移到 PostgreSQL](migrate-function-based-indexes-from-oracle-to-postgresql.md)
+ [将遗留应用程序从 Oracle Pro\$1C 迁移到 ECPG](migrate-legacy-applications-from-oracle-pro-c-to-ecpg.md)
+ [将 Oracle CLOB 值迁移到 AWS 上 PostgreSQL 中的单独的行](migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws.md)
+ [将 Oracle 数据库错误代码迁移到 Amazon Aurora PostgreSQL-Compatible 数据库](migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.md)
+ [使用扩展将 Oracle 原生函数迁移到 PostgreSQL](migrate-oracle-native-functions-to-postgresql-using-extensions.md)
+ [将 Oracle 迁移 PeopleSoft 到亚马逊 RDS 定制版](migrate-oracle-peoplesoft-to-amazon-rds-custom.md)
+ [将 Oracle ROWID 功能迁移到 AWS 上的 PostgreSQL](migrate-oracle-rowid-functionality-to-postgresql-on-aws.md)
+ [将 Oracle SERIALLY\$1REUSABLE pragma 包迁移至 PostgreSQL](migrate-oracle-serially-reusable-pragma-packages-into-postgresql.md)
+ [将虚拟生成的列从 Oracle 迁移至 PostgreSQL](migrate-virtual-generated-columns-from-oracle-to-postgresql.md)
+ [在 Aurora PostgreSQL-Compatible 上设置 Oracle UTL\$1FILE 功能](set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.md)
+ [从 Oracle 迁移至 Amazon Aurora PostgreSQL 后验证数据库对象](validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql.md)

# SAP
<a name="migration-migration-patterns-by-workload-sap-pattern-list"></a>

**Topics**
+ [使用 AWS DMS 从 SAP ASE 迁移至 Amazon RDS for SQL Server](migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms.md)
+ [使用 AWS SCT 和 AWS DMS EC2 将亚马逊上的 SAP ASE 迁移到兼容 Aurora PostgreSQL 的亚马逊 Aurora](migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms.md)

# 更多模式
<a name="migration-more-patterns-pattern-list"></a>

**Topics**
+ [z/OS 通过安装 AWS 服务 IBM 进行访问 AWS CLI](access-aws-services-from-ibm-z-os-by-installing-aws-cli.md)
+ [评测将 SQL Server 数据库迁移至 MongoDB Atlas on AWS 的查询性能](assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws.md)
+ [使用 DR Orchestrator Framework 自动执行跨区域故障转移和故障恢复](automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.md)
+ [使用 AWS Lambda 任务计划程序在 Amazon EC2 上的 SQL Server Express 中自动执行数据库任务](automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.md)
+ [在 Amazon Web Services Cloud 中构建高级大型机文件查看器](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [通过私有网络连接到 Application Migration Service 数据和控制面板](connect-to-application-migration-service-data-and-control-planes-over-a-private-network.md)
+ [对经过 Blu Age 现代化改造的大型机工作负载进行容器化](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.md)
+ [将 JSON Oracle 查询转换至 PostgreSQL 数据库 SQL](convert-json-oracle-queries-into-postgresql-database-sql.md)
+ [将 Teradata 标准化时态功能转换为 Amazon Redshift SQL](convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql.md)
+ [将 Teradata RESET WHEN 功能转换为 Amazon Redshift SQL](convert-the-teradata-reset-when-feature-to-amazon-redshift-sql.md)
+ [使用跨账户复制 Amazon DynamoDB 表 AWS Backup](copy-amazon-dynamodb-tables-across-accounts-using-aws-backup.md)
+ [使用私有静态在 Amazon EC2 上部署 Cassandra 集群 IPs 以避免重新平衡](deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing.md)
+ [使用 AWS CDK 部署多堆栈应用程序 TypeScript](deploy-multiple-stack-applications-using-aws-cdk-with-typescript.md)
+ [使用 Terraform 在亚马逊 EC2 和亚马逊 FSx 上部署 SQL Server 故障转移集群实例](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [在 Amazon Aurora PostgreSQL 中模拟 Oracle PL/SQL 关联数组和适用于 PostgreSQL 的亚马逊 RDS](emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql.md)
+ [使用 AWR 报告估计 Oracle 数据库的 Amazon RDS 引擎大小](estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.md)
+ [在 Quick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q 生成数据见解](generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.md)
+ [在 Aurora PostgreSQL 中处理动态 SQL 语句中的匿名块](handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql.md)
+ [迁移到 Amazon ECR 存储库时自动识别重复的容器映像](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [使用 FSx 适用于 Windows 文件服务器在亚马逊 EC2 上设置微软 SQL Server 故障转移群集](microsoft-sql-failover-cluster-on-amazon-ec2.md)
+ [使用 AWS Glue 将 Apache Cassandra 工作负载迁移到 Amazon Keyspaces](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [将你的容器工作负载从 Azure 红帽 OpenShift (ARO) 迁移到 AWS 云端 Red Hat OpenShift 服务 (ROSA)](migrate-container-workloads-from-aro-to-rosa.md)
+ [使用和 A SharePlex WS DMS 从 Oracle 8i 或 9i 迁移到 Amazon RDS for Oracle](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms.md)
+ [使用迁移微软 SQL Server Always On 可用性组 AWS Application Migration Service](migrate-microsoft-sql-server-always-on-group-using-mgn.md)
+ [将含有 100 多个参数的 Oracle 函数和过程迁移到 PostgreSQL](migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql.md)
+ [使用具有相同主机名的 SAP HSR 将 SAP HANA 迁移至 AWS](migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname.md)
+ [使用分布式可用性组将 SQL Server 迁移至 AWS](migrate-sql-server-to-aws-using-distributed-availability-groups.md)
+ [使用 AWS Transform 和 Terraform 实现大型机应用程序的现代化和部署](modernize-mainframe-app-transform-terraform.md)
+ [使用 Micro Focus 企业服务器和 LRS VPSX/MFI 在 AWS 上实现大型机在线打印工作负载的现代化](modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.md)
+ [使用 Rocket Enterprise Server 和 L PageCenter RS X 实现大型机输出管理的现代化 AWS](modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.md)
+ [在 AWS 上从 F5 迁移到应用程序负载均衡器时修改 HTTP 标头](modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.md)
+ [使用应用程序恢复控制器管理 EMR 集群的多可用区失效转移](multi-az-failover-spark-emr-clusters-arc.md)
+ [分析对象依赖关系以将部分数据库数据从 Oracle 迁移到 PostgreSQL](multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql.md)
+ [使用 Terraform 为数据库迁移设置 CI/CD 管道](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [使用 AWS 弹性灾难恢复为 Oracle JD Edwar EnterpriseOne ds 设置灾难恢复](set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.md)
+ [使用 AWS Private CA 和 AWS RAM 简化私有证书管理](simplify-private-certificate-management-by-using-aws-private-ca-and-aws-ram.md)
+ [以 CSV 文件形式将大规模 Db2 z/OS 数据传输到亚马逊 S3](transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.md)
+ [使用自定义语言将 Easytrieve 转换为现代语言 AWS Transform](transform-easytrieve-modern-languages.md)