症状
请考虑以下情况:
-
在 Microsoft SQL Server 2014 中启用 "AlwaysOn 可用性组" 功能。
-
AlwaysOn 数据库具有公共语言运行时(CLR)用户定义的数据类型(UDT)。 此外,多个数据库中存在相同的 CLR UDT。
-
你运行的查询涉及具有 CLR UDT 的多个数据库。
在此方案中,辅助副本上出现访问冲突错误,SQL Server 实例在 SQL Server 错误日志中崩溃,并出现以下消息:
2015-02-17 13: 36.85 spid27s 在 VLR 处理期间在处理期间关闭了2905数据库。2015: 36.85 spid27s 错误:3449,严重性:21,状态: 1.2015-02-17 13:07: 36.85 spid27s SQL Server 必须关闭才能恢复数据库(数据库 ID 2)。 数据库或者是无法关闭的用户数据库或系统数据库。 重新启动 SQL Server。 如果数据库在另一次启动后恢复失败,请修复或还原数据库。
此外,你在辅助副本数据库中收到以下错误消息,并且在重新启动 SQL Server 之前,错误不会消失:
消息3961、级别16、状态1、行3Snapshot 隔离事务在数据库 ' <DatabaseName> ' 中失败,因为该语句访问的对象已由另一并发事务中的 DDL 语句修改,因为此事务的开始。 不允许此操作,因为元数据不受版本控制。 如果使用快照隔离混合,则对元数据的并行更新可能会导致不一致。
解决方案
累积更新信息
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 我们建议你下载并安装 SQL Server 的最新累积更新:
更新信息若要解决此问题,请应用更新 KB 3043788:即时修复程序更新程序包可用于 SQL Server 2014。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。