KILL (Transact-SQL)KILL (Transact-SQL)

Gilt für: JaSQL Server JaAzure SQL-Datenbank JaAzure Synapse Analytics (SQL DW) JaParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Beendet einen Benutzerprozess basierend auf der Sitzungs-ID oder Arbeitseinheit (Unit of Work, UOW).Ends a user process that is based on the session ID or 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.If the specified session ID or UOW has much work to undo, the KILL statement may take some time to complete. Es ist besonders mehr Zeit erforderlich, wenn dabei ein Rollback für eine lange Transaktion ausgeführt wird.The process takes longer to complete particularly when the process involves rolling back a long transaction.

KILL beendet eine normale Verbindung, wodurch die der angegebenen Sitzungs-ID zugeordneten Transaktionen intern angehalten werden.KILL ends a normal connection, which internally stops the transactions that are associated with the specified session ID. Es kann MicrosoftMicrosoft MS DTC (Microsoft Distributed Transaction Coordinator) verwendet werden.At times, MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) might be in use. Wenn MS DTC im Einsatz ist, können Sie die Anweisung auch verwenden, um verwaiste und unsichere verteilte Transaktionen zu beenden.If MS DTC is in use, you can also use the statement to end orphaned and in-doubt distributed transactions.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server  
  
KILL { session ID | UOW } [ WITH STATUSONLY ]   
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
KILL 'session_id'  
[;]   

ArgumenteArguments

Sitzungs-IDsession ID
Die Sitzungs-ID des Prozesses, der beendet werden soll.Is the session ID of the process to end. Die Sitzungs-ID ist eine eindeutige ganze Zahl (int), die jeder Benutzerverbindung beim Herstellen der Verbindung zugewiesen wird.session ID is a unique integer (int) that is assigned to each user connection when the connection is made. Der Sitzungs-ID-Wert ist für die Dauer der Verbindung an die Verbindung gebunden.The session ID value is tied to the connection for the duration of the connection. Beim Beenden der Verbindung wird der ganzzahlige Wert freigegeben und kann einer neuen Verbindung zugewiesen werden.When the connection ends, the integer value is released and can be reassigned to a new connection.
Bei der Suche nach der session_id, die Sie beenden möchten, kann folgende Abfrage hilfreich sein:The following query can help you identify the session_id that you want to kill:

SELECT conn.session_id, host_name, program_name,
    nt_domain, login_name, connect_time, last_request_end_time 
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
   ON sess.session_id = conn.session_id;

UOWUOW
Gilt für: SQL Server 2008SQL Server 2008 bis SQL ServerSQL ServerApplies to: (SQL Server 2008SQL Server 2008 through SQL ServerSQL Server

Identifiziert die Arbeitseinheits-ID (UOW) verteilter Transaktionen.Identifies the Unit of Work ID (UOW) of distributed transactions. UOW ist eine GUID, die aus der Spalte „request_owner_guid“ der dynamischen Verwaltungssicht „sys.dm_tran_locks“ abgerufen werden kann.UOW is a GUID that may be obtained from the request_owner_guid column of the sys.dm_tran_locks dynamic management view. UOW kann auch aus dem Fehlerprotokoll oder über den MS DTC-Monitor ermittelt werden.UOW also can be obtained from the error log or through the MS DTC monitor. Weitere Informationen zum Überwachen von verteilten Transaktionen finden Sie in der MS DTC-Dokumentation.For more information about monitoring distributed transactions, see the MS DTC documentation.

Verwenden Sie KILL UOW zum Beenden verwaister verteilter Transaktionen.Use KILL UOW to stop orphaned distributed transactions. Diese Transaktionen sind keiner echten Sitzungs-ID, sondern künstlich der Sitzungs-ID = '-2' zugeordnet.These transactions aren't associated with any real session ID, but instead are associated artificially with session ID = '-2'. 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.This session ID makes it easier to identify orphaned transactions by querying the session ID column in sys.dm_tran_locks, sys.dm_exec_sessions, or sys.dm_exec_requests dynamic management views.

WITH STATUSONLYWITH STATUSONLY
Generiert einen Fortschrittsbericht für eine angegebene Sitzungs-ID oder UOW, für den aufgrund einer früheren KILL-Anweisung ein Rollback ausgeführt wird.Generates a progress report about a specified session ID or UOW that is being rolled back because of an earlier KILL statement. „KILL WITH STATUSONLY“ beendet die Sitzungs-ID oder UOW nicht und führt kein Rollback aus.KILL WITH STATUSONLY doesn't end or roll back the session ID or UOW. Der Befehl zeigt nur den aktuellen Fortschritt des Rollbacks an.The command only displays the current progress of the rollback.

BemerkungenRemarks

KILL wird häufig verwendet, um einen Prozess zu beenden, der andere wichtige Prozesse mit Sperren blockiert.KILL is commonly used to end a process that is blocking other important processes with locks. KILL kann auch verwendet werden, um einen Prozess zu beenden, der eine Abfrage ausführt, die die notwendigen Systemressourcen benötigt.KILL can also be used to stop a process that is executing a query that is using necessary system resources. Systemprozesse und Prozesse, die eine erweiterte gespeicherte Prozedur ausführen, können nicht beendet werden.System processes and processes running an extended stored procedure can't be ended.

Verwenden Sie KILL sorgfältig, besonders wenn kritische Prozesse ausgeführt werden.Use KILL carefully, especially when critical processes are running. Ihren eigenen Prozess können Sie nicht beenden.You can't kill your own process. Sie sollten auch nicht die folgenden Prozesse beenden:You also shouldn't kill the following processes:

  • AWAITING COMMANDAWAITING COMMAND
  • CHECKPOINT SLEEPCHECKPOINT SLEEP
  • LAZY WRITERLAZY WRITER
  • LOCK MONITORLOCK MONITOR
  • SIGNAL HANDLERSIGNAL HANDLER

Mit @@SPID kann der Sitzungs-ID-Wert der aktuellen Sitzung angezeigt werden.Use @@SPID to display the session ID value for the current session.

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.To obtain a report of active session ID values, query the session_id column of the sys.dm_tran_locks, sys.dm_exec_sessions, and sys.dm_exec_requests dynamic management views. Sie können auch die SPID-Spalte anzeigen, die von der gespeicherten Systemprozedur sp_who zurückgegeben wird.You can also view the SPID column that the sp_who system stored procedure returns. 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.If a rollback is in progress for a specific SPID, the cmd column in the sp_who result set for that SPID indicates 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 blk zurückgegebenen sp_who-Spalte angezeigt.When a particular connection has a lock on a database resource and blocks the progress of another connection, the session ID of the blocking connection shows up in the blocking_session_id column of sys.dm_exec_requests or the blk column returned by sp_who.

Der KILL-Befehl kann zum Auflösen von unsicheren verteilten Transaktionen verwendet werden.The KILL command can be used to resolve in-doubt distributed transactions. 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.These transactions are unresolved distributed transactions that occur because of unplanned restarts of the database server or MS DTC coordinator. Weitere Informationen über unsichere Transaktionen finden Sie im Abschnitt „Zweiphasencommit“ unter Wiederherstellen von verwandten Datenbanken mithilfe von markierten Transaktionen (vollständiges Wiederherstellungsmodell).For more information about in-doubt transactions, see the "Two-Phase Commit" section in Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

Verwenden von WITH STATUSONLYUsing WITH STATUSONLY

KILL WITH STATUSONLY generiert einen Bericht, wenn aufgrund einer früheren Anweisung KILL session ID|UOW ein Rollback für die Sitzungs-ID oder UOW ausgeführt wird.KILL WITH STATUSONLY generates a report if the session ID or UOW rolls back because of a previous KILL session ID|UOW statement. Der Fortschrittsbericht enthält den Prozentsatz, zu dem der Rollbackvorgang abgeschlossen ist, und die geschätzte Dauer der verbleibenden Zeit (in Sekunden)The progress report states the amount of rollback completed (in percent) and the estimated length of time left (in seconds). in folgender Form:The report states it in the following 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 vor der Ausführung der Anweisung KILL session ID|UOW WITH STATUSONLY abgeschlossen, gibt KILL session ID|UOW WITH STATUSONLY folgende Fehlermeldung zurück:If the rollback of the session ID or UOW finishes before the KILL session ID|UOW WITH STATUSONLY statement runs, KILL session ID|UOW WITH STATUSONLY returns the following error:

"Msg 6120, Level 16, State 1, Line 1"  
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

Dieser Fehler wird nur ausgegeben, wenn kein Rollback für die Sitzungs-ID oder UOW ausgeführt wird.This error also occurs if no session ID or UOW is being rolled back

Der gleiche Statusbericht wird durch Wiederholen der gleichen Anweisung KILL session ID|UOW ohne die WITH STATUSONLY-Option erstellt.The same status report can be obtained by repeating the same KILL session ID|UOW statement without using the WITH STATUSONLY option. Es wird allerdings nicht empfohlen, die Option auf diese Weise zu wiederholen.However, we don't recommend repeating the option this way. Durch das Wiederholen einer KILL session ID-Anweisung wird der neue Prozess möglicherweise 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.If you repeat a KILL session ID statement, the new process might stop if the rollback finishes and the session ID is reassigned to a new task before the new KILL statement runs. Durch die Angabe von WITH STATUSONLY kann verhindert werden, dass der neue Prozess beendet wird.Prevent the new process from stopping by specifying WITH STATUSONLY.

BerechtigungenPermissions

SQL ServerSQL Server: Erfordert die ALTER ANY CONNECTION-Berechtigung.SQL ServerSQL Server: Requires the ALTER ANY CONNECTION permission. ALTER ANY CONNECTION ist mit der Mitgliedschaft in den festen Serverrollen sysadmin und processadmin verbunden.ALTER ANY CONNECTION is included with membership in the sysadmin or processadmin fixed server roles.

SQL-DatenbankSQL Database: Erfordert die Berechtigung KILL DATABASE CONNECTION.SQL-DatenbankSQL Database: Requires the KILL DATABASE CONNECTION permission. Das Prinzipalkonto auf Serverebene verfügt über die Berechtigung KILL DATABASE CONNECTION.The server-level principal login has the KILL DATABASE CONNECTION.

BeispieleExamples

A.A. Verwenden von KILL zum Beenden einer SitzungUsing KILL to stop a session

Im folgenden Beispiel wird gezeigt, wie die Sitzungs-ID 53 beendet wird.The following example shows how to stop session ID 53.

KILL 53;  
GO  

B.B. Verwenden von KILL Sitzungs-ID WITH STATUSONLY zum Anzeigen eines FortschrittsberichtsUsing KILL session ID WITH STATUSONLY to obtain a progress report

Im folgenden Beispiel wird ein Statusbericht für den Rollbackvorgang der angegebenen Sitzungs-ID generiert.The following example generates a status of the rollback process for the specific session ID.

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.C. Verwenden von KILL zum Beenden einer verwaisten verteilten TransaktionUsing KILL to stop an orphaned distributed transaction

Im folgenden Beispiel wird gezeigt, wie eine verwaiste verteilte Transaktion (session ID = -2) mit einem UOW von D5499C66-E398-45CA-BF7E-DC9C194B48CF beendet wird.The following example shows how to stop an orphaned distributed transaction (session ID = -2) with a UOW of D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

Weitere InformationenSee Also

KILL STATS JOB (Transact-SQL) KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL) KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Integrierte Funktionen (Transact-SQL) Built-in Functions (Transact-SQL)
SHUTDOWN (Transact-SQL) SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL) @@SPID (Transact-SQL)
sys.dm_exec_requests (Transact-SQL) sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL) sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (Transact-SQL) sys.dm_tran_locks (Transact-SQL)
sp_lock (Transact-SQL) sp_lock (Transact-SQL)
sp_who (Transact-SQL)sp_who (Transact-SQL)