2010-10-20 35 views
12

如何杀死或回滚未提交的事务?如何杀死或回滚活动事务?

我列出我的活动事务的SQL语句:

SELECT * FROM sys.dm_tran_session_transactions 

我的结果是:

session_id transaction_id  transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound 
---------------------------------------------------------------------------------------------------------------------- 
54   117260    0x0100000036000000  0   1     1  0   0 

我不想杀死会话(54)...

谢谢全部

+2

我不认为你可以。我想你可以尝试设计一个停止事务的错误,如果“XACT_ABORT”已经打开,它会自动回滚,但是有什么意义?为什么不杀死spid? – 2010-10-20 14:01:29

+0

我不想杀SPID,因为我不想杀死用户的会话,但我想我有做... 我没有任何意见。 – ogun 2010-10-20 14:14:31

+0

他可能不希望用户的连接通过杀死会话而被丢弃。 – orka 2010-10-20 14:17:23

回答

6

您不能杀死/回滚来自另一个会话的事务而不会杀死所有者会话。

我认为,允许杀/回滚来自其他用户的会话交易意味着许多设计和安全规则的侵犯,因为它需要进入另一个用户会话(在当前的SQL Server引擎设计的情况下)。这可能是为什么它没有实施。

+0

我这么认为,谢谢你的回复......我希望能做到。 – ogun 2010-10-20 14:11:15

14

要清除所有事务,只把这个当作一个临时的解决方案

ALTER DATABASE DatabaseName 

SET SINGLE_USER 

WITH ROLLBACK IMMEDIATE; 

ALTER DATABASE DatabaseName 

SET MULTI_USER; 

参考this site更多信息

+0

只把这个当作一个临时的解决方案,因为这将抵消所有transations – 2016-01-08 04:24:29

+0

SQL Server 12.0版 - “ALTER DATABASE语句不允许多语句事务中。” – 2016-05-07 11:53:03

+0

我发现这对(SQL权威.COM的东西),请参阅该网站了解更多详情.... – 2016-05-08 13:52:28