Bonjour à tous, dans du code VB.NET, je lance une transaction avec le niveau
d'isolation serializable et je fais une lecture sur une table.
J'aurais aimé savoir si la lecture sur ma table posait le verrou sur mon
enregistrement tout de suite ou attendait l'update pour le poser ?
Car j'ai l'impression que tant que je ne fait pas de modif, il n'y a pas de
verrou posé.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian Robert
Bonjour,
Un select pose bien un verrou, mais de type partagé, c'est à dire qu'il permet d'autres verrous eux aussi partagés, c'est à dire d'autres lectures.
Les modifications doivent elles attendre que tous les verrous partagés soient levées, elles posent quant à elles un verrrou exclusif. Pas d'écriture possible tant qu'une lecture est en cours, ou en tout cas hors de la transaction (toute autre connexion). Les niveaux d'isolation permettent de définir la période pendant laquelle est maintenu le verrou, dans le cas par exemple du COMMITED_READ (option par défaut) il est maintenant juste pendant lexecution du Select. Dans le cas du REPEATABLE_READ (un cran au dessus) il est maintenu jusqu'à la fin de la transaction.
D'autre part le niveau serializable pose un souci du fait qu'il interdit les suppression et les insertion dans la table à d'autres connexion pendant la transaction courante. A moins que ce soit ce que vous souhaitiez évitez ce niveau d'isolation.
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"Vincent" a écrit :
Bonjour à tous, dans du code VB.NET, je lance une transaction avec le niveau d'isolation serializable et je fais une lecture sur une table. J'aurais aimé savoir si la lecture sur ma table posait le verrou sur mon enregistrement tout de suite ou attendait l'update pour le poser ? Car j'ai l'impression que tant que je ne fait pas de modif, il n'y a pas de verrou posé.
Merci d'avance
Bonjour,
Un select pose bien un verrou, mais de type partagé, c'est à dire qu'il
permet d'autres verrous eux aussi partagés, c'est à dire d'autres lectures.
Les modifications doivent elles attendre que tous les verrous partagés
soient levées, elles posent quant à elles un verrrou exclusif. Pas d'écriture
possible tant qu'une lecture est en cours, ou en tout cas hors de la
transaction (toute autre connexion). Les niveaux d'isolation permettent de
définir la période pendant laquelle est maintenu le verrou, dans le cas par
exemple du COMMITED_READ (option par défaut) il est maintenant juste pendant
lexecution du Select. Dans le cas du REPEATABLE_READ (un cran au dessus) il
est maintenu jusqu'à la fin de la transaction.
D'autre part le niveau serializable pose un souci du fait qu'il interdit les
suppression et les insertion dans la table à d'autres connexion pendant la
transaction courante. A moins que ce soit ce que vous souhaitiez évitez ce
niveau d'isolation.
--
Cordialement
Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005
"Vincent" a écrit :
Bonjour à tous, dans du code VB.NET, je lance une transaction avec le niveau
d'isolation serializable et je fais une lecture sur une table.
J'aurais aimé savoir si la lecture sur ma table posait le verrou sur mon
enregistrement tout de suite ou attendait l'update pour le poser ?
Car j'ai l'impression que tant que je ne fait pas de modif, il n'y a pas de
verrou posé.
Un select pose bien un verrou, mais de type partagé, c'est à dire qu'il permet d'autres verrous eux aussi partagés, c'est à dire d'autres lectures.
Les modifications doivent elles attendre que tous les verrous partagés soient levées, elles posent quant à elles un verrrou exclusif. Pas d'écriture possible tant qu'une lecture est en cours, ou en tout cas hors de la transaction (toute autre connexion). Les niveaux d'isolation permettent de définir la période pendant laquelle est maintenu le verrou, dans le cas par exemple du COMMITED_READ (option par défaut) il est maintenant juste pendant lexecution du Select. Dans le cas du REPEATABLE_READ (un cran au dessus) il est maintenu jusqu'à la fin de la transaction.
D'autre part le niveau serializable pose un souci du fait qu'il interdit les suppression et les insertion dans la table à d'autres connexion pendant la transaction courante. A moins que ce soit ce que vous souhaitiez évitez ce niveau d'isolation.
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"Vincent" a écrit :
Bonjour à tous, dans du code VB.NET, je lance une transaction avec le niveau d'isolation serializable et je fais une lecture sur une table. J'aurais aimé savoir si la lecture sur ma table posait le verrou sur mon enregistrement tout de suite ou attendait l'update pour le poser ? Car j'ai l'impression que tant que je ne fait pas de modif, il n'y a pas de verrou posé.