sp_lock (Transact-SQL)

Genera información acerca de los bloqueos.

Nota importanteImportante

Esta característica se quitará en una versión futura de Microsoft 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 acerca de los bloqueos en Motor de base de datos de SQL Server, utilice la vista de administración dinámica sys.dm_tran_locks.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • [ @spid1 = ] 'session ID1'
    Es un número de Id. de sesión del Motor de base de datos de sys.dm_exec_sessions, cuya información de bloqueo desea obtener el usuario. session ID1 es de tipo int y su valor predeterminado es NULL. Ejecute sp_who para obtener información del proceso acerca de la sesión. Si no se especifica el parámetro session ID1, se mostrará información acerca de todos los bloqueos.

  • [ @spid2 = ] 'session ID2'
    Es otro número de Id. de sesión del Motor de base de datos de sys.dm_exec_sessions que puede tener un bloqueo al mismo tiempo que session ID1 y del que el usuario también desea obtener información. session ID2 es de tipo int y su valor predeterminado es NULL.

Valores de código de retorno

0 (correcto)

Conjuntos de resultados

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

Nombre de columna

Tipo de datos

Descripción

spid

smallint

Número de Id. de sesión del Motor de base de datos del 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 = Bloqueo en un índice de montón o de árbol b. Esta información está incompleta en SQL Server.

AU = Bloqueo 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 columna Type:

Valor de Type : valor de Resource

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 de la vista de catálogo sys.database_files.

KEY: un número hexadecimal utilizado internamente por 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 proporciona información, puesto que la tabla ya se ha identificado en la columna ObjId.

DB: no proporciona información, puesto que la base de datos ya se ha identificado en la columna dbid.

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

APP: un identificador único para el recurso de la aplicación que se está bloqueando. Tiene el formato DbPrincipleId:<entre los dos y los 16 primeros caracteres de la cadena de recursos><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. Utilice la vista de administración dinámica sys.dm_tran_locks en su lugar.

AU: no se proporciona información. Utilice la vista de administración dinámica sys.dm_tran_locks 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 un esquema, como una tabla o un índice, no se quita mientras una sesión mantiene un bloqueo de estabilidad del esquema sobre dicho elemento.

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.

Status

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 obtener más información acerca de la sintaxis y las restricciones, vea 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 obtener información sobre sintaxis y restricciones, vea 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 a todas las transacciones distribuidas huérfanas el valor de SPID -2, lo que facilita al usuario la identificación de las transacciones distribuidas de bloqueo. Para obtener 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 acerca de todos los bloqueos mantenidos en una instancia de 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

Vea también

Referencia

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)