Verrous exclusifs
Les verrous exclusifs (X) empêchent l'accès à une ressource par des transactions simultanées. Un verrou exclusif
(X) empêche toute autre transaction de modifier les données ; les opérations de lecture ne peuvent avoir lieu
qu'avec l'indicateur NOLOCK ou le niveau d'isolation « lecture non validée ».
Les instructions qui modifient les données telles que INSERT, UPDATE et DELETE combinent des opérations
de modification et de lecture. Elles commencent par les opérations de lecture pour obtenir les données, puis elles
effectuent les opérations de modification. Par conséquent, les instructions qui modifient les données demandent
généralement à la fois des verrous partagés et des verrous exclusifs. Ainsi, une instruction UPDATE peut
modifier les lignes d'une table en fonction d'une jointure avec une autre table. Dans ce cas, l'instruction
UPDATE demande des verrous partagés sur les lignes lues dans la table jointe en plus des verrous exclusifs sur
les lignes mises à jour.
Verrous intentionnels
Le moteur de base de données utilise des verrous intentionnels pour protéger le placement de verrous partagés
(S) ou exclusifs (X) sur une ressource hiérarchiquement inférieure. Les verrous intentionnels sont appelés ainsi
parce qu'ils sont obtenus avant un verrou de niveau inférieur et signalent par conséquent l'intention de placer des
verrous à un niveau inférieur.
Les verrous intentionnels ont deux fonctions :
1 - Empêcher les autres transactions de modifier la ressource de niveau supérieur de façon à invalider le verrou
au niveau inférieur.
2 - Améliorer l'efficacité du moteur de base de données en matière de détection de conflits de verrous au plus
haut niveau de granularité.
Par exemple, un verrou de partage intentionnel est demandé au niveau table avant une demande de verrous
partagés (S) sur les pages ou les lignes de cette table. Un verrou intentionnel placé au niveau de la table empêche
une autre transaction d'acquérir un verrou exclusif (X) sur la table contenant cette page. Les verrous intentionnels
améliorent les performances, car le moteur de base de données n'examine les verrous intentionnels qu'au niveau
des tables afin de déterminer si une transaction peut acquérir un verrou en toute sécurité sur chaque table. Cela
supprime la nécessité d'examiner chaque verrou de ligne ou page pour déterminer si une transaction peut
verrouiller la table entière.
Les verrous intentionnels comprennent les verrous de partage intentionnel (IS), d'exclusion intentionnelle (IX),
et de partage intentionnel exclusif (SIX).
Partage intentionnel (IS)
Protège les verrous partagés demandés ou acquis sur certaines ressources (mais pas toutes) de niveau inférieur
dans la hiérarchie.
Exclusion intentionnelle (IX)
Protège les verrous exclusifs demandés ou acquis sur certaines ressources (mais pas toutes) de niveau inférieur
dans la hiérarchie. IX est un sur-ensemble du mode IS qui protège également les demandes de verrou partagé sur
des ressources de niveau inférieur.
Partage d'exclusion intentionnelle (SIX)
Protège les verrous partagés (S) demandés ou acquis sur toutes les ressources de niveau inférieur dans la
hiérarchie et les verrous d'exclusion intentionnelle sur certaines ressources de niveau inférieur (mais pas toutes).
Les lectures simultanées sur les ressources de niveau supérieur sont autorisées. Par exemple, l'obtention d'un
verrou SIX sur une table permet également d'obtenir des verrous d'exclusion intentionnelle sur les pages
modifiées et des verrous exclusifs sur les lignes modifiées. Il ne peut y avoir qu'un seul verrou SIX par ressource
à la fois pour empêcher la mise à jour des ressources par une autre transaction, bien que cette dernière peut lire
les ressources inférieures dans la hiérarchie en obtenant des verrous IS au niveau des tables.