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 = ] spid1 ]
    [ , [ @spid2 = ] spid2 ]
[ ; ]

Argumentos

[ @spid1 = ] spid1

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

[ @spid2 = ] spid2

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 @spid1 y sobre el que el usuario también quiere información. @spid2 es int, con un valor predeterminado de NULL.

Valores de código de retorno

0 (correcto).

Conjunto de resultados

El sp_lock conjunto de resultados 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 usar la DB_NAME() función para identificar la base de datos.
ObjId int El número de identificación del objeto en el que se mantiene el bloqueo. Puede usar la OBJECT_NAME() función de la base de datos relacionada para identificar el objeto . Un valor de 99 es un caso especial que indica un bloqueo en una de las páginas del sistema usadas 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.
Type nchar(4) Tipo de bloqueo.

RID = Bloquear una sola fila de una tabla identificada por un identificador de fila (RID).
KEY = Bloquear dentro de un índice que protege un intervalo de claves en transacciones serializables.
PAG = Bloquear en una página de datos o índice.
EXT = Bloquear en una extensión.
TAB = Bloquear en toda una tabla, incluidos todos los datos e índices.
DB = Bloquear en una base de datos.
FIL = Bloquear en un archivo de base de datos.
APP = Bloquear un recurso especificado por la aplicación.
MD = Bloquea los metadatos o la información del catálogo.
HBT = Bloquear un montón o un árbol B (HoBT). Esta información está incompleta en SQL Server.
AU = Bloquear en una unidad de asignación. Esta información está incompleta en SQL Server.
Resource nchar(32) El valor que identifica el recurso bloqueado. El formato del valor depende del tipo de recurso identificado en la Type columna:

Type Valor: Resource Valor
RID: un identificador con el formato fileid:pagenumber:rid, donde fileid identifica el archivo que contiene la página, pagenumber identifica la página que contiene la fila e rid identifica la fila específica de la página. fileid coincide con la file_id columna de la vista de sys.database_files catálogo.
KEY: número hexadecimal utilizado internamente por el Motor de base de datos.
PAG: un número con el formato fileid:pagenumber, donde fileid identifica el archivo que contiene la página e pagenumber identifica la página.
EXT: número que identifica la primera página en la extensión. El número tiene el formato fileid:pagenumber.
TAB: no se proporciona información porque la tabla ya está identificada en la ObjId columna.
DB: no se proporciona información porque la base de datos ya está identificada en la dbid columna .
FIL: identificador del archivo, que coincide con la file_id columna de la vista de sys.database_files catálogo.
APP: un identificador único para el recurso de aplicación que se está bloqueando. Con el formato DbPrincipalId:<first two to 16 characters of the resource string><hashed value>.
MD: varía según el tipo de recurso. Para obtener más información, vea la descripción de la resource_description columna en sys.dm_tran_locks.
HBT: no se proporciona información. Use la sys.dm_tran_locks vista de administración dinámica en su lugar.
AU: no se proporciona información. Use la sys.dm_tran_locks vista de administración dinámica en su lugar.
Mode 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 esquema, como una tabla o un índice, no se quita mientras que ninguna sesión contiene un bloqueo de estabilidad de esquema en el elemento de esquema.
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 un bloqueo de actualización adquirido en los recursos que podrían actualizarse finalmente. Se usa para evitar una forma común de interbloqueo que se produce cuando varias sesiones bloquean recursos para la posible actualización en un momento posterior.
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 = Actualización de 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 = Actualización de 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 recursos compartidos. Indica recorrido de intervalo serializable.
RangeS_U = Intervalo de claves compartido y bloqueo de recursos de actualización. Indica recorrido de actualización serializable.
RangeI_N = Insertar intervalo de claves y bloqueo de recursos 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 de 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 intervalo de claves creado por una superposición de RangeI_N y RangeS_S. .
RangeX_U = Bloqueo de conversión de intervalo de claves creado por una superposición de RangeI_N y bloqueos de RangeS_U.
RangeX_X = Intervalo de claves exclusivo y bloqueo de recursos exclusivos. Es un bloqueo de conversión que se utiliza cuando se actualiza una clave de un intervalo.
Status nvarchar(5) Estado de solicitud de bloqueo:

CNVRT: el bloqueo se convierte desde otro modo, pero otro proceso bloquea la conversión que contiene un bloqueo con un modo conflictivo.
GRANT: se obtuvo el bloqueo.
WAIT: otro proceso bloquea el bloqueo que contiene un bloqueo con un modo conflictivo.

Comentarios

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

  • Se usa 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).

  • Usar sugerencias de tabla de bloqueo para especificar el nivel de bloqueo de una referencia individual de una tabla en una FROM cláusula . Para obtener sintaxis y 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 obtener más información, consulte Uso de transacciones marcadas para recuperar bases de datos relacionadas de forma coherente.

Permisos

Requiere el permiso VIEW SERVER STATE.

Ejemplos

A Enumerar 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. Enumeración de 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