SQL SERVER – 檢測LOCK、終止會話 ID/UOW 的用戶進程
KILL { session ID | UOW } [ WITH STATUSONLY ]
參數
session ID
要終止的進程的會話 ID。session ID 是在建立連接時為每個用戶連接分配的唯一整數 (int)。在連接期間,會話 ID 值與該連接捆綁在一起。連接結束時,則釋放該整數值,并且可以將它重新分配給新的連接。
使用 KILL session ID 可終止與指定的會話 ID 關聯的常規非分布式事務和分布式事務。
UOW
標識分布式事務的工作單元 ID (UOW - Unit of Work ID)。UOW is a character string that may be obtained from the syslockinfo table, which gives the UOW for every lock held by a DTC transaction. UOW also may be obtained from the error log or through the DTC monitor.
使用 KILL UOW 可終止孤立的分布式事務。這些事務不與任何真實的會話 ID 相關聯,與虛擬的會話 相關聯。可使標識孤立事務變得更為簡單,其方法是查詢 sys.dm_tran_locks、sys.dm_exec_sessions 或 sys.dm_exec_requests 動態管理視圖中的會話 ID 列。
WITH STATUSONLY
生成由于更早的 KILL 語句而正在回滾的指定 session ID 或 UOW 的進度報告。KILL WITH STATUSONLY 不終止或回滾 session ID 或 UOW,該命令只顯示當前的回滾進度。
DEMO SQL SCRIPT:
sp_lock; -- 顯示SQL SERVER LOCK信息
select object_id('TABLE_NAME')
select object_name(OBJECT_ID)
分別用來顯示 object_id, object_name
select top 10 req_transactionUOW,* From master.dbo.syslockinfo; (nolock) where req_spid=-2
顯示孤立的分布式事務的UOW
KILL '3BD5C9FA-8B56-4B15-9945-D94C2DBD364E'
終止 UOW 為3BD5C9FA-8B56-4B15-9945-D94C2DBD364E的孤立分布式事務(會話 ID = -2)
KILL 73
終止指定會話 ID 73
注意:
1.如果指定的會話 ID 或 UOW 有許多工作要撤消,則 KILL 語句可能需要一些時間來完成,特別是在涉及回滾長事務時。
2.應當小心使用 KILL,特別是正在運行重要進程時。用戶不能取消自己的進程。
SELECT @@SPID
使用 @@SPID 可顯示當前會話的會話 ID 值。
REFERENCE:
1. KILL (Transact-SQL), SQL Server 2005 聯機叢書
http://www.cnblogs.com/rickie/archive/2006/12/31/609242.html
