sp_lock (Transact-SQL)

Se aplica a:SQL Server

Genera información acerca de los bloqueos.

Importante

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Para obtener información sobre los bloqueos en la Motor de base de datos de SQL Server, use la vista de administración dinámica de sys.dm_tran_locks.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]  
[ ; ]  

Argumentos

[ @spid1 = ] 'session ID1'Es un número de identificador de sesión Motor de base de datos de sys.dm_exec_sessions para el que el usuario quiere bloquear información. session ID1 es int con un valor predeterminado de NULL. Ejecute sp_who para obtener información de proceso sobre la sesión. Si no se especifica session ID1 , se muestra información sobre todos los bloqueos.

[ @spid2 = ] 'session ID2'Es otro Motor de base de datos número de identificador de sesión de sys.dm_exec_sessions que podría tener un bloqueo al mismo tiempo que el id. de sesión1 y sobre el que el usuario también quiere información. session ID2 es int con un valor predeterminado de NULL.

Valores de código de retorno

0 (correcto)

Conjuntos de resultados

El conjunto de resultados sp_lock contiene una fila para cada bloqueo mantenido por las sesiones especificadas en los parámetros @spid1 y @spid2 . Si no se especifica ni @spid1 ni @spid2, el conjunto de resultados notifica los bloqueos de todas las sesiones actualmente activas en la instancia del Motor de base de datos.

Nombre de la columna Tipo de datos Descripción
spid smallint Número de identificador de sesión Motor de base de datos para el proceso que solicita el bloqueo.
dbid smallint El número de identificación de la base de datos en la que se mantiene el bloqueo. Puede utilizar la función DB_NAME() para identificar la base de datos.
ObjId int El número de identificación del objeto en el que se mantiene el bloqueo. Puede utilizar la función OBJECT_NAME() en la base de datos relacionada para identificar el objeto. El valor 99 constituye un caso especial que indica un bloqueo en una de las páginas del sistema utilizadas para registrar la asignación de páginas en una base de datos.
IndId smallint Número de identificación del índice en el que se mantiene el bloqueo.
Tipo nchar(4) Tipo de bloqueo.

RID = Bloqueo en una única fila de una tabla identificada por un identificador de fila (RID).

KEY = Bloqueo en un índice que protege un intervalo de claves en transacciones serializables.

PAG = Bloqueo en una página de datos o de índices.

EXT = Bloqueo en una extensión.

TAB = Bloqueo en toda una tabla, incluidos todos los datos y los índices.

DB = Bloqueo en una base de datos.

FIL = Bloqueo en un archivo de base de datos.

APP = Bloqueo en un recurso especificado por la aplicación.

MD = Bloqueos de metadatos o información de catálogo.

HBT = Bloquear en un montón o árbol B (HoBT). Esta información está incompleta en SQL Server.

AU = Bloqueo en una unidad de asignación. Esta información está incompleta en SQL Server.
Recurso nchar(32) El valor que identifica el recurso bloqueado. El formato del valor depende del tipo de recurso identificado en la columna Tipo :

Valor de tipo: valor de recurso

RID: un identificador con formato fileid:pagenumber:rid, donde fileid identifica el archivo que contiene la página, pagenumber identifica la página que contiene la fila y rid identifica la fila específica en la página. fileid coincide con la columna file_id en la vista de catálogo de sys.database_files .

CLAVE: número hexadecimal utilizado internamente por el Motor de base de datos.

PAG: un número con formato idDeArchivo:númeroDePágina, donde idDeArchivo identifica el archivo que contiene la página y númeroDePágina identifica la página.

EXT: un número que identifica la primera página de la extensión. El número tiene un formato idDeArchivo:númeroDePágina.

TAB: no se proporciona información porque la tabla ya está identificada en la columna ObjId .

DB: no se proporciona información porque la base de datos ya está identificada en la columna dbid .

FIL: identificador del archivo, que coincide con la columna file_id en la vista de catálogo de sys.database_files .

APP: un identificador único para el recurso de la aplicación que se está bloqueando. En el formato DbPrincipalId:<first two to 16 characters of the resource string><hashed value>.

MD: varía por tipo de recurso. Para obtener más información, vea la descripción de la columna resource_description en sys.dm_tran_locks (Transact-SQL).

HBT: no se proporciona información. Use la vista de administración dinámica sys.dm_tran_locks en su lugar.

AU: no se proporciona información. Use la vista de administración dinámica sys.dm_tran_locks en su lugar.
Modo nvarchar(8) El modo de bloqueo solicitado. Puede ser:

NULL = No se concede acceso al recurso. Sirve como marcador de posición.

Sch-S = Estabilidad del esquema. Garantiza que un elemento de un esquema, como una tabla o un índice, no se elimine mientras una sesión mantenga un bloqueo de estabilidad del esquema sobre él.

Sch-M = Modificación del esquema. Debe mantenerlo cualquier sesión que desee cambiar el esquema del recurso especificado. Garantiza que ninguna otra sesión se refiera al objeto indicado.

S = Compartido. La sesión que lo mantiene recibe acceso compartido al recurso.

U = Actualizar. Indica que se ha obtenido un bloqueo de actualización sobre recursos que finalmente se pueden actualizar. Se utiliza para evitar una forma común de interbloqueo que tiene lugar cuando varias sesiones bloquean recursos para una posible actualización más adelante.

X = Exclusivo. La sesión que lo mantiene recibe acceso exclusivo al recurso.

IS = Intención compartida. Indica la intención de establecer bloqueos S en algún recurso subordinado de la jerarquía de bloqueos.

IU = Actualizar intención. Indica la intención de establecer bloqueos U en algún recurso subordinado de la jerarquía de bloqueos.

IX = Intención exclusiva. Indica la intención de colocar bloqueos X en algunos recursos subordinados en la jerarquía de bloqueos.

SIU = Actualizar intención compartida. Indica el acceso compartido a un recurso con la intención de obtener bloqueos de actualización sobre recursos subordinados en la jerarquía de bloqueos.

SIX = Intención compartida exclusiva. Indica acceso compartido a un recurso con la intención de obtener bloqueos exclusivos sobre recursos subordinados de la jerarquía de bloqueos.

UIX = Actualizar intención exclusiva. Indica un bloqueo de actualización en un recurso con la intención de adquirir bloqueos exclusivos sobre recursos subordinados en la jerarquía de bloqueos.

BU = Actualización masiva. Utilizado en las operaciones masivas.

RangeS_S = Intervalo de claves compartido y bloqueo de recurso compartido. Indica recorrido de intervalo serializable.

RangeS_U = Intervalo de claves compartido y bloqueo de recurso de actualización. Indica recorrido de actualización serializable.

RangeI_N = Insertar intervalo de claves y bloqueo de recurso Null. Se utiliza para probar los intervalos antes de insertar una clave nueva en un índice.

RangeI_S = Bloqueo de conversión de intervalo de claves. Creado por una superposición de bloqueos RangeI_N y S.

RangeI_U = Bloqueo de conversión de intervalo de claves creado por una superposición de bloqueos RangeI_N y U.

RangeI_X = Bloqueo de conversión de intervalo de claves creado por una superposición de bloqueos RangeI_N y X.

RangeX_S = Bloqueo de conversión de rango de claves creado por una superposición de bloqueos RangeI_N y RangeS_S .

RangeX_U = Bloqueo de conversión de intervalo de claves creado por una superposición de bloqueos RangeI_N y RangeS_U.

RangeX_X = Intervalo de claves exclusivo y bloqueo de recurso exclusivo. Es un bloqueo de conversión que se utiliza cuando se actualiza una clave de un intervalo.
Estado nvarchar(5) Estado de solicitud de bloqueo:

CNVRT: el bloqueo se está convirtiendo desde otro modo, pero la conversión es bloqueada por otro proceso que mantiene un bloqueo con un modo en conflicto.

GRANT: se ha obtenido el bloqueo.

WAIT: el bloqueo es bloqueado por otro proceso que mantiene un bloqueo con un modo en conflicto.

Comentarios

Los usuarios pueden controlar el bloqueo de las operaciones de lectura:

  • Si utilizan SET TRANSACTION ISOLATION LEVEL para especificar el nivel de bloqueo de una sesión. Para ver la sintaxis y las restricciones, consulte SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • Si utilizan sugerencias de tabla de bloqueo para especificar el nivel de bloqueo de una referencia individual de una tabla en una cláusula FROM. Para conocer la sintaxis y las restricciones, consulte Sugerencias de tabla (Transact-SQL).

Todas las transacciones distribuidas no asociadas a una sesión son transacciones huérfanas. El Motor de base de datos asigna todas las transacciones distribuidas huérfanas el valor SPID de -2, lo que facilita a un usuario identificar el bloqueo de transacciones distribuidas. Para más información, vea Usar transacciones marcadas para recuperar bases de datos relacionadas sistemáticamente (modelo de recuperación completa).

Permisos

Requiere el permiso VIEW SERVER STATE.

Ejemplos

A Mostrar todos los bloqueos

En el ejemplo siguiente se muestra información sobre todos los bloqueos que se mantienen actualmente en una instancia del Motor de base de datos.

USE master;  
GO  
EXEC sp_lock;  
GO  

B. Mostrar un bloqueo de un proceso de servidor único

En el ejemplo siguiente se muestra información, incluidos los bloqueos, acerca del proceso con Id. 53.

USE master;  
GO  
EXEC sp_lock 53;  
GO  

Consulte también

sys.dm_tran_locks (Transact-SQL)
DB_NAME (Transact-SQL)
KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL)
sys.database_files (Transact-SQL)
sys.dm_os_tasks (Transact-SQL)
sys.dm_os_threads (Transact-SQL)