亚马逊AWS官方博客
自信地将支持终止的 Microsoft SQL Server 数据库迁移到 Amazon RDS for SQL Server
在本文中,我们将研究一个使用案例,在其中,您使用向后兼容性将本地 EOS Microsoft SQL Server 2012 数据库迁移到 Amazon RDS for SQL Server 2019。
生命周期日期
从 SQL Server 2012 起,每个版本的 SQL Server 通常都包含 5 年的主流支持和 5 年的扩展支持。主流支持包括功能、性能、可扩展性和安全更新。扩展支持仅包括安全更新。支持终止表示产品生命周期已结束;不再提供服务和支持。对于主要引擎版本的 Microsoft SQL Server on Amazon RDS,AWS 维护单独的弃用时间表。
版本 | 发布年份 | 主流支持终止年份 | 扩展支持终止日期 |
SQL Server 2019 | 2019 年 | 2025 年 | 2030 年 01 月 08 日 |
SQL Server 2017 | 2017 年 | 2022 年 | 2027 年 10 月 12 日 |
SQL Server 2016 | 2016 年 | 2021 年 | 2026 年 07 月 14 日 |
SQL Server 2014 | 2014 年 | 2019 年 | 2024 年 07 月 09 日 |
SQL Server 2012 | 2012 年 | 2017 年 | 2022 年 07 月 12 日 |
SQL Server 2008 R2 | 2010 年 | 2012 年 | 2019 年 07 月 09 日 |
SQL Server 2008 | 2008 年 | 2012 年 | 2019 年 07 月 09 日 |
SQL Server 2005 | 2006 年 | 2011 年 | 2016 年 04 月 12 日 |
SQL Server 2000 | 2000 年 | 2005 年 | 2013 年 04 月 09 日 |
迁移概述
数据库迁移过程大致包括以下步骤:
- 查看兼容性矩阵,然后选择目标 Amazon RDS for SQL Server 版本。
- 使用 AWS Schema Conversion Tool (AWS SCT) 运行评估。AWS SCT 评估报告提供转化的服务器和数据库指标。
- 调整 RDS for SQL Server 实例的大小。
- 优化您的成本。
- 迁移数据库。
- (可选)迁移商业智能 (BI) 组件。
查看兼容性矩阵
作为迁移到 Amazon RDS for SQL Server 的第一步,通过以下表格查看您支持的兼容性级别,然后相应地选择目标 Amazon RDS for SQL Server 版本。
例如,如果您选择创建 RDS for SQL Server 2019 实例,则默认引擎版本为 15,在此实例上创建的任何新数据库都将具有默认兼容性 150。但是,您可以选择恢复具有最低向后兼容性级别 100 的数据库 (SQL Server 2008)。
产品 | 数据库引擎版本 | 默认兼容性级别指定 | 支持的兼容性级别值 |
SQL Server 2019 (15.x) | 15 | 150 | 150、140、130、120、110、100 |
SQL Server 2017 (14.x) | 14 | 140 | 140、130、120、110、100 |
SQL Server 2016 (13.x) | 13 | 130 | 130、120、110、100 |
SQL Server 2014 (12.x) | 12 | 120 | 120、110、100 |
SQL Server 2012 (11.x) | 11 | 110 | 110、100、90 |
SQL Server 2008 R2 | 10.5 | 100 | 100、90、80 |
SQL Server 2008 | 10 | 100 | 100、90、80 |
SQL Server 2005 (9.x) | 9 | 90 | 90、80 |
SQL Server 2000 (8.x) | 8 | 80 | 80 |
使用 AWS SCT 运行评估
作为迁移到 Amazon RDS for SQL Server 的第二步,使用 AWS SCT 运行评估。评估报告中所含的有关 SQL Server 实例的指标包括以下内容:
- 数据库存储对象兼容性
- 数据库代码对象兼容性
- 企业版功能使用情况
- 使用数据库镜像
- 配置 SQL Server 日志传送
- 使用故障转移集群
- 配置数据库邮件
- 使用全文搜索服务(Amazon RDS for SQL Server 的全文搜索有限,不支持语义搜索)
- 安装数据质量服务 (DQS)
- 使用 SQL Server 服务代理
- 使用链接服务器(Amazon RDS for SQL Server 对链接服务器的支持有限)
以下是在数据库级别运行的一些示例 AWS SCT 评估报告。
我们建议同时查看 Microsoft SQL Server 数据库实例的限制。请参阅不支持的功能和支持有限的功能,详细了解 Amazon RDS for SQL Server。
作为评估的一部分,如果您发现 Amazon RDS for SQL Server 迁移由于对应用程序正在使用的关键功能的支持有限或根本不支持而遭到阻止,请考虑使用 Amazon RDS Custom for SQL Server。Amazon RDS Custom 是一项托管数据库服务,适用于需要访问底层操作系统和数据库环境的传统、自定义和打包应用程序。Amazon RDS Custom for SQL Server 可自动设置、操作、扩展和修补 AWS 云中的数据库,同时授予您对数据库和底层操作系统的访问权限。
借助 Amazon RDS Custom,您可以获得 Amazon RDS 的自动化和 Amazon Elastic Compute Cloud (Amazon EC2) 的灵活性。通过承担在 Amazon RDS 中所做工作之外的额外数据库管理职责,您可以从 Amazon RDS 自动化和 Amazon EC2 的深度自定义中受益。
下表显示了 Amazon RDS Custom 的责任共担模式。
功能 | Amazon EC2 责任 | Amazon RDS 责任 | Amazon RDS Custom for SQL Server 责任 |
应用程序优化 | 客户 | 客户 | 客户 |
扩展 | 客户 | AWS | 共担 |
高可用性 | 客户 | AWS | 客户 |
数据库备份 | 客户 | AWS | 共担 |
数据库软件修补 | 客户 | AWS | AWS |
数据库软件安装 | 客户 | AWS | AWS |
操作系统修补 | 客户 | AWS | AWS |
操作系统安装 | 客户 | AWS | AWS |
服务器维护 | AWS | AWS | AWS |
硬件生命周期 | AWS | AWS | AWS |
电力、网络和冷却 | AWS | AWS | AWS |
调整实例的大小
作为迁移到 Amazon RDS for SQL Server 的第三步,您需要调整 RDS for SQL Server 实例的大小。我们来了解一下 Amazon RDS for SQL Server 中扩展的工作原理。您可以根据性能和容量要求的变化调整内存或计算能力,从而扩展实例。以下是扩展数据库实例时需要考虑的一些关键事项:
- 分离存储和实例类型。当您纵向扩展或缩减数据库实例时,存储大小将保持不变,不会受到更改的影响。
- 您可以单独修改 RDS 数据库实例来增加分配的存储空间,或通过更改存储类型(例如将通用型 SSD 更改为预置 IOPS SSD)提高性能。
- AWS 为您处理 Amazon RDS for Microsoft SQL Server 许可,您只需按用量付费即可。
- 确定要在何时应用更改。您可以选择立即应用它,也可以在为实例指定的维护时段内应用它。
- 考虑将内存优化的实例用于生产工作负载。
根据本地 SQL Server 利用率和 Amazon RDS for SQL Server 的扩展工作原理,选择包含工作负载所需的 CPU 和内存的实例类型。您始终可以根据预测纵向扩展实例,并仅在该持续时间内支付额外计算费用。
优化成本
在创建 RDS for SQL Server 实例之前,使用以下方法优化成本:
- 考虑将 SQL Server 2019 标准版 (SE) 作为目标 RDS for SQL Server 实例。SQL Server 2019 SE 包括大多数关键的企业版 (EE) 功能。下表总结了企业版和标准版之间的区别。有关详细比较,请参阅版本和 SQL Server 2019 (15.x) 支持的功能。
功能区域 | 功能 | 企业版 | 标准版 |
扩展限制 | 每个实例的最大处理器或内核数 | 操作系统最大值 | 4 个插槽或 24 个内核 |
每个实例使用的最大内存 | 操作系统最大值 | 128 GB(SQL Server 2016 及更高版本) | |
每个数据库的最大内存优化数据大小 | 无限内存(SQL Server 2014 及更高版本) | 32 GB(SQL Server 2016 及更高版本) | |
高可用性 | Always On 可用性组 | 是 | 基本可用性组(SQL Server 2016 及更高版本) |
在线索引 | 是 | 否 | |
在线架构更改 | 是 | 否 | |
可恢复的在线索引重建 | 是(SQL Server 2017 及更高版本) | 否 | |
加速数据库恢复 (ADR) | 是 (SQL Server 2019) | 是 (SQL Server 2019) | |
可扩展性和性能 | 表和索引分区 | 是 | 是(SQL Server 2016 SP1 及更高版本) |
数据压缩 | 是 | 是(SQL Server 2016 SP1 及更高版本) | |
分区表并行度 | 是 | 是(SQL Server 2016 SP1 及更高版本) | |
内存中 OLTP | 是(SQL 2014 及更高版本) | 是(SQL Server 2016 SP1 及更高版本) | |
延迟耐久性 | 是(SQL 2014 及更高版本) | 是(SQL 2014 及更高版本) | |
列存储 | 是(SQL Server 2016 SP1 及更高版本) | 是(SQL Server 2016 SP1 及更高版本) | |
多语句表值函数的交错执行 | 是(SQL Server 2017 及更高版本) | 是(SQL Server 2017 及更高版本) | |
智能数据库:行存储的批处理模式 | 是 (SQL Server 2019) | 否 | |
智能数据库:近似非重复计数 | 是 (SQL Server 2019) | 是 (SQL Server 2019) | |
智能数据库:表变量延迟编译 | 是 (SQL Server 2019) | 是 (SQL Server 2019) | |
智能数据库:标量 UDF 内联 | 是 (SQL Server 2019) | 是 (SQL Server 2019) | |
安全性 | 透明数据库加密 (TDE) | 是 | 是 (SQL Server 2019) |
包含的数据库 | 是 | 是 |
- 在本地 SQL Server 上运行以下命令,查看您的应用程序中是否使用了任何企业版功能:
IF OBJECT_ID('tempdb.dbo.##enterprise_feature_list') IS NOT NULL DROP TABLE ##enterprise_feature_list CREATE TABLE ##enterprise_feature_list ( dbname SYSNAME, feature_name VARCHAR(100), feature_id INT ) EXEC sp_MSforeachdb N' USE [?] INSERT INTO ##enterprise_feature_list SELECT dbname=DB_NAME(),feature_name,feature_id FROM sys.dm_db_persisted_sku_features ' SELECT * FROM ##enterprise_feature_list
- 如果您的应用程序适合 SQL Server 2019 SE 功能,但工作负载所需的 vCPU 数量大于 24 个,则可以考虑将目标 RDS for SQL Server 实例分成多个实例,并采用基于微服务的架构来降低成本。
- 考虑将多个较小的 RDS for SQL Server 实例分组为一个(前提是它保持在 24 个 vCPU 和 128 GB 内存范围内),以最大限度地利用资源。
- 仅当您的工作负载在单个 SQL Server 实例上需要超过 24 个 vCPU/128 GB 内存,需要设置只读副本或应用程序使用的无法删除的 EE 功能时,才考虑 EE。
- 考虑使用预留实例,帮助进一步降低成本。
迁移数据库
要使用向后兼容性将数据库从本地迁移到 Amazon RDS for SQL Server,请考虑使用本机备份和还原。如果您有大量 SQL Server 实例需要迁移,请考虑使用自定义日志传送自动进行迁移。
自定义日志传送解决方案使用以下架构,以复制本地完整备份和事务日志备份,并使用向后兼容性在 Amazon RDS for SQL Server 上还原这些备份。
迁移 BI 组件(可选)
如果您的本地 SQL Server 工作负载使用任何 BI 组件,如 SQL Server 集成服务 (SSIS)、SQL Server 报告服务 (SSRS) 或 SQL Server 分析服务 (SSAS),则您可以通过在 Amazon RDS for SQL Server 上启用 Microsoft SQL Server BI 功能,帮助降低成本。
有关 Amazon RDS for SQL Server 中 SSIS、SSRS 和 SSAS 限制的更多信息,请参阅以下资源:
- Amazon RDS for SQL Server 中 SSIS 的限制
- Amazon RDS for SQL Server 中 SSRS 的限制
- Amazon RDS for SQL Server 中 SSAS 的限制
如果您的工作负载所用的任何 BI 功能不受 Amazon RDS for SQL Server 的支持,请考虑使用 Amazon RDS Custom for SQL Server。
验证向后兼容性
要验证向后兼容性维护旧的基数估计,请使用前文概述的一种迁移方法将数据库 (AdventureWorks2012) 从本地 SQL Server 2012 迁移到 Amazon RDS for SQL Server 2019。
还要在 RDS for SQL Server 实例上创建一个与数据库引擎兼容性相匹配的新数据库 (AdventureWorks2019)。我们使用这个数据库来比较 CardinalityEstimationModelVersion 值(AdventureWorks2012 与 AdventureWorks2019 之间的值)。
要检查 RDS for SQL Server 实例上数据库的兼容性,请运行以下命令:
SELECT @@version as DatabaseEngineVersion;
SELECT * FROM sys.databases;
使用向后兼容性还原的 AdventureWorks2012 数据库维护 CardinalityEstimationModelVersion 70,就像它在本地运行一样。
使用数据库引擎兼容性创建的 AdventureWorks2019 数据库具有 CardinalityEstimationModelVersion 150,以匹配 SQL Server 2019 默认基数估计。
最佳实践
请考虑以下最佳实践:
- 在大多数情况下,在向后兼容模式下运行数据库时,不需要更改应用程序驱动程序。但是,如果您在将应用程序连接到 RDS for SQL Server 实例时收到握手错误,请考虑在 Amazon RDS 控制台上为您的 SQL Server 实例创建一个新的参数组,然后启用 TLS 1.1 和 1.0。
- 如果需要,您可以下载要在应用程序中使用的最新 Microsoft ODBC 和 Microsoft JDBC 驱动程序。
- 如果您应用程序的 tempdb 工作负载繁重,可考虑使用 R5d 实例类型,并将 tempdb 配置为使用本地实例存储。通过将 tempdb 数据文件和日志文件放在本地,与基于 EBS 的标准产品相比,您可以降低读写延迟。
- 始终考虑在多可用区设置中运行生产工作负载,以确保高可用性并帮助防止数据丢失。
- 考虑使用以下代码的输出对所有表进行转换后运行 UPDATE STATISTICS:
USE <database_name> --repeat for each database
go
SELECT 'UPDATE STATISTICS ' + s.name + '.' + o.name + ' WITH ALL;'
FROM sys.objects o
inner join sys.schemas s
on s.schema_id = o.schema_id
WHERE o.type = 'U'
ORDER BY o.name
摘要
在本文中,我们演示了如何使用向后兼容性将任何旧版(和 EOS)Microsoft SQL Server 数据库迁移到 Amazon RDS for SQL Server 2019。快来试试 Amazon RDS for SQL Server 吧,自信地将 EOS SQL Server 工作负载迁移到 AWS。
当数据库已经在 AWS 中运行时,要确定您的选项,请参阅针对 Amazon RDS for SQL Server 将 SQL Server 2008 R2 升级为 SQL Server 2016 的最佳实践。
如果您有任何问题或意见,请将其写在评论部分。
关于作者
Rajib Sadhu 是高级数据库专家解决方案架构师,在 Microsoft SQL Server 和其他数据库技术方面拥有超过 15 年的经验。他帮助客户设计数据库解决方案并将其数据库解决方案迁移到 AWS。在加入 AWS 之前,他为金融、旅游和酒店业领域的生产和任务关键型数据库实施提供过支持。
Shirin Ali 是 Amazon Web Services 专业服务团队的数据库顾问。她是一名数据库迁移专家,帮助 Amazon 客户将其本地数据库环境迁移到 AWS 云数据库解决方案。