2010-10-20 38 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