

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

# 现代化 SQL Server 数据库
<a name="modernize-sql-server"></a>

## 概述
<a name="modernize-sql-server-overview"></a>

如果您正着手实现遗留数据库的现代化，以提升其可扩展性、性能和进行成本优化，那么您可能会遇到使用 SQL Server 这类商业数据库时所面临的种种难题。商业数据库价格昂贵，会将客户牢牢束缚在其中，并且其许可条款还颇具惩罚性。本部分对从 SQL Server 迁移与现代化至开源数据库的各种方案进行了概述，并介绍了如何根据您的工作负载选择最佳方案的相关信息。

您可以将 SQL Server 数据库重构为像 Amazon Aurora PostgreSQL 这样的开源数据库，以此来节省 Windows 和 SQL Server 的许可费用。像 Aurora 这样的云原生现代数据库将开源数据库的灵活性和低成本与商业数据库可靠的企业级功能相结合。如果您有不稳定的工作负载或者多租户工作负载，您也可以迁移到 [Aurora Serverless V2](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html)。这能够将成本降低 90% 之多，具体取决于工作负载的特点。[此外，还 AWS 提供诸如适用于 [Aurora PostgreSQL 的 Babelfish、() 之类的工具以及诸如 [AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) 之类的服务，用于简化 S](https://aws.amazon.com/rds/aurora/babelfish/) QL Server 数据库的迁移和现代化。AWS Database Migration ServiceAWS DMS](https://aws.amazon.com/dms/) AWS

## 数据库产品
<a name="modernize-sql-server-database"></a>

从 Windows 上的 SQL Server 迁移到像 Amazon Aurora、Amazon RDS for MySQL 或 Amazon RDS for PostgreSQL 之类的开源数据库，可以在不影响性能或功能的情况下节省大量费用。请考虑以下事项：
+ 从 Amazon EC2 上的 SQL Server 企业版切换到 Amazon RDS for PostgreSQL 或 Amazon RDS for MySQL 最多可以节省 80% 的费用。
+ 从 Amazon EC2 上的 SQL Server 企业版切换到 Amazon Aurora PostgreSQL 兼容版或 Amazon Aurora MySQL 兼容版最多可以节省 70% 的费用。

对于传统的数据库工作负载，Amazon RDS for PostgreSQL 和 Amazon RDS for MySQL 能够满足需求，并为关系型数据库提供了一种经济高效的解决方案。Aurora 增加了众多以往仅由昂贵的商业供应商才能提供的可用性和性能方面的功能。Aurora 中的韧性功能需要额外付费。然而，与其他商业供应商提供的类似功能相比，Aurora 的韧性功能成本仍然低于商业软件针对同类功能所收取的费用。Aurora 架构经过了优化，与标准的 MySQL 和 PostgreSQL 部署相比，能够显著提升性能。

由于 Aurora 能够与开源的 PostgreSQL 和 MySQL 数据库兼容，所以还具有可移植性的额外优势。究竟最佳选项是 Amazon RDS for PostgreSQL、Amazon RDS for MySQL 还是 Aurora，这取决于对业务需求的了解以及将必要的功能与最佳选项进行匹配。

## Amazon RDS 和 Aurora 的比较
<a name="modernize-sql-server-rds-aurora"></a>

下表总结 Amazon RDS 与 Amazon Aurora 之间的关键差异。


****  

| 类别 | Amazon RDS for PostgreSQL 或 Amazon RDS for MySQL | Aurora PostgreSQL 或 Aurora MySQL | 
| --- | --- | --- | 
| 性能 | 性能良好 | 3 倍或以上的性能 | 
| 失效转移 | 通常为 60–120 秒\* | 通常为 30 秒\* | 
| 可扩展性 | 最多 5 个只读副本<br />延迟时间（以秒为单位） | 最多 15 个只读副本<br />延迟时间（以毫秒为单位） | 
| 仓储服务 | 高达 64 TB | 高达 128 TB | 
| 存储 HA | 多可用区配置，其中包含一个或两个备用实例，每个备用实例都有数据库副本 | 默认情况下，在 3 个可用区中有 6 个数据副本 | 
| 备份 | 每日快照和日志备份 | 持续、异步备份到 Amazon S3 | 
| Aurora 的创新 | NA | 100 GB<br />快速数据库克隆 | 
|   | 自动扩缩只读副本 |   | 
|   | 查询计划管理 |   | 
|   | Aurora Serverless |   | 
|   | 跨区域副本与全局数据库 |   | 
|   | 集群缓存管理\*\* |   | 
|   | 并行查询 |   | 
|   | 数据库活动流 |   | 

\*大型事务会增加失效转移时间

\*\*在 Aurora PostgreSQL 中可用

以下表格显示了本部分所涵盖的不同数据库服务的每月预估费用。


****  

| 数据库服务 | 每月费用（美元）\* | AWS 定价计算器 （需要 AWS 账户） | 
| --- | --- | --- | 
| Amazon RDS for SQL Server 企业版 | 3,750 美元 | [Estimate](https://calculator.aws/#/estimate?id=16f190d818045bb99fb59659cecca80f92db4bbc) | 
| Amazon RDS for SQL Server 标准版 | 2,318 美元 | [Estimate](https://calculator.aws/#/estimate?id=5a5e9832ae80fd9ad9e8010c9a17f57d5a0415ca) | 
| Amazon EC2 上的 SQL Server 企业版 | 2,835 美元 | [Estimate](https://calculator.aws/#/estimate?id=0976f53e9b1b55d5475dc394c8caae9d5581183b) | 
| Amazon EC2 上的 SQL Server 标准版 | 1,345 美元 | [Estimate](https://calculator.aws/#/estimate?id=3cada8ab6d72b68a2eb3bc92927990c9f7e264ca) | 
| Amazon RDS for PostgreSQL | 742 美元 | [Estimate](https://calculator.aws/#/estimate?id=bd825d40c79c0df8f0cf053d55ca39acc8a927fe) | 
| Amazon RDS for MySQL | 712 美元 | [Estimate](https://calculator.aws/#/estimate?id=c0f61d7b67652e58df5bf6cb244e9455ff4a8558) | 
| Aurora PostgreSQL | 1,032 美元 | [Estimate](https://calculator.aws/#/estimate?id=a557d7d740e5d87c9764bd369de81a5873dad053) | 
| Aurora MySQL | 1,031 美元 | [Estimate](https://calculator.aws/#/estimate?id=5924d827c98beadda65368c8e64eb249c001afd6) | 

\*存储价格包含在实例定价中。费用以 `us-east-1` 区域为准。吞吐量和 IOPS 是假设值。这些计算针对的是 r6i.2xlarge 和 r6g.2xlarge 实例。

## 成本优化建议
<a name="modernize-sql-server-opt-rec"></a>

异构数据库迁移通常需要将数据库的架构从源数据库引擎转换为目标数据库引擎，并将数据从源数据库迁移到目标数据库。迁移的第一步是评估并将 SQL Server 的架构和代码对象转换为目标数据库引擎。

您可以使用 [AWS Schema Conversion Tool （AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)来评估和评测该数据库是否与各种目标开源数据库选项兼容，例如 Amazon RDS for MySQL 或 Amazon RDS for PostgreSQL、Aurora MySQL 和 PostgreSQL。您也可以使用 Babelfish Compass 工具来评测与适用于 Aurora PostgreSQL 的 Babelfish 的兼容性。这使得 AWS SCT 和 Compass 成为了在决定迁移策略之前了解所涉及的前期工作的强大工具。如果您决定继续， AWS SCT 会自动对架构进行所需的更改。Babelfish Compass 背后的核心理念是让 SQL 数据库能够迁移到 Aurora，无需进行任何修改，或者只需进行极少的修改。Compass 将对现有的 SQL 数据库进行评估，以确定是否能够实现这一目标。这样一来，在将数据从 SQL Server 迁移到 Aurora 之前，结果就已经明确了。

AWS SCT 自动将数据库架构和代码转换和迁移到目标数据库引擎。您可以使用适用于 Aurora PostgreSQL 的 Babelfish 将数据库和应用程序从 SQL Server 迁移到 Aurora PostgreSQL，无需或只需进行少量的架构更改。这可以加快您的迁移速度。

架构迁移完成后，您可以使用迁 AWS DMS 移数据。 AWS DMS 可以执行完整数据加载和复制更改，以便在最短的停机时间内执行迁移。

本部分将更详细地探讨以下工具：
+ AWS Schema Conversion Tool
+ 适用于 Aurora PostgreSQL 的 Babelfish
+ Babelfish Compass
+ AWS Database Migration Service

### AWS Schema Conversion Tool
<a name="modernize-sql-server-opt-rec-schema"></a>

您可以使用 AWS SCT 评估现有的 SQL Server 数据库并评估与 Amazon RDS 或 Aurora 的兼容性。为了简化迁移过程，您还可以在异构数据库迁 AWS SCT 移中使用将架构从一个数据库引擎转换为另一个数据库引擎。您可以使用评估您的应用程序 AWS SCT ，并转换编写 C\#、C\+\+、Java 和其他语言的应用程序的嵌入式应用程序代码。有关更多信息，请参阅 AWS SCT 文档中的[使用 AWS SCT转换应用程序 SQL](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.App.html)。

AWS SCT 是一款支持许多数据库[源的](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.html)免费 AWS 工具。要使用 AWS SCT，请将其指向源数据库，然后进行评估。然后，[AWS SCT](https://aws.amazon.com/blogs/database/convert-database-schemas-and-application-sql-using-the-aws-schema-conversion-tool-cli/) 将评估架构并生成评测报告。评测报告包括一份执行摘要、复杂性及迁移所需的工作量、适用的目标数据库引擎以及转换建议。要下载 AWS SCT，请参阅 AWS SCT 文档 AWS SCT中的[安装、验证和更新](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)。

下表显示了由 AWS SCT 生成的执行摘要示例，旨在说明将数据库转换至不同目标平台所涉及的复杂性。


|  |  |  | 
| --- |--- |--- |
| **目标平台** | **自动更改或最小更改** | **复杂操作** | 
|  | **存储对象** | **代码对象** | **转换操作** | **存储对象** | **代码对象** | 
| Amazon RDS for MySQL | 60（98%） | 8（35%） | 42 | 1（2%） | 1 | 15（65%） | 56 | 
| Amazon Aurora MySQL 兼容版 | 60（98%） | 8（35%） | 42 | 1（2%） | 1 | 15（65%） | 56 | 
| Amazon RDS for PostgreSQL | 60（98%） | 12（52%） | 54 | 1（2%） | 1 | 11（48%） | 26 | 
| Amazon Aurora PostgreSQL 兼容版 | 60（98%） | 12（52%） | 54 | 1（2%） | 1 | 11（48%） | 26 | 
| Amazon RDS for MariaDB | 60（98%） | 7（30%） | 42 | 1（2%） | 1 | 16（70%） | 58 | 
| Amazon Redshift | 61（100%） | 9（39%） | 124 | 0（0%） | 0 | 14（61%） | 25 | 
| AWS Glue | 0（0%） | 17（100%） | 0 | 0（0%） | 0 | 0（0%） | 0 | 
| Babelfish | 59（97%） | 10（45%） | 20 | 2（3%） | 2 | 12（55%） | 30 | 

 AWS SCT 报告还提供有关无法自动转换的架构元素的详细信息。您可以参考[AWS 迁移行动手册](https://aws.amazon.com/blogs/database/the-database-migration-playbook-has-landed/)来缩小 AWS SCT 转化差距并优化目标架构。有许多数据库迁移行动手册可以帮助进行异构迁移。

### 适用于 Aurora PostgreSQL 的 Babelfish
<a name="modernize-sql-server-opt-rec-babelfish"></a>

适用于 Aurora PostgreSQL 的 Babelfish扩展了您的 Aurora PostgreSQL，以能够接受来自 SQL Server 客户端的数据库连接。使用 Babelfish，最初为 SQL Server 构建的应用程序可以直接与 Aurora PostgreSQL 协作，代码更改很少，而且无需更改数据库驱动程序。Babelfish 将 Aurora PostgreSQL 变成了双语，这样 Aurora PostgreSQL 就可以同时使用 T-SQL 和语言。 PL/pgSQL Babelfish 最大程度减少了从 SQL Server 迁移到 Aurora PostgreSQL 的工作量。这能加快迁移进程，最大程度降低风险，并大幅减少迁移成本。您可以继续在迁移后使用 T-SQL，但也可以[选择使用 PostgreSQL 原生工具](https://aws.amazon.com/blogs/database/category/database/amazon-aurora/babelfish-for-aurora-postgresql/)进行开发。

以下图表展示了使用 T-SQL 的应用程序如何连接到 SQL Server 中的默认端口 1433，并通过 Babelfish 翻译器与 Aurora PostgreSQL 数据库进行通信，而使用 PL/pgSQL 的应用程序则可以直接并同时通过 Aurora PostgreSQL 中的默认端口 5432 与 Aurora PostgreSQL 数据库进行连接。

![适用于 Aurora PostgreSQL 的 Babelfish。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/babelfish_tsql.png)


Babelfish 不支持某些 SQL Server T-SQL 功能。因此，Amazon 提供了评估工具，用于 line-by-line分析您的 SQL 语句并确定 Babelfish 是否不支持其中任何语句。

Babelfish 评估有两种选择。 AWS SCT 可以评估你的 SQL Server 数据库与 Babelfish 的兼容性。另一个选项是 Babelfish Compass 工具，这是推荐的解决方案，因为 Compass 工具已根据新版本的适用于 Aurora PostgreSQL 的 Babelfish 进行了更新。

### Babelfish Compass
<a name="modernize-sql-server-opt-rec-babelfish-compass"></a>

[Babelfish Compass](https://github.com/babelfish-for-postgresql/babelfish_compass) 是一款可免费下载的工具，与最新版本的适用于 Aurora PostgreSQL 的 Babelfish 保持一致。相比之下， AWS SCT 将在一段时间后支持更新的Babelfish版本。[Babelfish Compass](https://github.com/babelfish-for-postgresql/babelfish_compass/blob/main/README.md) 针对 SQL Server 数据库架构进行运行。您也可以使用 SQL Server Management Studio（SSMS）等工具提取源 SQL Server 数据库架构。然后，您可以通过 Babelfish Compass 运行架构。这将生成报告，其中详细说明 SQL Server 架构与 Babelfish 的兼容性情况，以及在迁移之前是否需要进行任何更改。Babelfish Compass 工具还能自动完成其中的许多更改，从而最终加快您的迁移进程。

评测和更改完成后，您可以使用 SSMS 或 sqlcmd 等 SQL Server 原生工具将架构迁移到 Aurora PostgreSQL。有关说明，请参阅 AWS 数据库博客上的[使用 Babelfish 从 SQL Server 迁移到 Amazon Aurora](https://aws.amazon.com/blogs/database/migrate-from-sql-server-to-amazon-aurora-using-babelfish/) 一文。

### AWS Database Migration Service
<a name="modernize-sql-server-opt-rec-database-migration"></a>

迁移架构后，您可以使用 AWS Database Migration Service (AWS DMS) 在停机时间最短的情况下将数据迁移到。 AWS AWS DMS 不仅可以加载完整数据，还可以在源系统启动并运行时将更改从源系统复制到目标。源数据库和目标数据库同步后，可以在应用程序指向完成迁移的目标数据库时进行直接转换活动。 AWS DMS 目前仅使用 Babelfish 对 Aurora PostgreSQL 目标执行完整数据加载，不会复制更改。有关更多信息，请参阅文档 AWS Database Migration Service中的 “[使用 Babelfish 作为目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Babelfish.html)” AWS DMS 。

AWS DMS 可以进行同构（跨同一个数据库引擎）和异构（跨不同的数据库引擎）迁移。 AWS DMS 支持许多源数据库和目标数据库引擎。有关更多信息，请参阅数据库博客中的[使用 AWS DMS文章将您的 SQL Server 数据库迁移到 Amazon RDS for SQL Server](https://aws.amazon.com/blogs/database/migrating-your-sql-server-database-to-amazon-rds-for-sql-server-using-aws-dms/)。 AWS 

## 其他资源
<a name="modernize-sql-server-resources"></a>
+ [再见微软 SQL Server，你好 Babelfish](https://aws.amazon.com/blogs/aws/goodbye-microsoft-sql-server-hello-babelfish/)（AWS 新闻博客）
+ [使用 AWS Schema Conversion Tool CLI（数据库博客）转换AWS 数据库架构和应用程序 SQL](https://aws.amazon.com/blogs/database/convert-database-schemas-and-application-sql-using-the-aws-schema-conversion-tool-cli/)
+ [使用最佳实践和现场AWS 经验教训将 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/)客）
+ 在@@ [从微软 SQL Server 迁移到亚马逊 RDS for PostgreSQL 和亚马逊 Aurora PostgreSQL（数据库博客）AWS 后验证数据库对象](https://aws.amazon.com/blogs/database/validate-database-objects-post-migration-from-microsoft-sql-server-to-amazon-rds-for-postgresql-and-amazon-aurora-postgresql/)