sp_lock (Transact-SQL)
Affiche des informations sur les verrous.
Important
Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Pour obtenir des informations sur les verrous disponibles dans le Moteur de base de données SQL Server, utilisez la vue de gestion dynamique sys.dm_tran_locks.
Syntaxe
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]
[ ; ]
Arguments
[ @spid1 = ] 'session ID1'
Numéro d'ID de session (SPID dans SQL Server 2000 et versions antérieures) du moteur de base de données, issu de sys.dm_exec_sessions et pour lequel l'utilisateur souhaite obtenir des informations de verrouillage. session ID1 est de type int et sa valeur par défaut est NULL. Exécutez sp_who pour obtenir des informations de processus sur la session. Si session ID1 n'est pas spécifié, la procédure affiche des informations sur tous les verrous.[ @spid2 = ] 'session ID2'
Autre numéro d'ID de session du moteur de base de données issu de sys.dm_exec_sessions, qui peut détenir un verrou en même temps que session ID1 et pour lequel l'utilisateur souhaite également obtenir des informations. session ID2 est de type int et sa valeur par défaut est NULL.
Valeurs du code de retour
0 (succès)
Jeux de résultats
Le jeu de résultats sp_lock contient une ligne par verrou détenu par les sessions spécifiées dans les paramètres @spid1 et @spid2. Si ni @spid1 ni @spid2 n'est spécifié, l'ensemble de résultats indique les verrous de toutes les sessions actuellement actives dans l'instance du moteur de base de données.
Nom de colonne |
Type de données |
Description |
---|---|---|
spid |
smallint |
Numéro d'ID de session du moteur de base de données pour le processus qui demande le verrou. |
dbid |
smallint |
Numéro d'identification de la base de données qui contient le verrou. Vous pouvez utiliser la fonction DB_NAME() pour identifier la base de données. |
ObjId |
int |
Numéro d'identification de l'objet sur lequel le verrou est maintenu. Vous pouvez utiliser la fonction OBJECT_NAME() dans la base de données associée pour identifier l'objet. La valeur 99 indique l'existence d'un verrou sur l'une des pages système utilisées pour enregistrer l'allocation des pages dans une base de données. |
indid |
smallint |
Numéro d'identification de l'index sur lequel le verrou est maintenu. |
Type |
nchar(4) |
Type du verrou : RID = verrou sur une seule ligne d'une table, identifiée par un identificateur de ligne (RID). KEY = verrou dans un index qui protège une plage de clés dans les transactions sérialisables. PAG = verrou sur une page de données ou d'index. EXT = verrou sur une extension. TAB = verrou sur une table complète comprenant l'ensemble des index et des données. DB = verrou sur une base de données. FIL = verrou sur un fichier de base de données. APP = verrou sur une ressource spécifiée par l'application. MD = verrous sur des métadonnées ou informations de catalogue. HBT = verrou sur un segment ou index B-Tree. Ces informations sont incomplètes dans SQL Server. AU = verrou sur une unité d'allocation. Ces informations sont incomplètes dans SQL Server. |
Ressource |
nchar(32) |
Valeur identifiant la ressource verrouillée. Le format de la valeur dépend du type de ressource identifiée dans la colonne Type : Valeur Type : Valeur Resource RID : identificateur de la forme fileid:pagenumber:rid, où fileid désigne le fichier contenant la page, pagenumber la page comportant la ligne et rid la ligne spécifique de la page. fileid correspond à la colonne file_id de l'affichage catalogue sys.database_files. KEY : nombre hexadécimal utilisé de manière interne par le moteur de base de données. PAG : nombre de la forme fileid:pagenumber, où fileid identifie le fichier contenant la page et pagenumber la page elle-même. EXT : nombre identifiant la première page de l'extension. Ce nombre est de la forme fileid:pagenumber. TAB : aucune information n'est fournie car la table est déjà identifiée dans la colonne ObjId. DB : aucune information n'est fournie car la base de données est déjà identifiée dans la colonne dbid. FIL : identificateur du fichier, qui correspond à la colonne file_id de l'affichage catalogue sys.database_files. APP : identificateur unique de la ressource d'application verrouillée. Il présente la forme DbPrincipleId:<deux premiers caractères, dans la limite de 16, de la chaîne de ressource><valeur de hachage>. MD : varie d'un type de ressource à l'autre. Pour plus d'informations, consultez la description de la colonne resource_description dans sys.dm_tran_locks (Transact-SQL). HBT : aucune information n'est fournie. Utilisez, à la place, la vue de gestion dynamique sys.dm_tran_locks. AU : aucune information n'est fournie. Utilisez, à la place, la vue de gestion dynamique sys.dm_tran_locks. |
Mode |
nvarchar(8) |
Le mode de verrou est demandé. Valeurs possibles : NULL = aucun accès n'est accordé à la ressource. Sert d'espace réservé. Sch-S = stabilité du schéma. Garantit que l'élément d'un schéma, tel qu'une table ou un index, n'est pas supprimé alors qu'une session contient un verrou de stabilité du schéma sur l'élément du schéma. Sch-M = modification du schéma. Doit être contenu par toute session destinée à modifier le schéma de la ressource spécifiée. Garantit qu'aucune autre session ne fait référence à l'objet indiqué. S = partage. La session maintenant le verrou peut disposer d'un accès partagé à la ressource. U = mise à jour. Indique qu'un verrouillage de mise à jour a été posé sur des ressources qui peuvent finalement être mises à jour. Utilisé pour éviter les formes courantes de blocages qui se produisent lorsque plusieurs sessions verrouillent des ressources en vue d'une mise à jour éventuelle. X = exclusif. La session maintenant le verrou peut disposer d'un accès exclusif à la ressource. IS = partage intentionnel. Indique l'intention de placer des verrous S sur certaines ressources subordonnées dans la hiérarchie de verrouillage. IU = mise à jour intentionnelle. Indique l'intention de placer des verrous U sur certaines ressources subordonnées dans la hiérarchie de verrouillage. IX = exclusion intentionnelle. Indique l'intention de placer des verrous X sur certaines ressources subordonnées dans la hiérarchie de verrouillage. SIU = mise à jour intentionnelle partagée. Signale des accès partagés à une ressource dans le but de poser des verrous de mise à jour sur les ressources subordonnées dans la hiérarchie de verrouillage. SIX = partage intentionnel exclusif. Signale des accès partagés à une ressource dans le but de poser des verrous exclusifs sur les ressources subordonnées dans la hiérarchie de verrouillage. UIX = mise à jour exclusive intentionnelle. Signale un verrou de mise à jour sur une ressource dans le but de poser des verrous exclusifs sur les ressources subordonnées dans la hiérarchie de verrouillage. BU = mise à jour en bloc. Utilisé par les opérations en bloc. RangeS_S = verrou de groupes de clés partagés et de ressources partagées. Indique une analyse de plage sérialisable. RangeS_U = verrou de groupes de clés partagés et de ressources de mise à jour. Indique une analyse de mise à jour sérialisable. RangeI_N = insérer le verrou de groupes de clés et de ressources NULL. Utilisé pour tester les étendues avant l'insertion d'une nouvelle clé dans un index. RangeI_S = verrou de conversion de groupes de clés. Créé par une superposition des verrous RangeI_N et S. RangeI_U = verrou de conversion de groupes de clés créé par une superposition des verrous RangeI_N et U. RangeI_X = verrou de conversion de groupes de clés créé par une superposition des verrous RangeI_N et X. RangeX_S = verrou de conversion de groupes de clés créé par une superposition des verrous RangeI_N et RangeS_S. RangeX_U = verrou de conversion de groupes de clés créé par une superposition des verrous RangeI_N et RangeS_U. RangeX_X = verrou de groupes de clés exclusifs et de ressources exclusives. Verrou de conversion utilisé lors de la mise à jour d'une clé dans une étendue. |
Status |
nvarchar(5) |
État de la demande de verrouillage : CNVRT : le verrou est converti depuis un autre mode, mais la conversion est bloquée par un autre processus qui maintient un verrou dont le mode est en conflit. GRANT : un verrou a été obtenu. WAIT : le verrou est bloqué par un autre processus qui maintient un verrou dont le mode est en conflit. |
Notes
Les utilisateurs peuvent contrôler le verrouillage des opérations de lecture en utilisant :
SET TRANSACTION ISOLATION LEVEL pour spécifier le niveau de verrouillage d'une session. Pour connaître la syntaxe et les restrictions, consultez SET TRANSACTION ISOLATION LEVEL (Transact-SQL) ;
des indicateurs de table de verrouillage pour spécifier le niveau de verrouillage d'une référence spécifique d'une table dans une clause FROM. Pour connaître la syntaxe et les restrictions, consultez Indicateurs de table (Transact-SQL).
Pour plus d'informations sur les types de verrous utilisés par le moteur de base de données, consultez Verrouillage du moteur de base de données.
Toutes les transactions distribuées qui ne sont pas associées à une session sont des transactions orphelines. Dans le moteur de base de données, toutes les transactions distribuées orphelines reçoivent la valeur SPID -2, ce qui permet aux utilisateurs d'identifier facilement les transactions de distribution de blocage. Pour plus d'informations, consultez Utilisation des transactions marquées (mode de sauvegarde complète).
Autorisations
Nécessite l'autorisation VIEW SERVER STATE.
Exemples
A. Affichage de tous les verrous
L'exemple suivant affiche des informations sur tous les verrous actuellement maintenus dans une instance du moteur de base de données.
USE master;
GO
EXEC sp_lock;
GO
B. Affichage des verrous d'un processus de serveur unique
L'exemple suivant affiche des informations, notamment à propos des verrous, sur l'ID de processus 53.
USE master;
GO
EXEC sp_lock 53;
GO