

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

# Amazon RDS for SQL Server
<a name="rds-sql"></a>

Amazon RDS for SQL Server 是一项托管数据库服务，可简化 AWS上 SQL Server 的预置和管理。借助 Amazon RDS，您可以轻松地在云中设置、操作和扩展 SQL Server 部署。借助 Amazon RDS，您可以在几分钟内部署多个版本的 SQL Server（2014、2016、2017、2019 和 2022）和版本（包括 Express、Web、标准版和企业版），并具有经济高效且可调整大小的计算容量。您可以使用通用型 SSD 或预置 IOPS SSD 存储预置 Amazon RDS for SQL Server 数据库实例。（有关详细信息，请参阅 AWS 文档[中的 Amazon RDS 存储类型](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#Concepts.Storage)。） 预配置 IOPS SSD 旨在提供快速、可预测和一致的 I/O 性能，并针对事务 (OLTP) I/O-intensive 数据库工作负载进行了优化。

Amazon RDS 可以管理耗时的数据库管理任务，包括预置、备份、软件修补、监控和硬件扩展，让您能够专注于应用程序开发。Amazon RDS for SQL Server 还提供 Multi-AZ 部署和只读副本（适用于 SQL Server 企业版），为生产工作负载提供高可用性、性能、可扩展性和可靠性。

## 何时选择 Amazon RDS
<a name="rds-sql-choosing"></a>

在以下情况下，Amazon RDS for SQL Server 是一个迁移选项：
+ 您希望将注意力集中在业务和应用程序上，并且 AWS 要处理无差别的繁重任务，例如数据库的配置、备份和恢复任务的管理、安全补丁的管理、SQL Server 版本的次要升级以及存储管理。
+ 您需要一个高度可用的数据库解决方案，并且想要利用 Amazon RDS 提供的按钮式同步 Multi-AZ 复制，而不必手动设置和维护数据库镜像、故障转移群集或 Always On 可用性组。
+ 您希望按小时支付 SQL Server 许可证作为实例成本的一部分，而不是进行大量的前期投资。
+ Amazon RDS for SQL Server 支持您的数据库大小和 IOPS 需求。有关当前的最大限制，请参阅 AWS 文档中的 [Amazon RDS 数据库实例存储](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)。
+ 您不希望管理数据库的备份或时间点恢复。
+ 您希望专注于高级任务，例如性能优化和架构优化，而不是数据库的日常管理。
+ 您希望根据您的工作负载模式扩展或缩减实例类型，而无需担心许可复杂性。

在评估数据库和项目要求后，如果您决定迁移到 Amazon RDS for SQL Server，请参阅以下部分中提供的详细信息，并查看我们稍后在本指南中讨论的[迁移最佳实践](best-practices.md)。

有关当前支持的 SQL Server 功能、版本和选项，请参阅 AWS 网站上的 [Amazon RDS for SQL Server 功能](https://aws.amazon.com/rds/sqlserver/features/)、本指南后面的在[亚马逊 EC2 和亚马逊 RDS 之间进行选择](comparison.md)，以及 AWS 文档中的[亚马逊 RDS 上的微软 SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html)。如果您要迁移到 Amazon RDS Custom，请务必查看 Amazon RDS Custom for SQL Server 的[要求和限制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-reqs-limits-MS.html)。

## 高可用性
<a name="rds-sql-ha"></a>

Amazon RDS 为使用该 Multi-AZ 选项部署的数据库提供高可用性和故障转移支持。当您使用该 Multi-AZ 选项配置数据库时，Amazon RDS 会自动在不同的可用区预配置和维护同步备用实例。主数据库将数据同步复制到备用实例。如果出现问题，Amazon RDS 会自动修复运行状况不佳的实例并重新建立同步。如果基础设施发生故障或可用区中断，Amazon RDS 会自动故障转移到备用实例。仅当备用数据库和主数据库完全同步时，才会发生失效转移。由于主实例和备用实例的终端节点保持不变，因此您可以在失效转移完成后立即恢复数据库操作，而无需执行手动干预。失效转移时间取决于完成恢复过程所需的时间。大型事务会增加故障转移时间。

下图说明了 Amazon RDS for SQL Server Multi-AZ 部署选项。

 ![Amazon RDS for SQL Server in a Multi-AZ configuration](https://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/migration-sql-server/images/sql-migration-rds-ha.png) 

当您在 Multi-AZ 配置中设置 SQL Server 时，Amazon RDS 会根据您部署的 SQL Server 版本使用数据库镜像或 Always On 可用性组自动配置备用数据库实例。[Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_SQLServerMultiAZ.html)中列出了具体的 SQL Server 版本和版本类型。

在 Multi-AZ 部署中，实例扩展或系统升级（例如操作系统 (OS) 修补）等操作首先应用于备用实例，然后再对主实例进行自动故障转移，以增强可用性。

由于 SQL Server 的故障转移优化，某些工作负 I/O载在备用实例上产生的负载可能比在主实例上产生的负载更大，尤其是在数据库镜像部署中。此功能可能会导致备用实例上的 IOPS 更高。我们建议您在预置 Amazon RDS for SQL Server 数据库实例的存储类型和 IOPS 时，考虑主实例和备用实例的最大 IOPS 需求。如果客户端驱动程序支持，还可以指定 `MultiSubnetFailover=True`，以显著减少失效转移时间。

### 限制
<a name="rds-sql-ha-limits"></a>
+ 该 Multi-AZ 选项不适用于 SQL Server Express 和 Web 版本。它仅适用于 SQL Server 标准版和企业版。
+ 您不能将备用数据库实例配置为接受数据库读取活动。
+ Cross-Region Multi-AZ 不支持。
+ 在 Amazon RDS 中，您可以向独立数据库实例发出 stop 命令，并使实例保持停止状态，以避免产生计算费用。您无法在 Multi-AZ 配置中停止 Amazon RDS for SQL Server 数据库实例。相反，您可以终止实例，在终止之前拍摄最终快照，并在需要时从快照重新创建新的 Amazon RDS 实例。或者，您可以先删除 Multi-AZ 配置，然后停止实例。七天后，已停止的实例将重新启动，以便可以应用任何待处理的维护。

有关其他限制，请参阅亚马逊 RDS 文档中的[微软 SQL Server Multi-AZ 部署说明和建议](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_SQLServerMultiAZ.html#USER_SQLServerMultiAZ.Recommendations)。

## 只读副本
<a name="rds-sql-replicas"></a>

只读副本提供可扩展性和负载均衡。SQL Server 只读副本是用于只读目的的 Amazon RDS for SQL Server 数据库实例的物理副本。Amazon RDS 通过将只读工作负载卸载到只读副本数据库实例来帮助减少主数据库实例上的负载。对主数据库实例进行的更新将异步复制到只读副本实例。

请求只读副本时，Amazon RDS 将创建源数据实例的快照，此快照变成只读副本。创建和删除只读副本时不会出现中断。无论维护时段如何，Amazon RDS for SQL Server 都会在升级只读副本后立即升级主数据库。每个只读副本都附带一个单独的终端节点，用于连接到只读副本数据库。

Amazon RDS for SQL Server 通过配置 Always On 可用性组并维护主数据库实例与其只读副本之间的安全网络连接，可以轻松创建只读副本。

您可以在与主数据库相同的 AWS 区域中设置只读副本，也可以在其他区域中设置只读副本。您可以为一个源数据库实例创建最多 5 个只读副本。

**注意**  
只读副本仅适用于以下 SQL Server 版本：  
SQL Server 2017 企业版 14.00.3049.1 或更高版本
SQL Server 2016 企业版 13.00.5216.0 或更高版本
支持 Multi-AZ 环境数据库镜像的 SQL Server 版本和版本不提供只读副本。

下图说明了 Multi-AZ环境中的一个 Amazon RDS for SQL Server 数据库实例，其只读副本位于同一 AWS 区域的另一个可用区。并非所有 AWS 区域都提供两个以上的可用区，因此[在采用此策略之前，您应该检查计划使用的区域](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)。

 ![Amazon RDS for SQL Server with a read replica in another Availability Zone in the same Region](https://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/migration-sql-server/images/sql-migration-rds-rr-same-region.png) 

SQL Server 只读副本不允许写入操作。但是，您可以提升只读副本以使其可写。提升后，无法将其恢复为只读副本。它将成为与其原始主数据库实例没有关系的单个独立数据库实例。提升的只读副本中的数据将与源数据库实例中的数据匹配，直到发出提升请求时的数据。源数据库实例及其所有只读副本的 SQL Server 数据库引擎版本将是相同的。

为了实现高效复制，我们建议采取以下措施：
+ 使用与源数据库实例相同的计算和存储资源设置每个只读副本。
+ 您必须先通过将备份保留期设置为一个非 0（零）值来在源数据库实例上启用自动备份。
+ 源数据库实例必须部署在具有 Always On 可用性组的 Multi-AZ 环境中。

有关 SQL Server 版本支持、版本和限制，请参阅 [Amazon RDS 文档中的 SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.ReadReplicas.html#SQLServer.ReadReplicas.Limitations) 只读副本限制。

有关使用只读副本的更多信息，请参阅文档中的[使用只读副本](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)和[使用 Amazon RDS 的 SQL Server 只读副本](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.ReadReplicas.html)。 AWS 有关数据传输定价的更多信息，请参阅 [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/)。

## 灾难恢复
<a name="rds-sql-dr"></a>

借助 Amazon RDS for SQL Server，您可以创建可靠的跨区域灾难恢复 (DR) 策略。创建灾难恢复解决方案的主要原因是业务连续性和合规性：
+ 有效的灾难恢复策略可帮助您在灾难性事件期间保持系统正常运行，同时将中断降至最低或没有中断。可靠且有效的跨区域灾难恢复策略可使您的业务保持运营，即使整个区域都处于离线状态。
+ 跨区域灾难恢复解决方案可帮助您满足审计和合规性要求。

恢复点目标 (RPO)、恢复时间目标 (RTO) 和成本是制定灾难恢复策略时要考虑的三个关键指标。有关提供跨区域副本的其他选项，请参阅 [AWS Marketplace](https://aws.amazon.com/marketplace/)。有关这些方法的更多信息，请参阅 AWS 数据库博客上的 [Amazon RDS for SQL Server Cross-Region 灾难恢复](https://aws.amazon.com/blogs/database/cross-region-disaster-recovery-of-amazon-rds-for-sql-server/)。