首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >升级数据库兼容性级别后迁移是否会导致任何破坏结果?

升级数据库兼容性级别后迁移是否会导致任何破坏结果?
EN

Database Administration用户
提问于 2022-04-13 09:27:23
回答 3查看 2.5K关注 0票数 5

链接:https://learn.microsoft.com/en-us/sql/database-engine/install-windows/change-the-database-compatibility-mode-and-use-the-query-store?view=sql-server-ver15

我正在从2016到2019年迁移sql服务器。我知道,默认情况下,迁移后数据库将保持现有的兼容性水平。升级兼容性级别可启用新功能。

Microsoft建议采用下面的方法来升级兼容性级别以避免倒退:

兼容性级别升级会导致任何破坏结果吗?还是查询回归(我认为这意味着由于执行计划选择不当而花费的时间比平时长)是兼容性升级的唯一负面影响?

EN

回答 3

Database Administration用户

发布于 2022-04-13 11:48:26

查询性能回归是主要关注的问题,也是Microsoft建议在更改兼容性级别之前首先启用查询存储的原因。这允许Query在更改兼容性级别之前构建主要查询的性能基线,以便在更改兼容性级别之后进行比较,以便它能够提供查询倒退的信息和指标(变得更慢)。正如文档中提到的,您可以使用Query强制将“最后一个已知的好计划”作为短期修复,同时分析如何使用更好的长期修复优化该查询。

当然,通过更改兼容性级别总是有可能遇到错误,但我认为这比在实际实例版本升级中遇到bug的可能性要小。例如,当我最近从2016年升级到2019年RTM时,我遇到了一个带有所有权链接的错误,这个函数是通过链接服务器调用的。这是通过安装当前为铜15的最新CU来解决的。因此,将2019年实例修补到最新的CU以减少任何bug是非常重要的。

这也是为什么建议您首先在开发服务器中进行版本升级,等待几周或几个月来分析结果,然后在经过充分测试后在生产中应用相同的升级。

票数 6
EN

Database Administration用户

发布于 2022-04-13 13:23:37

我还想在其他答复中补充一下,因为你将从2016年到2019年,自2016年以来一直有这样的答复。

当然,以上只是记录在案的内容。

票数 4
EN

Database Administration用户

发布于 2022-04-13 11:50:53

是的,升级兼容性级别会导致破坏结果。

以下是使用兼容性级别进行向后兼容性文档的摘录:

在给定的Server版本中引入的中断更改可能不受兼容性级别的保护。这指的是Server数据库引擎不同版本之间的行为更改。Transact-SQL行为通常受兼容性级别的保护。但是,更改或删除的系统对象不受兼容性级别的保护。兼容性级别保护的中断更改的一个示例是从datetime到datetime2数据类型的隐式转换。在数据库兼容性级别130下,这些值通过计算分数毫秒来提高准确性,从而产生不同的转换值。若要恢复以前的转换行为,请将数据库兼容性级别设置为120或更低。不受兼容性级别保护的破坏更改的示例如下:

  • 更改系统对象中的列名。在Server 2012 (11.x)中,sys.dm_os_sys_info中的列sys.dm_os_sys_info重命名为pages_kb。无论兼容性级别如何,来自SELECT single_pages_kb的查询sys.dm_os_sys_info都会产生错误207 207 (无效列名)。
  • 删除系统对象。在Server 2012 (11.x)中,删除了sp_dboption。不管兼容性级别如何,EXEC sp_dboption 'AdventureWorks2016‘、’auto收缩‘、'FALSE';将产生错误2812 (无法找到存储过程'sp_dboption')。

相关内容:Server中停止的数据库引擎功能

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/310890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档