更改数据库被 -2 阻止

更改数据库被 -2 阻止

我们有一个无法恢复的数据库,因为任何将其置于单用户模式(或脱机)的更改数据库的操作都会失败,因为它被分布式事务阻止。

sp_lock -2 显示以下内容:

spid    dbid    ObjId   IndId   Type    Resource    Mode    Status
-2         7        0       0    DB                    S     GRANT

很显然某物上面有锁。

exec sp_who2显示该数据库没有连接。

select req_transactionUOW
from master..syslockinfo
where req_spid = -2

不返回任何内容(但返回通常的 00000000-0000-0000-0000-000000000000)

在 MSDTC 协调器中,没有标记为“有疑问”的事务。有一个活动事务,但是由于它不是“有疑问”,因此我们无法提交或中止它。

我们如何强制移除该锁?或者我们如何在 MSDTC 中取消该事务

答案1

事实证明这是 SQL Server 2016 和 Java 应用程序中的一个错误:

https://support.microsoft.com/en-us/help/3145492/fix-xa-transactions-aren-t-cleaned-when-you-exit-a-java-application-in

必须打开跟踪标志才能启用修复(3924)

另外,该修复程序存在错误,因此请确保 SQL Server 已更新到最新的 CU

https://support.microsoft.com/en-us/help/4511816/fix-access-violation-occurs-when-you-enable-tf-3924-to-clean-orphaned

以及针对该修复的额外修复
https://support.microsoft.com/en-us/help/4519668/fix-access-violation-occurs-when-you-enable-tf-3924-to-clean-orphaned

升级到 SP2 CU10 并启用跟踪标志 (3924) 后,我不再能重现该问题

相关内容