KILL (Transact-SQL)

Actualizado: 14 de abril de 2006

Termina un proceso de usuario basado en el Id. de sesión (SPID en SQL Server 2000 y en versiones anteriores) o la unidad de trabajo (UOW). Si el Id. de sesión o UOW especificado tiene que deshacer muchas operaciones, puede que la instrucción KILL tarde en completarse, especialmente cuando implique revertir una transacción larga.

En Microsoft SQL Server 2000 y en versiones posteriores se puede utilizar KILL para finalizar una conexión normal, que finaliza internamente las transacciones asociadas con el Id. de sesión especificado. La instrucción también se puede utilizar para finalizar transacciones distribuidas huérfanas y dudosas cuando se está utilizando el Coordinador de transacciones distribuidas de Microsoft (MS DTC).

Sintaxis

KILL { session ID | UOW } [ WITH STATUSONLY ] 

Argumentos

  • session ID
    Id. de sesión del proceso que se va a terminar. session ID es un entero único (int) asignado a cada conexión de usuario en el momento de realizarla. El valor del Id. de sesión asociado con la conexión mientras ésta dure. Cuando la conexión finaliza, el valor entero se libera y se puede volver a asignar a una nueva conexión.

    Use KILL session ID para terminar transacciones normales no distribuidas y distribuidas asociadas a un Id. de sesión especificado.

  • UOW
    Identifica el Id. de unidad de trabajo (UOW) de las transacciones distribuidas. UOW es un GUID que puede obtenerse a partir de la columna request_owner_guid de la vista de administración dinámica sys.dm_tran_locks. UOW también puede obtenerse a partir del registro de errores o del monitor MS DTC. Para obtener más información sobre cómo supervisar transacciones distribuidas, consulte la documentación de MS DTC.

    Use KILL UOW para terminar transacciones distribuidas huérfanas. Estas transacciones no están asociadas a ningún Id. de sesión real, sino que se asocian artificialmente al Id. de sesión = '-2'. Este Id. de sesión facilita la identificación de las transacciones huérfanas al consultar la columna de Id. de sesión en las vistas de administración dinámica sys.dm_tran_locks, sys.dm_exec_sessions o sys.dm_exec_requests .

  • WITH STATUSONLY
    Genera un informe de progreso de un session ID o UOW especificado que se está revirtiendo a causa de una instrucción KILL anterior. KILL WITH STATUSONLY no termina ni revierte el session ID o UOW; el comando sólo muestra el progreso actual de la reversión.

Notas

KILL se utiliza normalmente para terminar un proceso que está impidiendo la ejecución de otros procesos mediante bloqueos, o un proceso que está ejecutando una consulta que utiliza recursos necesarios del sistema. No se pueden terminar los procesos del sistema ni los procesos que ejecutan un procedimiento almacenado extendido.

Utilice KILL con mucho cuidado, especialmente cuando se estén ejecutando procesos críticos. Los procesos propios no se pueden eliminar. Otros procesos que no se deben eliminar son:

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

Use @@SPID para mostrar el valor del Id. de sesión de la sesión actual.

Para obtener un informe de los valores de los Id. de sesión activos, puede consultar la columna session_id de las vistas de administración dinámica sys.dm_tran_locks, sys.dm_exec_sessions y sys.dm_exec_requests. También puede ver la columna SPID devuelta por el procedimiento almacenado del sistema sp_who. Si se está realizando la reversión de un SPID determinado, la columna cmd del conjunto de resultados sp_who para ese SPID indicará KILLED/ROLLBACK.

Cuando una conexión específica tiene un bloqueo aplicado a un recurso de base de datos y bloquea el progreso de otra conexión, el Id. de sesión de la conexión que bloquea se muestra en la columna blocking_session_id de sys.dm_exec_requests o en la columna blk devuelta por sp_who.

El comando KILL puede utilizarse para resolver transacciones distribuidas dudosas. Estas transacciones son transacciones distribuidas sin resolver que se producen a causa de reinicios no planeados del servidor de la base de datos o del coordinador de MS DTC. Para obtener más información sobre transacciones dudosas, vea la sección "Confirmación en dos fases", en Usar transacciones marcadas (modelo de recuperación completa).

Usar WITH STATUSONLY

KILL WITH STATUSONLY sólo genera un informe si el Id. de sesión o UOW se está revirtiendo actualmente a causa de una instrucción KILL session ID|UOW anterior. El informe de progreso indica la cantidad de operaciones de reversión completadas, expresada en porcentaje, y la estimación de tiempo restante, expresada en segundos, de esta forma:

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

Si la reversión del Id. de sesión o UOW ha finalizado cuando se ejecuta la instrucción session ID|UOW WITH STATUSONLY, o si no se está revirtiendo ningún Id. de sesión o UOW, KILL session ID|UOW WITH STATUSONLY devolverá el siguiente error:

"Mensaje 6120, nivel 16, estado 1, línea 1"

"No se pudo obtener un informe de estado. No hay ninguna operación Deshacer en curso para el Id. de proceso <Id. de sesión>."

Se puede obtener el mismo informe de estado si se repite la misma instrucción KILL session ID|UOW sin la opción WITH STATUSONLY, aunque no se recomienda hacerlo. Repetir una instrucción KILL session ID puede terminar un proceso nuevo si la operación de revertir había finalizado y el Id. de sesión se volvió a asignar a una nueva tarea antes de ejecutar la nueva instrucción KILL. Si se especifica WITH STATUSONLY se evita que suceda esto.

Permisos

Debe pertenecer a las funciones fijas de base de datos sysadmin y processadmin.

Ejemplos

A. Usar KILL para terminar una sesión

En el siguiente ejemplo se muestra cómo terminar el Id. de sesión 53.

KILL 53;
GO

B. Usar KILL Id. de sesión WITH STATUSONLY para obtener un informe de progreso

En el siguiente ejemplo se genera un estado del proceso de revertir para el Id. de sesión específico.

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. Usar KILL para terminar una transacción distribuida huérfana

En el siguiente ejemplo se muestra cómo terminar una transacción distribuida huérfana (Id. de sesión = -2) con UOWD5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

Vea también

Referencia

KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Funciones (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)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido modificado:
  • Se han sustituido las referencias a SPID por referencias a Id. de sesión.