Freigeben über


KILL (Transact-SQL)

Beendet einen Benutzerprozess basierend auf der Sitzungs-ID (SPID in SQL Server 2000 oder früher) oder Arbeitseinheit (Unit of Work, UOW). Falls für die angegebene Sitzungs-ID oder UOW viele Vorgänge rückgängig gemacht werden müssen, kann die KILL-Anweisung einige Zeit in Anspruch nehmen, besonders wenn dabei ein Rollback für eine lange Transaktion ausgeführt wird.

In SQL Server 2000 und höheren Versionen kann KILL verwendet werden, um eine normale Verbindung zu beenden, wodurch die der angegebenen Sitzungs-ID zugeordneten Transaktionen intern beendet werden. Die Anweisung kann auch verwendet werden, um verwaiste und unsichere verteilte Transaktionen zu beenden, wenn Microsoft Distributed Transaction Coordinator (MS DTC) verwendet wird.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

KILL { session ID | UOW } [ WITH STATUSONLY ] 

Argumente

  • session ID
    Die Sitzungs-ID des zu beendenden Prozesses. session ID ist eine eindeutige ganze Zahl (int), die jeder Benutzerverbindung beim Herstellen der Verbindung zugewiesen wird. Der Sitzungs-ID-Wert ist für die Dauer der Verbindung an die Verbindung gebunden. Beim Beenden der Verbindung wird der ganzzahlige Wert freigegeben und kann einer neuen Verbindung zugewiesen werden.

    Verwenden Sie KILL session ID, um reguläre verteilte und nicht verteilte Transaktionen zu beenden, die einer bestimmten Sitzungs-ID zugeordnet sind.

  • UOW
    Identifiziert die Arbeitseinheits-ID (Unit of Work, UOW) verteilter Transaktionen. UOW ist ein GUID, der aus der request_owner_guid-Spalte der dynamischen Verwaltungssicht sys.dm_tran_locks abgerufen werden kann. UOW kann auch aus dem Fehlerprotokoll oder über den MS DTC-Monitor ermittelt werden. Weitere Informationen zum Überwachen von verteilten Transaktionen finden Sie in der MS DTC-Dokumentation.

    Verwenden Sie KILL UOW zum Beenden verwaister verteilter Transaktionen. Diese Transaktionen sind keiner echten Sitzungs-ID, sondern künstlich der Sitzungs-ID = '-2' zugeordnet. Diese Sitzungs-ID ermöglicht das Identifizieren verwaister Transaktionen, indem die Sitzungs-ID-Spalte in den dynamischen Verwaltungssichten sys.dm_tran_locks, sys.dm_exec_sessions oder sys.dm_exec_requests abgefragt wird.

  • WITH STATUSONLY
    Generiert einen Fortschrittsbericht für einen angegebenen session ID- oder UOW-Wert, für den aufgrund einer früheren KILL-Anweisung ein Rollback ausgeführt wird. Durch KILL WITH STATUSONLY wird der durch session ID oder UOW angegebene Prozess weder beendet noch wird ein Rollback ausgeführt. Es wird lediglich der aktuelle Fortschritt des Rollbacks angezeigt.

Hinweise

KILL wird üblicherweise zum Beenden von Prozessen verwendet, die andere wichtige Prozesse mit Sperren blockieren, oder von Prozessen, die Abfragen ausführen, die dringend benötigte Systemressourcen belegen. Systemprozesse und Prozesse, die eine erweiterte gespeicherte Prozedur ausführen, können nicht beendet werden.

Verwenden Sie KILL sehr sorgfältig, besonders wenn kritische Prozesse ausgeführt werden. Ihren eigenen Prozess können Sie nicht beenden. Auch die folgenden Prozesse sollten Sie nicht beenden:

  • AWAITING COMMAND

  • CHECKPOINT SLEEP

  • LAZY WRITER

  • LOCK MONITOR

  • SIGNAL HANDLER

Mit @@SPID kann der Sitzungs-ID-Wert der aktuellen Sitzung angezeigt werden.

Sie können die session_id-Spalte der dynamischen Verwaltungssichten sys.dm_tran_locks, sys.dm_exec_sessions und sys.dm_exec_requests abfragen, um einen Bericht über die aktiven Sitzungs-ID-Werte zu erhalten. Sie können auch die SPID-Spalte anzeigen, die von der gespeicherten Systemprozedur sp_who zurückgegeben wird. Wenn für einen bestimmten SPID-Wert ein Rollback ausgeführt wird, enthält die cmd-Spalte im sp_who-Resultset für diesen SPID-Wert den Eintrag KILLED/ROLLBACK.

Wenn eine bestimmte Verbindung eine Datenbankressource sperrt und den Fortschritt einer anderen Transaktion blockiert, wird die Sitzungs-ID der blockierenden Verbindung in der blocking_session_id-Spalte von sys.dm_exec_requests oder der von sp_who zurückgegebenen blk-Spalte angezeigt.

Der KILL-Befehl kann zum Auflösen von unsicheren verteilten Transaktionen verwendet werden. Bei diesen Transaktionen handelt es sich um nicht aufgelöste verteilte Transaktionen, die aufgrund unplanmäßiger Neustarts des Datenbankservers oder von MS DTC (Microsoft Distributed Transaction Coordinator) auftreten. Weitere Informationen zu unsicheren Transaktionen finden Sie im Abschnitt zum Zweiphasencommit in Verwenden markierter Transaktionen (vollständiges Wiederherstellungsmodell).

Verwenden von WITH STATUSONLY

KILL WITH STATUSONLY generiert nur dann einen Bericht, wenn aufgrund einer früheren KILL session ID|UOW-Anweisung derzeit ein Rollback für die Sitzungs-ID oder UOW ausgeführt wird. Der Fortschrittsbericht enthält den Prozentsatz, zu dem der Rollbackvorgang abgeschlossen ist, und die geschätzte Dauer der verbleibenden Zeit (in Sekunden) in folgender Form:

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

Ist das Rollback der Sitzungs-ID oder UOW zum Zeitpunkt der Ausführung der KILL session ID|UOW WITH STATUSONLY-Anweisung bereits abgeschlossen oder wird kein Rollback für die Sitzungs-ID oder UOW ausgeführt, gibt KILL session ID|UOW WITH STATUSONLY folgende Fehlermeldung zurück:

"Meldung 6120, Ebene 16, Status 1, Zeile 1"

"Der Statusbericht kann nicht abgerufen werden. Der Rollbackvorgang für die Prozess-ID <session ID> wird zurzeit nicht ausgeführt."

Der gleiche Statusbericht wird durch Wiederholen der gleichen KILL session ID|UOW-Anweisung ohne die WITH STATUSONLY-Option erstellt. Dies wird allerdings nicht empfohlen. Durch das Wiederholen einer KILL session ID-Anweisung wird möglicherweise ein neuer Prozess beendet, falls das Rollback bereits abgeschlossen war und die Sitzungs-ID vor der Ausführung der neuen KILL-Anweisung einem neuen Task zugewiesen worden ist. Mit der Angabe von WITH STATUSONLY wird dies verhindert.

Berechtigungen

Erfordert die ALTER ANY CONNECTION-Berechtigung. ALTER ANY CONNECTION ist mit der Mitgliedschaft in den festen Serverrollen sysadmin und processadmin verbunden.

Beispiele

A. Verwenden von KILL zum Beenden einer Sitzung

Im folgenden Beispiel wird gezeigt, wie die Sitzungs-ID 53 beendet wird.

KILL 53;
GO

B. Verwenden von KILL Sitzungs-ID WITH STATUSONLY zum Anzeigen eines Fortschrittsberichts

Im folgenden Beispiel wird ein Statusbericht für den Rollbackvorgang der angegebenen Sitzungs-ID generiert.

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. Verwenden von KILL zum Beenden einer verwaisten verteilten Transaktion

Im folgenden Beispiel wird gezeigt, wie eine verwaiste verteilte Transaktion (Sitzungs-ID = -2) mit dem UOW-Wert D5499C66-E398-45CA-BF7E-DC9C194B48CF beendet wird.

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

Änderungsverlauf

Aktualisierter Inhalt

Es wurden ausführlichere Berechtigungsanweisungen bereitgestellt.