兼容性认证

适用范围:SQL ServerAzure SQL 数据库Azure SQL 托管实例

兼容性认证使企业能够在本地、云中和边缘升级和现代化 SQL Server 数据库,消除了应用程序兼容性风险。

相同的 数据库引擎 同时支持 SQL Server 和 Azure SQL 数据库(包括 Azure SQL 托管实例)。 此共享 数据库引擎 意味着用户数据库可以在本地 SQL Server 和 Azure SQL 数据库 之间顺畅移动,而在数据库中以 Transact-SQL 执行的应用程序代码将继续像在源系统中那样工作。

对于 SQL Server 的每个新版本,默认兼容性级别将设置为 数据库引擎 的版本。 但会保留以前版本的兼容性级别,以持续兼容现有应用程序。 此兼容性矩阵可在此处查看。 因此,经认证可与给定的 SQL Server 版本一起使用的应用程序实际上经过了认证,可在该版本的默认兼容性级别工作。

例如,数据库兼容性级别 130 是 SQL Server 2016 (13.x) 的默认兼容性级别。 由于兼容性级别强制执行特定的 Transact-SQL 功能和查询优化行为,因此在数据库兼容性级别 130 上隐式认证了经认证可在 SQL Server 2016 (13.x) 上工作的数据库。 只要数据库兼容性级别保持为 130,此数据库就可以像在 SQL Server 的更新版本(如 SQL Server 2019 (15.x) 和 Azure SQL 数据库)中工作。

这是 Microsoft Azure SQL 数据库 持续集成操作模型的基本原则。 数据库引擎 在 Azure 中持续改进和升级,但由于现有数据库保持其当前兼容性级别,因此即使在升级到基础 数据库引擎 数据库后,它们仍将继续按设计的形式工作。

这也是 SharePoint Server 2016 和 SharePoint Server 2019 在 SQL Server 和 Azure SQL 托管实例上认证的方式。 可以为这些 SharePoint Server 版本部署任何使用受支持的数据库兼容性级别的 SQL Server 数据库引擎。 有关详细信息,请参阅 SharePoint Server 2016 的硬件和软件要求SharePoint Server 2019 的硬件和软件要求

利用兼容性认证管理升级风险

使用兼容性认证是数据库现代化的一种非常有用的方法。 当开发人员根据兼容级别进行认证时,可以设置 SQL Server 和 Azure SQL 数据库上支持的应用程序的技术要求,但将应用程序生命周期与数据库平台生命周期分离。 这样,公司便可以根据生命周期策略的要求来升级 SQL Server 数据库引擎、利用不依赖于代码的全新可伸缩性和性能增强,以及通过升级连接应用程序以保持其功能状态。

任何升级的主要风险因素是可能会对功能和性能问题产生不利影响。 通过兼容性认证,你可以放心地管理以下升级风险:

  • 在与 Transact-SQL 行为相关的方面,任何更改都意味着需要重新认证应用程序的正确性。 然而,数据库兼容性级别设置提供与 SQL Server 早期版本的后向兼容性,但后向兼容性仅适用于指定的数据库,而不适用于整个服务器。 保持数据库兼容性级别不变,可确保现有应用程序查询在 数据库引擎 升级之前和之后都继续显示相同的行为。 有关 Transact-SQL 行为和兼容性级别的详细信息,请参阅使用兼容性级别实现后向兼容性

  • 在与性能相关的方面,由于每个版本都会引入查询优化器改进,因此,可能会遇到不同 数据库引擎 版本之间的查询计划差异。 当某些更改可能对给定查询或工作负荷造成不利影响时,升级范围中的查询计划差异通常转化为风险。 反过来,这种风险通常会导致需要重新认证应用程序,这可能会延迟升级,并带来生命周期和支持方面的挑战。

    由于需要缓解升级风险,查询优化器改进被限制为新版本的默认兼容性级别(即,适用于任何新版本的最高兼容性级别)。 兼容性认证包括 查询计划形状保护:维护数据库兼容性级别 as-is的概念,在数据库引擎升级后立即转换为在新版本中使用与升级前相同的查询优化模型,并且查询计划形状不应更改。

    有关详细信息,请参阅本文的为什么使用查询计划形状?部分。

有关兼容性级别的详细信息,请参阅使用兼容性级别实现后向兼容性

对于已经针对给定兼容级别认证的现有应用程序,请升级 SQL Server 数据库引擎,并保持以前的数据库兼容性级别。 在这种情况下,无需重新认证应用程序。 有关详细信息,请参阅本文后面部分的兼容性级别和数据库引擎升级

对于新的开发工作,或者当现有应用程序需要使用新功能(如 智能查询处理)和一些新的 Transact-SQL 时,计划将数据库兼容性级别升级到 SQL Server 中的最新可用级别,并重新认证应用程序以使用该兼容级别。 有关升级数据库兼容性级别的详细信息,请参阅升级数据库兼容性级别的最佳做法

为什么使用查询计划形状?

查询计划形状是指组成查询计划的各种运算符的可视化表示形式。 其中包括查找、扫描、联接和排序等运算符,以及它们之间指示数据流和操作(必须执行这些操作才能生成指定的结果集)顺序的连接。 查询计划形状由查询优化器确定。

若要在升级过程中保持查询性能的可预测性,其中一个基本目标是确保使用相同的查询计划形状。 这可通过在升级后不立即改变数据库兼容性级别来实现,即使基础 数据库引擎 具有不同的版本。 如果查询执行生态系统中没有其他更改(例如可用资源的重大更改或基础数据中的数据分布),则查询的性能应保持不变。

但是,保留查询计划的形状并不是升级后可能具有性能影响的唯一因素。 如果将数据库移动到较新的数据库引擎并做出环境更改,则可以引入对查询性能产生直接影响的因素,即使查询计划在不同版本中保留相同的形状也是如此。 这些环境更改可能包括新的数据库引擎具有更多或更少的可用内存和 CPU 资源、服务器或数据库配置选项的更改,或对影响查询计划创建方式的数据分布的更改。 因此,请务必了解,维护数据库兼容性级别可防止查询计划形状更改,但不能针对影响查询性能的其他环境方面提供保护,其中一些环境更改为用户发起的更改。

有关详细信息,请参阅查询处理体系结构指南

兼容性认证的好处

数据库认证作为基于兼容性的方法而不是命名版本方法有几个直接好处:

  • 将应用程序认证从平台分离出来。 由于其共享的数据库引擎,因此对于只需执行 Transact-SQL 查询的应用程序,无需为 Azure 和本地维护单独的认证过程。

  • 降低升级风险,由于在数据库平台现代化期间,可以分离应用程序与数据库平台层升级周期,因此减少了中断,改进了变更管理。

  • 升级而不更改代码。 升级到 SQL Server 或 Azure SQL 数据库 的新版本可通过保持与源系统相同的兼容性级别,在无需对代码进行更改的情况下完成,并且不需要立即重新认证,直到应用程序需要使用仅在更高的数据库兼容性级别中可用的增强功能。

  • 提高可管理性和可伸缩性,无需更改应用程序并可使用不受数据库兼容性级别限制的增强功能。 在 SQL Server 中,这些功能包括:

新数据库仍设置为数据库引擎版本的默认兼容性级别。 但在将数据库从 SQL Server 的任何早期版本还原或附加到 SQL Server 或 Azure SQL 数据库 的新版本时,数据库将保留其现有的兼容性级别。

验证支持的兼容性级别

将数据库迁移到 SQL Server 或 Azure SQL 数据库 的新版本之前,请验证该数据库兼容性级别是否仍受支持。 可以在 ALTER DATABASE 兼容级别参数中看到数据库兼容性级别支持矩阵。

升级兼容性级别低于允许级别(例如,SQL Server 2005 (9.x) 中的默认级别 90)的数据库会将数据库设置为允许的最低兼容性级别 (100)。

若要确定当前的兼容性级别,请查询 compatibility_levelsys.databases 中的列。

兼容性级别和数据库引擎升级

若要将数据库引擎升级到最新版本,同时保持升级前存在的数据库兼容性级别及其可支持性状态,则应在数据库中执行应用程序代码的静态功能外围验证(存储过程、函数、触发器等可编程性对象)以及应用程序中(使用捕获应用程序发送的动态代码的工作负荷跟踪)。

这可以通过在 SQL Server Management Studio 中使用 SQL Server 迁移组件轻松完成。 报表输出中缺少有关缺失或不兼容功能的错误,可保护应用程序免受新目标版本上的任何功能回归的影响。 如果需要更改来确保数据库在新版本中正常工作,该工具允许你确定需要更改的位置,以及可用的解决方法。

将数据库从旧版本(如 SQL Server 2008 R2(10.50.x)或 SQL Server 2012 (11.x)移动到新版本的 SQL Server 或 Azure SQL 数据库时,此功能验证尤其重要,因为应用程序代码可能会使用不受数据库兼容性级别的中断 Transact-SQL。 但是,从较新版本(如 SQL Server 2016(13.x))迁移到 SQL Server 2022(16.x)或 Azure SQL 数据库时,没有需要担心已弃用的 Transact-SQL。 有关已弃用 Transact-SQL 的详细信息,请参阅使用兼容性级别实现后向兼容性

备注

SQL Server 迁移组件支持数据库兼容性级别 100 及更高版本。 排除 SQL Server 2005 (9.x) 作为源版本。

建议执行一些最小测试来验证升级是否成功,同时维护以前的数据库兼容性级别。 应该确定适用于自己的应用程序和场景的最小测试。

查询计划保护

Microsoft 在下列情况下提供查询计划形状保护:

  • 新版 SQL Server(目标)在相当于之前 SQL Server 版本(源)运行的硬件上运行。

  • 目标 SQL Server 和源 SQL Server 使用相同的 支持的数据库兼容性级别

  • 目标 SQL Server 和源 SQL Server 使用相同的数据库和工作负荷。

在这些条件下发生的任何查询计划形状回归(与源 SQL Server 相比)都将被处理。 在本例中,请联系Microsoft客户支持。