KILL KILL - 北京怡康軟件科技有限公司 資源網(wǎng) "/>
根據(jù)系統(tǒng)進(jìn)程 ID (SPID) 終止用戶(hù)進(jìn)程。如果指定的 SPID 或 UOW 有許多工作要取消,KILL 命令可能需要一些時(shí)間來(lái)完成,特別是在涉及回滾長(zhǎng)事務(wù)時(shí)。
在 Microsoft® SQL Server™ 2000 中,KILL 命令可用來(lái)終止正常連接,這將在內(nèi)部終止與給定 SPID 關(guān)聯(lián)的事務(wù)。另外,在使用 Microsoft 分布式事務(wù)處理協(xié)調(diào)器 (MS DTC) 時(shí),該命令也可用于終止所有孤立的分布式事務(wù)。當(dāng)分布式事務(wù)未與任何當(dāng)前 SPID 關(guān)聯(lián)時(shí),即為孤立的。
KILL {spid | UOW} [WITH STATUSONLY]
spid
是要終止進(jìn)程的系統(tǒng)進(jìn)程 ID (SPID)。SPID 值是當(dāng)用戶(hù)進(jìn)行連接時(shí)指派給該連接的一個(gè)唯一的整數(shù) (smallint),但該指派不是永久的。
使用 KILL spid 終止與給定 SPID 相關(guān)聯(lián)的常規(guī)非分布式和分布式事務(wù)。
UOW
標(biāo)識(shí) DTC 事務(wù)的工作單元 ID (UOW)。UOW 是一個(gè)字符串,可從 syslockinfo 表中獲得,該表把 UOW 賦予每個(gè)由 DTC 事務(wù)控制的鎖。UOW 也可從錯(cuò)誤日志中獲得,或通過(guò) DTC 監(jiān)視器獲得。有關(guān)監(jiān)視分布式事務(wù)的更多信息,請(qǐng)參見(jiàn)"MS DTC 用戶(hù)手冊(cè)"。
使用 KILL UOW 終止孤立的 DTC 事務(wù),這些事務(wù)不與任何真實(shí)的 SPID 關(guān)聯(lián),而是手工與 SPID = '-2' 關(guān)聯(lián)。有關(guān) SPID = '-2' 的更多信息,請(qǐng)參見(jiàn)本主題后面的注釋部分。
WITH STATUSONLY
指定 SQL Server 生成關(guān)于正在回滾的給定 spid 或 UOW 的進(jìn)度報(bào)告。帶 WITH STATUSONLY 的 KILL 命令不終止或回滾 spid 或 UOW,而只顯示當(dāng)前進(jìn)度報(bào)告。
若要使帶 WITH STATUSONLY 選項(xiàng)的 KILL 命令成功地生成報(bào)告,spid 或 UOW 當(dāng)前必須處于回滾狀態(tài)。進(jìn)度報(bào)告指出已完成的回滾量(按百分比計(jì)算)和估計(jì)的剩余時(shí)間(以秒為單位),格式如下:
Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: yy% Estimated time left: zz seconds.
如果執(zhí)行帶 WITH STATUSONLY 選項(xiàng)的 KILL 命令時(shí) spid 或 UOW 回滾已經(jīng)結(jié)束,或者如果沒(méi)有 spid 或 UOW 正在回滾,帶 WITH STATUSONLY 的 KILL 命令將返回下列錯(cuò)誤:
Status report cannot be obtained. KILL/ROLLBACK operator for Process ID|UOW <xxx> is not in progress.
執(zhí)行兩次不帶 WITH STATUSONLY 選項(xiàng)的 KILL spid|UOW 命令可得到同樣的狀態(tài)報(bào)告;但不建議這樣做。第二次執(zhí)行命令可能會(huì)終止已指派給釋放的 SPID 的新進(jìn)程。
KILL 命令通常用于終止這樣一些進(jìn)程,它們鎖住了其它重要進(jìn)程,或者正在執(zhí)行一個(gè)查詢(xún),而該查詢(xún)正在使用必需的系統(tǒng)資源。系統(tǒng)進(jìn)程和運(yùn)行擴(kuò)展存儲(chǔ)過(guò)程的進(jìn)程不能被終止。
應(yīng)當(dāng)小心使用 KILL 命令,特別是正在運(yùn)行重要進(jìn)程時(shí)。用戶(hù)不能取消自己的進(jìn)程。其它不能取消的進(jìn)程包括:
執(zhí)行 sp_who 可得到有效 SPID 值的報(bào)告。如果某個(gè)特定的 SPID 的回滾正在進(jìn)行,則 sp_who 結(jié)果集中的這個(gè) SPID 的 cmd 列將顯示"KILLED/ROLLBACK"。
使用 @@SPID 可顯示當(dāng)前會(huì)話(huà)的 SPID 值。
在 SQL Server 2000 中,KILL 命令可用于解決與非分布式和分布式事務(wù)相關(guān)聯(lián)的 SPID。KILL 還可用于解決孤立的或置疑的分布式事務(wù)。當(dāng)分布式事務(wù)未與任何當(dāng)前 SPID 關(guān)聯(lián)時(shí),即為孤立的。
SPID 值為 '-2' 用于指示無(wú)連接或孤立的事務(wù)。SQL Server 將該值指派給所有孤立的分布式事務(wù),使在 sp_lock(spid 列)、sp_who(blk 列)、syslockinfo 和 sysprocesses 中標(biāo)識(shí)這樣的事務(wù)更容易。當(dāng)特定的連接在數(shù)據(jù)庫(kù)資源上有鎖并阻塞事務(wù)進(jìn)程時(shí),該功能十分有用。用戶(hù)能夠識(shí)別擁有鎖的 SPID,并結(jié)束連接。
KILL 命令可用來(lái)解決懷疑有問(wèn)題的事務(wù),即由于未計(jì)劃重新啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器或 DTC 處理協(xié)調(diào)器而產(chǎn)生的未解決的分布式事務(wù)。有關(guān)解決懷疑有問(wèn)題的事務(wù)的更多信息,請(qǐng)參見(jiàn) MS DTC 事務(wù)疑難解答。
默認(rèn)情況下,sysadmin 和 processadmin 固定數(shù)據(jù)庫(kù)角色的成員具有 KILL 的默認(rèn)權(quán)限,KILL 權(quán)限不可轉(zhuǎn)讓。
下面的示例顯示如何終止 SPID 53。
KILL 53
下面的示例為特定的 spid 生成回滾進(jìn)程的狀態(tài)。
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.
下例說(shuō)明如何使用 UOW = D5499C66-E398-45CA-BF7E-DC9C194B48CF 終止孤立 (SPID = -2) 事務(wù)。
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF'相關(guān)文章