共用方式為


KILL (Transact-SQL)

更新: 2006 年 4 月 14 日

根據工作階段識別碼 (SQL Server 2000 或更早版本中的 SPID ) 或工作單位 (UOW) 來結束使用者處理序。如果指定的工作階段識別碼或 UOW 有許多工作要恢復,KILL 陳述式可能需要花一些時間來完成,特別是當它牽涉到回復較長的交易時。

在 Microsoft SQL Server 2000 及更新的版本中,KILL 可用以結束正常的連接,這樣就可在內部結束與指定的工作階段識別碼關聯的交易。當 Microsoft 分散式交易協調器 (MS DTC) 在使用中時,此陳述式也可用以結束被遺棄和不確定的分散式交易。

語法

KILL { session ID | UOW } [ WITH STATUSONLY ] 

引數

  • session ID
    是要結束之處理序的工作階段識別碼。session ID 是在建立連接時,指派給每個使用者連接的唯一整數 (int)。在連接持續時間,工作階段識別碼值會繫結連接。當連接結束時,會釋出這個整數值,它可以重新指派給新的連接。

    請利用 KILL session ID 來結束與指定工作階段識別碼關聯的一般非分散式和分散式交易。

  • UOW
    識別分散式交易的工作單位識別碼 (UOW)。UOW 是可從 sys.dm_tran_locks 動態管理檢視的 request_owner_guid 資料行來取得的 GUID。您也可以從錯誤記錄檔或透過 MS DTC 監視器來取得 UOW。如需有關監視分散式交易的詳細資訊,請參閱 MS DTC 文件集。

    利用 KILL UOW 來結束被遺棄的分散式交易。這些交易並未與任何真正的工作階段識別碼關聯,相反地,它們是人工地關聯於 session ID = '-2'。透過查詢 sys.dm_tran_lockssys.dm_exec_sessionssys.dm_exec_requests 動態管理檢視中的 session ID 資料行,此工作階段識別碼使得識別被遺棄的交易變得更容易。

  • WITH STATUSONLY
    針對先前的 KILL 陳述式而回復的指定 session IDUOW,產生一份進度報告。KILL WITH STATUSONLY 並不會結束或回復 session IDUOW,此命令只會顯示目前的回復進度。

備註

KILL 通常用來結束利用鎖定來封鎖其他重要處理序的處理序,或所執行的查詢在使用必要系統資源的處理序。系統處理序和執行擴充預存程序的處理序無法結束。

使用 KILL 時,要非常小心,當執行重要處理序時,尤其如此。您無法清除自己的處理序。其他不應清除的處理序如下:

  • AWAITING COMMAND
  • CHECKPOINT SLEEP
  • LAZY WRITER
  • LOCK MONITOR
  • SIGNAL HANDLER

請利用 @@SPID 來顯示目前工作階段的工作階段識別碼值。

若要取得使用中工作階段識別碼值的報告,您可以查詢 sys.dm_tran_lockssys.dm_exec_sessions 以及 sys.dm_exec_requests 動態管理檢視中的 session_id 資料行。您也可以檢視由 sp_who 系統預存程序傳回的 SPID 資料行。如果特定 SPID 的回復正在進行中,sp_who 結果集中該 SPID 的 cmd 資料行會指出 KILLED/ROLLBACK。

當特定連接對資料庫資源有鎖定並封鎖另一個連接的進度時,封鎖連接的工作階段識別碼會出現在 sys.dm_exec_requestsblocking_session_id 資料行或是由 sp_who 傳回的 blk 資料行中。

KILL 命令可用來解決不確定的分散式交易。這些交易是未解決的分散式交易,之所以會發生是因為資料庫伺服器或 MS DTC 協調器發生了非計劃的重新啟動。如需有關不確定交易的詳細資訊,請參閱<使用標示的交易 (完整復原模式)>中的「兩階段認可」一節。

使用 WITH STATUSONLY

只有因先前的 KILL session ID|UOW 陳述式使得工作階段識別碼或 UOW 正在回復中時,KILL WITH STATUSONLY 才會產生報表。進度報告會指出已完成的回復量 (百分比) 及估計的剩下時間長度 (以秒為單位),格式如下:

Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds

如果執行 KILL session ID|UOW WITH STATUSONLY 陳述式時,工作階段識別碼或 UOW 的回復已經完成,或沒有回復中的作業階段識別碼或 UOW,KILL session ID|UOW WITH STATUSONLY 便會傳回下列錯誤:

「訊息 6120,層級 16,狀態 1,行 1」

「無法取得狀態報告。處理序識別碼 <session ID> 的回復作業尚未進行。」

您可以重複不含 WITH STATUSONLY 選項的相同 KILL session ID|UOW 陳述式來取得相同的狀態報告,但不建議您這麼做。如果回復已完成,且在執行新的 KILL 陳述式之前,已將工作階段識別碼重新指派給新的工作,重複 KILL session ID 陳述式可能會結束新的處理序。指定 WITH STATUSONLY 會防止發生這個情況。

權限

需要系統管理員 (sysadmin)處理序管理員 (processadmin) 固定資料庫角色中的成員資格。

範例

A. 使用 KILL 來結束工作階段

下列範例顯示如何結束工作階段識別碼 53

KILL 53;
GO

B. 使用 KILL 工作階段識別碼 WITH STATUSONLY 來取得進度報告

下列範例會產生特定工作階段識別碼的回復處理序狀態。

KILL 54;
KILL 54 WITH STATUSONLY;
GO

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

C. 利用 KILL 來結束被遺棄的分散式交易

下列範例顯示如何結束 UOWD5499C66-E398-45CA-BF7E-DC9C194B48CF 的被遺棄分散式交易 (session ID = -2)。

KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';

請參閱

參考

KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
函數 (Transact-SQL)
SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL)
sys.dm_exec_requests
sys.dm_exec_sessions
sys.dm_tran_locks
sp_lock (Transact-SQL)
sp_who (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

變更的內容:
  • 以工作階段識別碼取代 SPID 的參考