C# 在sql server 2008 R2上运行的进程,spid=-2

C# 在sql server 2008 R2上运行的进程,spid=-2,c#,sql,sql-server-2008-r2,C#,Sql,Sql Server 2008 R2,在Sql Server 2008 R2 SP2上,我无法删除数据库。 错误是:数据库正在使用中 在活动监视器中,我什么也没看到 运行DBCC OPENTRAN时,我看到一个SPID为13s的活动事务。因为“s”我无法杀死它似乎是一个系统事务 以下是命令DBCC opentran的结果: 最早的活动事务: SPID(服务器进程ID):35s UID(用户ID):-1 名称:脱机索引生成 LSN:(4082851:348:145) 开始时间:2014年7月25日下午4:06:51:260 SID:0

在Sql Server 2008 R2 SP2上,我无法删除数据库。 错误是:数据库正在使用中

在活动监视器中,我什么也没看到

运行DBCC OPENTRAN时,我看到一个SPID为13s的活动事务。因为“s”我无法杀死它似乎是一个系统事务

以下是命令DBCC opentran的结果:

最早的活动事务:
SPID(服务器进程ID):35s
UID(用户ID):-1
名称:脱机索引生成
LSN:(4082851:348:145)
开始时间:2014年7月25日下午4:06:51:260
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
如果我用其他namre备份和恢复该数据库,我会遇到同样的问题。所以我想这与未限制的事务有关。当然无法缩小不断增长的原木


每次我们使用使用Microsoft.SqlServer.Management.Smo的C#客户端应用程序时,这个问题似乎都会发生。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的有趣阅读

我在这篇原始文章中发现了这一点:

这里有一些关于spid-2的附加信息,我在下面为您阅读

当用户触发事务时,SPID将关联到MSDTC(),并且 当数据被复制为一个或多个时,事务使用该数据 服务器,因此MSDTC必须协调,以便由SQL db负责 引擎。所以在这类活动中出现了一些问题,比如 MSDTC复制服务器上的任何断电都必须遵循ACID 如果MSDTC无法从这种情况中恢复,请对此进行规则并标记 该SPID转换为或指定的SPID,因此您可以从中看到SPID的变化 +到-ve数字,如-2(在本例中)

你之所以看到这个区块,是因为它仍然持有一些股票 类似的资源可能是页/行或任何其他对象。所以 很明显,这将阻止其他SPID尝试访问的其他SPID 访问相同的

因此Kill命令将不适用于-ve spid,因此您必须 为spid选择工作单元(UOW)id,然后在其上使用kill。。 请注意,您无法停止此类型的活动。。。 发件人:Rama Udaya.K


您是否在SMO驱动的C#应用程序中使用事务?您是否正确地关闭和处理事务和连接?我不使用显式事务,所有连接都在using块中使用。我还必须说,sql 2005上的一切都运行得很好。我认为即使连接在使用块中,仍然有可能保持打开状态,特别是当某些东西仍然需要使用资源时。mungea05,您能否给出一个示例(请允许我提醒您,代码在SQL2005上运行没有任何问题)。是否可以链接到SMO库的版本?请在问题中添加其他信息,目前很难找出问题所在。代码示例库版本等将有助于或指示smo应用程序上正在执行的操作。嗨,OOW id总是guid为空。顺便说一句,DTC事务UI不显示任何信息。我还尝试停止DTC服务,但没有效果。syslockinfo表返回什么返回2行。第一个似乎是我与Sql Management studio之间的联系。我使用了上面的第二个,因为它更具可读性。你的c#应用程序一定做了一些错误的事情。你能告诉我们它做了什么吗?我在上面做了一个更新。源数据库中似乎已经存在问题。因此,每次进行备份/恢复时,我们都会重复该问题。问题1是如何删除该孤立事务,问题2是该问题从何而来(从2005年-->2008年开始迁移?)