KB983516-修复:当两个事务尝试对包含 TABLOCK 锁定提示或 XLOCK 锁定提示的表执行 DML 操作时,将发生死锁。

症状

请考虑 Microsoft SQL Server Compact 3.5 中的以下情形:

  • 你有两个可串行隔离的事务。

  • 两个事务都尝试在包含 TABLOCK 锁定提示或 XLOCK 锁定提示的同一表上执行 DML 操作(查询/DML)。

在这种情况下,你会遇到死锁。

原因

出现此问题的原因是两个事务都等待另一个事务处理 XLOCK。 在编译查询时,两个事务都将获取表上的共享锁,然后保留对可串行隔离的锁。 当两个事务都尝试执行一个执行时,对包含 XLOCK 锁定提示的同一表的查询,这两个事务都等待 XLOCK 的另一个。 因此,会发生死锁。注意当两个事务对包含一个 TABLOCK 锁定提示的同一表执行 DML 操作时,也会发生此问题。

解决方案

SQL Server Compact 3.5 Service Pack 2

此问题的修补程序首次在累积更新2中发布。 有关如何为 SQL Server 2008 R2 获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2289547 SQL Server Compact 3.5 Service Pack 2 的累积更新2

状态

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

更多信息

有关死锁的详细信息,请访问以下 Microsoft 开发人员网络(MSDN)网站:

发生有关 DML 的详细信息,请访问以下 MSDN 网站:

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

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

需要更多帮助?

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

此信息是否有帮助?

谢谢您的反馈意见!

×