SQL SERVER – 檢測LOCK、終止會(huì)話 ID/UOW 的用戶進(jìn)程
KILL { session ID | UOW } [ WITH STATUSONLY ]
參數(shù)
session ID
要終止的進(jìn)程的會(huì)話 ID。session ID 是在建立連接時(shí)為每個(gè)用戶連接分配的唯一整數(shù) (int)。在連接期間,會(huì)話 ID 值與該連接捆綁在一起。連接結(jié)束時(shí),則釋放該整數(shù)值,并且可以將它重新分配給新的連接。
使用 KILL session ID 可終止與指定的會(huì)話 ID 關(guān)聯(lián)的常規(guī)非分布式事務(wù)和分布式事務(wù)。
UOW
標(biāo)識(shí)分布式事務(wù)的工作單元 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 可終止孤立的分布式事務(wù)。這些事務(wù)不與任何真實(shí)的會(huì)話 ID 相關(guān)聯(lián),與虛擬的會(huì)話 相關(guān)聯(lián)??墒箻?biāo)識(shí)孤立事務(wù)變得更為簡單,其方法是查詢 sys.dm_tran_locks、sys.dm_exec_sessions 或 sys.dm_exec_requests 動(dòng)態(tài)管理視圖中的會(huì)話 ID 列。
WITH STATUSONLY
生成由于更早的 KILL 語句而正在回滾的指定 session ID 或 UOW 的進(jìn)度報(bào)告。KILL WITH STATUSONLY 不終止或回滾 session ID 或 UOW,該命令只顯示當(dāng)前的回滾進(jìn)度。
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
顯示孤立的分布式事務(wù)的UOW
KILL '3BD5C9FA-8B56-4B15-9945-D94C2DBD364E'
終止 UOW 為3BD5C9FA-8B56-4B15-9945-D94C2DBD364E的孤立分布式事務(wù)(會(huì)話 ID = -2)
KILL 73
終止指定會(huì)話 ID 73
注意:
1.如果指定的會(huì)話 ID 或 UOW 有許多工作要撤消,則 KILL 語句可能需要一些時(shí)間來完成,特別是在涉及回滾長事務(wù)時(shí)。
2.應(yīng)當(dāng)小心使用 KILL,特別是正在運(yùn)行重要進(jìn)程時(shí)。用戶不能取消自己的進(jìn)程。
SELECT @@SPID
使用 @@SPID 可顯示當(dāng)前會(huì)話的會(huì)話 ID 值。
REFERENCE:
1. KILL (Transact-SQL), SQL Server 2005 聯(lián)機(jī)叢書
http://www.cnblogs.com/rickie/archive/2006/12/31/609242.html
