在 Sql Server 2008 R2 SP2 上,我无法删除数据库。
错误是:数据库正在使用中。
查看事件监视器,我什么也没看到
运行 DBCC OPENTRAN 我看到一个带有 SPID: 13s 的事件事务。由于 's' 我无法杀死似乎是系统事务。
这是命令 DBCC opentran 的结果:Oldest active transaction: SPID (server process ID): 35s UID (user ID) : -1 Name : offline index build LSN : (4082851:348:145) Start time : Jul 25 2014 4:06:51:260PM SID : 0x0
syslockinfo lokk 的内容是这样的:
rsc_text rsc_bin rsc_valblk rsc_dbid rsc_indid rsc_objid rsc_type rsc_flag req_mode req_status req_refcnt req_cryrefcnt req_lifetime req_spid req_ecid req_ownertype req_transactionID req_transactionUOW
-------------------------------- ---------------------------------- ---------------------------------- -------- --------- ----------- -------- -------- -------- ---------- ---------- ------------- ------------ ----------- ----------- ------------- -------------------- ------------------------------------
0x00000000000000000000000016000200 0x00000000000000000000000000000000 22 0 0 2 0 3 1 1 0 0 -2 0 4 0 00000000-0000-0000-0000-000000000000
0x00000000000000000000000016000200 0x00000000000000000000000000000000 22 0 0 2 0 3 1 1 0 0 122 0 4 0 00000000-0000-0000-0000-000000000000
如果我使用其他名称对该数据库进行备份和还原,则会遇到同样的问题。所以我想这与未提交的交易有关。当然无法收缩不断增长的日志。
每次我们使用使用 Microsoft.SqlServer.Management.Smo 的 C# 客户端应用程序时,似乎都会发生这个问题
事实上,来自我们备份的女巫的源数据库已经包含了 spid=-2 的事务。所以它与 C# 客户端没有任何关系。
问题是 我们怎样才能摆脱源数据库中的 -2 事务?
任何有助于理解问题的帮助都会很棒!
谢谢,
最佳答案
SPID -2 是孤立的 DTC 事务。
您可以通过以下查询找到有关 SPID-2 的信息(UOW 编号或工作单元编号):
select req_transactionUOW
from master..syslockinfo
where req_spid = -2
您无法正常终止此类进程,因此您需要 UOW id 才能这样做。
以下命令可用于终止 GUID 编号是上述查询找到的工作单元 ID 的进程。
KILL 'C2645B98-2962-4c3e-83AC-8A5626A0C0A3'
下面是一些关于 sql server 中的负 spid id 的有趣读物。
我从这篇原始帖子中找到了这个:http://social.msdn.microsoft.com/forums/sqlserver/en-US/c856fb4b-9c61-4180-a172-f6ceed5b0c45/blocking-caused-by-2-spid
那里有一些关于 spid -2 的附加信息,我已将其放在下面供您阅读。
关于c# - 在 spid = -2 的 sql server 2008 R2 上运行的进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24786405/