

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

# SQL Server 的异构数据库迁移
<a name="heterogeneous-migration"></a>

由于开源数据库和云计算平台的创新和改进 AWS，许多组织正在从 SQL Server 等专有（在线事务处理或 OLTP）数据库引擎转向开源引擎。对于任何组织来说，SQL Server 数据库都是任务关键型系统，但与特定供应商锁定则将面临很大风险，并且成本高昂。低运营成本和无许可费是考虑将底层数据库技术转换为开源或 AWS 云原生数据库的有力理由。

迁移出 SQL Server 的其他原因包括供应商锁定期、许可审核、昂贵的许可和成本。因此，许多组织在迁移到 AWS时选择将其 SQL Server 数据库迁移到开源数据库（例如 PostgreSQL、MySQL 或 MariaDB）或 AWS 云原生数据库（例如 Amazon Aurora 或 Amazon DynamoDB）。

您还可以将 SQL Server 数据仓库数据库迁移到 Amazon Redshift，这是一个快速、完全托管的云数据仓库。Amazon Redshift 已与您的数据湖集成，其性能比任何其他数据仓库快三倍，并且成本比任何其他云数据仓库低 75%。有关更多信息，请参阅《 AWS 规范性指南》网站上[使用的 AWS DMS将本地 Microsoft SQL Server 数据库迁移到 Amazon Redsh](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms.html) ift 的模式。

要迁移到开源或 AWS 云原生数据库，请根据您拥有的数据类型、访问模式、可扩展性、应用程序实用性和复杂性选择合适的数据库。从 SQL Server 迁移到 PostgreSQL 以及其他开源数据库通常既困难又耗时，并且需要仔细评估、规划和测试。

借助 AWS Database Migration Service (AWS DMS) 和 AWS Schema Conversion Tool (AWS SCT) 之类的服务，此过程变得更加容易，这些服务可帮助您在最短的停机时间内将商业数据库迁移到开源数据库。 AWS 

在异构数据库迁移中，源数据库和目标数据库引擎是不同的，例如从 SQL Server 迁移到 Aurora，或从 SQL Server 迁移到 MariaDB。源数据库和目标数据库中的架构结构、数据类型和数据库代码可能大不相同，因此在数据迁移开始之前，必须对架构和代码进行转换。因此，异构迁移包括两个步骤：
+ 步骤 1：转换源架构和代码，使其与目标数据库相匹配。您可以使用 AWS SCT 进行此转换。
+ 步骤 2：将数据从源数据库迁移到目标数据库。您可以 AWS DMS 用于此过程。

 ![\[Heterogeneous database migration with AWS SCT and AWS DMS\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/migration-sql-server/images/migration-tools.png) 

AWS DMS 在迁移期间自动处理主要的数据类型转换。源数据库可以位于您自己的外部场所 AWS，也可以是在 EC2 实例上运行的数据库，也可以是 Amazon RDS 数据库（参见 AWS DMS 文档中的[数据迁移源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)）。目标可以是 Amazon EC2、Amazon RDS 或 Aurora 中的数据库。有关使用 MySQL 作为目标数据库的信息，请参阅数据库博客上的 “将 [SQL Server 数据库迁移到兼容 MySQL 的数据库引擎](https://aws.amazon.com/blogs/database/migrating-a-sql-server-database-to-a-mysql-compatible-database-engine/)” AWS 。

# 异构数据库迁移工具
<a name="heterogeneous-migration-tools"></a>

下表列出了可用于从 SQL Server 迁移到其他数据库引擎的各类工具。


****  

| 迁移工具 | 目标数据库支持 | 用于 | 
| --- | --- | --- | 
| [AWS SCT](#aws-sct) |  Amazon RDS for MySQL Amazon RDS for PostgreSQL Amazon Aurora MySQL Amazon Aurora PostgreSQL  | 架构转换 | 
| [AWS DMS](#aws-dms) |  Amazon RDS for MySQL Amazon RDS for PostgreSQL Amazon Aurora MySQL Amazon Aurora PostgreSQL  | 数据迁移 | 
| [Babelfish](#babelfish) |  Amazon Aurora PostgreSQL  | 数据访问和迁移 | 

下面的小节提供了关于每个工具的更多信息。

## AWS SCT
<a name="aws-sct"></a>

[AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 将您现有的商用数据库架构转换为开源引擎或 AWS 云原生数据库。 AWS SCT 通过自动将源数据库架构和大多数数据库代码对象（包括视图、存储过程和函数）转换为与目标数据库兼容的格式，使异构数据库迁移变得可预测。

当您将数据库架构从一个引擎转换为另一个引擎时，还需要更新应用程序中的 SQL 代码，以便与新的数据库引擎而不是旧的数据库引擎进行交互。 AWS SCT 还可以转换 C\$1\$1、C\$1、Java 或其他应用程序代码中的 SQL 代码。任何无法自动转换的对象都会被明确标记为手动转换。 AWS SCT 还可以扫描应用程序源代码中的嵌入式 SQL 语句，并将其作为数据库架构转换项目的一部分进行转换。有关更多信息，请参阅 AWS 文档 AWS SCT中的[使用 Microsoft SQL Server 作为来源](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.SQLServer.html)。

## AWS DMS
<a name="aws-dms"></a>

[AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/) 将您的数据快速安全地迁移到。 AWS迁移期间，源数据库保持完全可运行，从而最大限度地减少了应用程序停机时间。 AWS DMS 支持同构迁移，例如将数据从一个 SQL Server 数据库迁移到另一个 SQL Server 数据库。它还支持不同数据库平台之间的异构迁移，例如将您的 SQL Server 数据库迁移到开源数据库或 AWS 云原生数据库。 AWS DMS 管理迁移过程的复杂性，包括自动将源数据库中发生的数据更改复制到目标数据库。完成数据库迁移后，目标数据库会保持与源数据库的同步，您可以在方便时切换到目标数据库。有关更多信息，请参阅 AWS 文档 AWS DMS中的[使用 Microsoft SQL Server 数据库作为来源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)。

## Babelfish
<a name="babelfish"></a>

Babelfish 是 Amazon Aurora 的内置功能。适用于 Aurora PostgreSQL 的 Babelfish 使您的 Aurora PostgreSQL 兼容版数据库能够理解来自为 Microsoft SQL Server 编写的应用程序的命令。修改使用 SQL Server 专有 SQL 方言 Transact-SQL (T-SQL) 编写的 SQL Server 数据库代码的 SQL Server 应用程序既费力又耗时。[适用于 Aurora PostgreSQL 的 Babelfish](https://aws.amazon.com/rds/aurora/babelfish/) 使这一过程变得更加简单和容易。使用 Babelfish，您无需对应用程序代码进行更改。您可以使用 Babelfish for Aurora PostgreSQL 将 SQL Server 数据库迁移到 Amazon Aurora PostgreSQL 数据库集群。

借助 Babelfish，Aurora PostgreSQL 可以理解 T-SQL 并支持相同的通信协议，因此您无需切换数据库驱动程序或重写应用程序查询。您最初为 SQL Server 编写的应用程序现在只需进行少量代码更改即可与 Aurora 协同工作。这减少了修改在 SQL Server 或更新版本上运行的应用程序并将其迁移到 Aurora 所需的工作量，从而实现更快、风险更低且更具成本效益的迁移。

如果你要从旧版 SQL Server 数据库迁移，你可以使用 Babelfish 并行运行 SQL Server 代码和你使用原生 PostgreSQL 构建的新功能。 APIsBabelfish 使 Aurora PostgreSQL 能够使用常用的 SQL Server 工具、命令和驱动程序。

Babelfish 还可以使用本机 PostgreSQL 连接访问数据。原定设置情况下，Babelfish 支持的两种 SQL 方言都可以通过以下端口处的本机线路协议获得：
+ 对于 SQL Server 方言 (T-SQL)，客户端连接到端口 1433。
+ 对于 PostgreSQL 方言 (PL/pgSQL)，客户端连接到端口 5432。

Babelfish 通过提供来自 SQL Server 或 PostgreSQL 端口的连接，使您的旧版 SQL Server 应用程序能够与 Aurora 进行通信，而无需进行大量代码重写。下图阐明了此架构。

![\[Babelfish 和 Aurora 之间的通信\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/migration-sql-server/images/babelfish.png)


您可以通过 Amazon RDS 管理控制台在 Aurora 集群上启用 Babelfish。有关说明，请参阅 Amazon RDS 文档中的[创建适用于 Aurora PostgreSQL 数据库集群的 Babelfish](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/babelfish-create.html)。

有关迁移的更多信息，请参阅 Aurora 文档中的[将 SQL Server 数据库迁移到适用于 Aurora PostgreSQL 的 Babelfish](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/babelfish-migration.html)。

有关更多信息，请参阅以下资源：
+ [开始使用适用于 Aurora 的 Babelfish PostgreSQL（数据库博客](https://aws.amazon.com/blogs/database/get-started-with-babelfish-for-aurora-postgresql/)）AWS 
+ [使用 Babelfish 从 SQL Server 迁移到亚马逊 Aurora](https://aws.amazon.com/blogs/database/migrate-from-sql-server-to-amazon-aurora-using-babelfish/)（AWS 数据库博客）
+ 使用 SSIS [和 Babelfish 从 SQL Server 迁移到 Aurora PostgreSQL（](https://aws.amazon.com/blogs/database/migrate-from-sql-server-to-aurora-postgresql-using-ssis-and-babelfish/)数据库博客）AWS 
+ 将 [SSIS 包从 SQL Server 修改为 Aurora PostgreSQL 的 Babelfish（数据库](https://aws.amazon.com/blogs/database/modify-ssis-packages-from-sql-server-to-babelfish-for-aurora-postgresql/)博客）AWS 
+ [针对适用于 Aurora PostgreSQL 的 Babelfish 运行 SQL Server Reporting Services 报告](https://aws.amazon.com/blogs/database/run-sql-server-reporting-services-reports-against-babelfish-for-aurora-postgresql/)（AWS 数据库博客）
+ [使用 AWS SCT 评估报告为 Babelfish 迁移做好准备](https://aws.amazon.com/blogs/database/prepare-for-babelfish-migration-with-the-aws-sct-assessment-report/)（AWS 数据库博客）