如何杀死或回滚活动事务?

时间:2010-10-20 13:16:04

标签: sql sql-server tsql

如何杀死或回滚未提交的交易?

我使用以下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 个答案:

答案 0 :(得分:19)

要清除所有交易,请仅将其用作临时解决方案

ALTER DATABASE DatabaseName

SET SINGLE_USER

WITH ROLLBACK IMMEDIATE;

ALTER DATABASE DatabaseName

SET MULTI_USER;

请参阅this site了解更多信息

要检查的要点 - 它还会回滚已提交的交易

答案 1 :(得分:7)

如果不终止所有者会话,则无法从其他会话中终止/回滚事务。

我认为,允许从另一个用户的会话中杀死/回滚事务意味着许多设计和安全规则违规,因为它需要进入另一个用户会话(在当前sql server引擎设计的上下文中)。这可能就是它未实施的原因。