2008年4月14日 星期一

如何終止一個MSSQL的正常連線 KILL

轉載來源:MS SQL 線上說明



KILL

根據系統處理序 ID (SPID)來結束使用者處理序。如果指定的 SPID 有許多工作需要復原,KILL 可能需要花一些時間才能完成,特別是復原一筆長交易時。
在 MicrosoftR SQL Server? 2000 中,可以使用 KILL 終止正常的連線,亦即終止內部與所給定SPID 關聯的交易。 此外,在使用 Microsoft Distributed Transaction Coordinator (MS DTC) 時,這個命令也可以用來終止所有孤兒分散式交易。分散式交易若未與目前任何的 SPID 產生關聯就是孤兒交易。
語法
KILL {spid UOW} [WITH STATUSONLY]
引數
spid

要終止的系統處理序 ID (SPID)。SPID 值是建立連線時,指定給每一使用者連線的唯一整數 (smallint),但這指派不是永久的。
使用 KILL spid 來終止與給定 SPID 關聯的一般非分散式與分散式交易。
UOW
指定表示 DTC 交易的工作單位 (UOW) ID。 UOW 可能是從 syslockinfo 資料表取得的字元字串。syslockinfo 資料表針對 DTC 交易所存放每一個鎖定給定 UOW。 UOW 也可能從錯誤記錄或 DTC 監視器取得。若需有關監視分散式交易的詳細資訊,請參閱 MS DTC 使用者手冊。
使用 KILL UOW 來結束是孤兒而非可疑的 DTC 交易,其與任何真實的 SPID 無關聯,但與 SPID = '-2' 產生虛擬關聯。 如需 SPID = '-2' 的詳細資訊,請參閱本主題後面的<備註>一節。
WITH STATUSONLY
指定 SQL Server 針對給定的 spid 或正在復原的 UOW 產生進度報表。 帶有 WITH STATUSONLY 的 KILL 命令不會終止或復原 spid 或 UOW。 它只會顯示目前的進度報表。
為了使帶有 WITH STATUSONLY 選項的 KILL 命令成功地產生報表,spid 或 UOW 必須在目前的復原狀態中。 進度報表會表示完成的復原數量 (以百分比表示) 及預估的剩餘時間長度 (以秒為單位),格式如下:
SpidUOW : Transaction rollback in progress. Estimated rollback completion: yy% Estimated time left: zz seconds.
如果在執行帶有 WITH STATUSONLY 選項的 KILL 命令時,已經完成 spid 或 UOW 復原,或者沒有正在復原的 spid 或 UOW,則帶有 WITH STATUSONLY 選項的 KILL 命令將傳回下列錯誤:
Status report cannot be obtained. KILL/ROLLBACK operator for Process IDUOW is not in progress.
執行兩次不含有 WITH STATUSONLY 選項的 KILL spidUOW 命令,可以得到相同的狀態報表;但是,不建議您這樣做。 第二次執行命令可能會終止一個新的處理序,因為該處理序被指派已釋放的 SPID。

備註
KILL 通常是用來終止一個處理序,該處理序是封鎖其它重要且有鎖定的處理序,或終止一個執行使用必要系統資源之查詢的處理序。系統處理序及執行延伸預存程序的處理序無法被終止。
請小心使用 KILL,尤其是執行重要處理序時。您無法刪除自己的處理序。其它不可刪除的處理序如下:
‧ AWAITING COMMAND
‧ CHECKPOINT SLEEP
‧ LAZY WRITER
‧ LOCK MONITOR
‧ SELECT
‧ SIGNAL HANDLER
執行 sp_who 以取得關於有效 SPID 值的報告。 如果針對一特定 SPID 正在進行復原,在 sp_who 結果集中,該特定 SPID 的 cmd 資料行將以 'KILLED/ROLLBACK' 表示。
使用 @@SPID 來顯示在目前工作階段的 SPID 值。
在 SQL Server 2000 中,KILL 命令可以用來解析與非分散式及分散式交易相關的 SPID。KILL 也可以用來解析孤兒或可疑的分散式交易。分散式交易若未與目前任何的 SPID 產生關聯就是孤兒交易。
SPID 值 '-2' 被設定為無連線或孤兒交易的指示器。SQL Server 指派這個值給所有孤兒分散式交易,使得在 sp_lock (spid 資料行)、sp_who (blk 資料行)、syslockinfo 及 sysprocesses 中的交易更容易辨認。此功能在特定連線有資料庫資源鎖定且封鎖交易的進行時很有用。使用者將能辨認擁有此鎖定的 SPID並結束這個連線。
KILL 命令可以用來解析可疑的交易。可疑的交易為未解析的分散式交易,起因於資料庫伺服器或 DTC 協調器的意外重新啟動。 如需解析可疑交易的詳細資訊,請參閱 MS DTC 交易疑難排解。

權限
KILL 權限預設是給 sysadmin 及 processadmin 固定資料庫角色的成員,並且不可轉讓。

範例

A. 使用 KILL 來終止 SPID
這個範例說明如何終止 SPID 53。
KILL 53

B. 使用 KILL spid WITH STATUSONLY 取得進度報表。
本範例將產生特定 spid 的復原處理狀態。
KILL 54
KILL 54 WITH STATUSONLY

--This is the progress report.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C. 使用 KILL 來終止孤兒分散式交易。
此範例顯示如何以終止具 UOW = D5499C66-E398-45CA-BF7E-DC9C194B48CF 的孤兒 (SPID = -2) 交易。
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF'

沒有留言: