Sign in with Microsoft
Sign in or create an account.

症状

在 Microsoft SQL Server 镜像体系结构中,您可能会在合作伙伴(镜像)服务器上遇到 SQL Server 断言。此外,在 SQL Server 错误日志中还会发现类似于以下内容的错误消息。此错误通常意味着必须重新生成镜像对。

SQL 服务器断言:文件:loglock.cpp, 行 # 834 失败断言 = "结果 = LCK_OK"此错误可能与计时有关。如果错误在重新运行语句后仍然存在,请使用 DBCC CHECKDB 检查数据库的结构完整性,或重新启动服务器以确保内存中的数据结构不会损坏。错误: 3624, 严重性: 20, 状态: 1.系统断言检查失败。有关详细信息,请查看 SQL Server 错误日志。通常,断言失败是由软件错误或数据损坏引起的。要检查数据库损坏,请考虑运行 DBCC CHECKDB。如果您同意在安装过程中向 Microsoft 发送转储,则将向 Microsoft 发送一个迷你转储。Microsoft 可能在最新的服务包中或技术支持的 QFE 中提供更新。

备注发生此问题时,在 SQL Server 错误日志文件夹中生成一个小型转储文件。此文件的名称类似于"SQLDumpnn.mdmp"。

原因

此问题可能发生在几种不同的方案中。每个方案具有不同的原因和解决方法,并且每个方案都可能导致出现相同的错误消息和断言。备注

  • 尽管错误签名似乎非常具体,但实际错误是由断言失败引起的。例如,错误可能由在 SQL Server 代码中执行主动检查的断言引起,该断言验证"正常"条件,以便尽可能干净地失败,而不是导致进程范围的崩溃。

  • 您无法轻松确定实际原因。Microsoft 客户支持服务通常确定原因。它通常通过收集主体数据库完整备份文件和涵盖问题时间的事务日志备份来这样做。此外,可能需要镜像的完整进程转储文件才能在特定设置中重现问题。

解决方案

服务包信息

要解决此问题,请获取 SQL Server 版本的最新修补程序。有关详细信息,请参阅下表。

原因

知识库文章

首次固定在

主镜像和镜像之间的不同锁定行为

2938828 FIX:数据库镜像命中断言和镜像会话显示 SQL Server 2012 或 SQL Server 2014 中的挂起状态

2931693 SQL Server 20142931078累积更新 9 的 SQL Server 2012 SP1 累积更新 1

锁升级问题

953625 FIX:SQL Server 2005 同步镜像数据库时错误消息:"表达式:结果 = LCK_OK"

951217 SQL Server 2005 服务包 2 的累积更新包 8

在页面拆分期间锁定迁移

974319 FIX:在 SQL Server 2005、SQL Server 2008 或 SQL Server 2008 R2 中使用数据库镜像时间歇性错误消息和断言失败:"SQL Server 断言:文件:<loglock.cpp>行 #823 失败断言 = '结果 = LCK_OK'"

974648 SQL Server 2005 服务包的累积更新包 6用于SQL Server 2008975977累积更新包 8,用于 SQL Server 2008 服务包 1975976累积更新包 1,用于 SQL Server 2008 R2

批量插入 / BCP,带Check_Constraints关闭

SQL Server 2012

加密密钥的更改:

  • 数据库主密钥

  • 服务器实例主密钥

SQL Server 2012

收缩操作 (PurgeIAM) 与其他事务冲突

982933两台 SQL Server 2005 服务器在数据库镜像中收缩主体上的数据文件时错误消息

983329 SQL Server 2005 服务包 3 的累积更新包 10

页面拆分后跟锁升级,然后是释放和该页面的分配

983564 FIX:在 Microsoft SQL Server 2005、微软 SQL Server 2008 或 Microsoft SQL Server 2008 R2 中使用数据库镜像时出现错误消息,并且断言失败间歇性地发生

983329 SQL Server 2005 服务包的累积更新包 10 为 SQL Server2008服务包 2008 服务包累计更新9,用于 SQL Server 2008 R2

注意

  • 最后一列仅列出包含修补程序的第一个生成。由于 SQL Server 生成是累积的,因此以后的生成(如 SQL Server 2008 R2 SP1)包含这些修补程序。但是,这些生成未在表中列出。

  • 任何晚于 SQL Server 2005 SP3 累积更新 (CU) 10、SQL Server 2008 SP2 CU 1 或 SQL Server 2008 R2 CU3 的生成都包含"lck_ok"断言方案的所有列出的修补程序。在撰写本文时,这些生成至少被一个完整服务包取代。服务包应保护在固定方案中大多数安装的最新 SQL Server 版本。有关如何获取 SQL Server 版本的最新服务包的详细信息,请单击以下文章编号以查看 Microsoft 知识库中的文章:

    913089如何获取 SQL Server 2005968382的最新服务包 如何获取 SQL Server 20082527041的最新服务包 如何获取 SQL Server 2008 R2 的最新服务包

  • 您应该知道,两个方案没有可用的修补程序。原因是这两个问题需要重新体系结构 SQL Server 事务日志内部。此类更改只能包含在 SQL Server 的主要版本中。在这种情况下,问题在 Microsoft SQL Server 2012 中已修复。但是,BCP/批量插入方案很常见。由于 SQL Server 2008 和 SQL Server 2008 R2 的 BCP/Bulk Insert 方案仍未固定,因此它是这些产品当前版本中"lck_ok"断言的最可能已知原因。有关此方案的详细信息,请参阅"详细信息"部分。

  • 本文可能不会反映发布后发现的问题。您可以搜索 Microsoft 知识库以查找任何新的单个"修复"文章(如适用)。

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

更多信息

BCP/批量插入方案

如果以下条件为 true,则 SQL Server 2008 或 SQL Server 2008 R2 镜像集的镜像伙伴上可能会出现 3624 错误以及"结果 = LCK_OK"断言:

  • 主体数据库上正在发生 BCP 或批量插入活动。

  • BCP/批量插入活动使用CHECK_CONSTRAINTS = OFF 选项。备注此选项的默认值为 OFF。

若要解决此问题,请将 CHECK_CONSTRAINTS 选项设置为"打开",以便进行 BCP/批量插入操作。BCP/批量插入操作的性能可能会受到影响。备注SQL Server 2012 不受此问题的影响。

参考

有关软件更新术语的更多信息,请单击下面的文章编号以查看 Microsoft 知识库中的相应文章:

824684 用于描述 Microsoft 软件更新的标准术语的说明

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?

谢谢您的反馈!

×