2011-07-26 50 views
23

我有這樣開放的交易,根據DBCC OPENTRAN關閉/殺交易

Oldest active transaction: 
SPID (server process ID) : 54 
UID (user ID)   : -1 
Name      : UPDATE 
LSN      : (4196:12146:1) 
Start time    : Jul 20 2011 12:44:23:590PM 
SID      : 0x01 

有沒有辦法殺它/回滾?

回答

49

你應該首先弄清楚它是什麼做的,它是從哪裏來的,如果適用,可能需要多少時間可以預期來看:

SELECT 
    r.[session_id], 
    c.[client_net_address], 
    s.[host_name], 
    c.[connect_time], 
    [request_start_time] = s.[last_request_start_time], 
    [current_time] = CURRENT_TIMESTAMP, 
    r.[percent_complete], 
    [estimated_finish_time] = DATEADD 
     (
      MILLISECOND, 
      r.[estimated_completion_time], 
      CURRENT_TIMESTAMP 
     ), 
    current_command = SUBSTRING 
     (
      t.[text], 
      r.[statement_start_offset]/2, 
      COALESCE(NULLIF(r.[statement_end_offset], -1)/2, 2147483647) 
     ), 
    module = COALESCE(QUOTENAME(OBJECT_SCHEMA_NAME(t.[objectid], t.[dbid])) 
     + '.' + QUOTENAME(OBJECT_NAME(t.[objectid], t.[dbid])), '<ad hoc>'), 
    [status] = UPPER(s.[status]) 
FROM 
    sys.dm_exec_connections AS c 
INNER JOIN 
    sys.dm_exec_sessions AS s 
    ON c.session_id = s.session_id 
LEFT OUTER JOIN 
    sys.dm_exec_requests AS r 
    ON r.[session_id] = s.[session_id] 
OUTER APPLY 
    sys.dm_exec_sql_text(r.[sql_handle]) AS t 
WHERE 
    c.session_id = 54; 

如果你有信心,你可以切斷這種連接你可以使用:

KILL 54; 

要知道,這取決於會議是這樣做可以讓數據和/或調用它以一種不可思議的狀態的應用程序。

+31

查看服務器上所有打開的事務的另一種簡單方法是在查詢窗口中按下「CTRL + 1」。它顯示當前所有的交易。 –

+7

@SimonDugré這個捷徑可以在選項中進行更改,如果有人改變了它,它將無法按預期工作。相反,我們可以運行存儲過程'sp_who',當你按下ctrl + 1時它實際上會被調用。謝謝 –

+0

@SibeeshVenu,你說得對。好決定。 –