sp_lock (Transact-SQL)
Genera información acerca de los bloqueos.
Importante |
---|
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 SQL Server Database Engine (Motor de base de datos de SQL Server), utilice la vista de administración dinámica sys.dm_tran_locks. |
Sintaxis
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]
[ ; ]
Argumentos
[ @spid1 = ] 'session ID1'
Es un número de Id. de sesión (SPID en SQL Server 2000 y en versiones anteriores) del Database Engine (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 Database Engine (Motor de base de datos) de sys.dm_exec_sessions que puede tener un bloqueo a la vez que session ID1 y sobre el 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 Database Engine (Motor de base de datos).
Nombre de columna |
Tipo de datos |
Descripción |
---|---|---|
spid |
smallint |
Número de Id. de sesión del Database Engine (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. |
Type |
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 idDeArchivo:númeroDePágina:idDeFila, donde idDeArchivo identifica el archivo que contiene la página, númeroDePágina identifica la página que contiene la fila e idDeFila identifica la fila específica en la página. El valor de idDeArchivo coincide con la columna file_id de la vista de catálogo sys.database_files. KEY: un número hexadecimal utilizado internamente por Database Engine (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 intervalo 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. |
Notas
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 más información acerca de la sintaxis y las restricciones, vea Sugerencias de tabla (Transact-SQL).
Para obtener más información acerca de los tipos de bloqueo utilizados por el Database Engine (Motor de base de datos), vea Bloquear el motor de base de datos.
Todas las transacciones distribuidas no asociadas a una sesión son transacciones huérfanas. El Database Engine (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 (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 Database Engine (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