Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SP et Transactions imbriquées et Verrou

2 réponses
Avatar
Francky
Bonjour

J'ai une 1ere procédure stockée qui ouvre une transaction avec un "BEGIN
TRAN T", suivis par diverses instructions de UPDATE/INSERT/SELECT/DELETE et
vers le milieu de la SP j'execute une 2eme SP (dont je récupere la valeur)
qui contient aussi un "BEGIN TRAN T" et des instructions
UPDATE/INSERT/SELECT/DELETE sur les mêmes tables que ceux de la 1ere SP.
Mais j'ai un probleme, en plein milieu de la 2eme procedure stocké, j'ai
l'impression que y'a un blocage.... Ma requete tourne eternellement, je ne
sais aps ce qui se passe alors je l'arrete.

Ma question est très simple. Apres un BEGIN TRAN, toutes les tables sur
lesquel on va travailler après seront verouillés, ma question est que comme
dans la 1ere SP je verouille des tables, et que dans la 2eme SP (que
j'appelle depuis la 1ere SP) je travaille sur les meme tables, est-ce que je
ne serai pas confronté à un verrou mortel qui fait que j'ai le sentiment que
ca bloque?

2 réponses

Avatar
Sylvain Lafontaine
SQL-Server ne supporte pas les transactions imbriquées, la deuxième SP
s'exécute donc dans le même contexte transactionel que la première SP. Pour
SQL-Server, les BEGIN TRAN qui suivent un premier BEGIN TRAN ne servent qu'à
augmenter un compteur et les COMMIT TRAN à le diminuer. Cependant, un
ROLLBACK ne diminuera pas le compteur mais va le mettre à zéro: dès qu'un
rollback est rencontré, la transaction entière est automatiquement stoppé;
c'est pourquoi il est important de toujours vérifier la valeur du compteur
@@TRANCOUNT juste avant de faire un COMMIT ou un ROLLBACK.

À mon avis, votre problème ne peut donc pas provenir d'un problème de
verrou.

Pour ce qui est de votre deuxième énoncé, « Apres un BEGIN TRAN, toutes les
tables sur lesquel on va travailler après seront verouillés », cela est
potentiellement faux puisque les verrous ne fonctionnent pas nécessairement
au niveau de la table; ils peuvent être mis aussi bien au niveau du record
ou de la page que de la table, sur les données mêmes ou sur un index.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"Francky" wrote in message
news:%
Bonjour

J'ai une 1ere procédure stockée qui ouvre une transaction avec un "BEGIN
TRAN T", suivis par diverses instructions de UPDATE/INSERT/SELECT/DELETE
et vers le milieu de la SP j'execute une 2eme SP (dont je récupere la
valeur) qui contient aussi un "BEGIN TRAN T" et des instructions
UPDATE/INSERT/SELECT/DELETE sur les mêmes tables que ceux de la 1ere SP.
Mais j'ai un probleme, en plein milieu de la 2eme procedure stocké, j'ai
l'impression que y'a un blocage.... Ma requete tourne eternellement, je ne
sais aps ce qui se passe alors je l'arrete.

Ma question est très simple. Apres un BEGIN TRAN, toutes les tables sur
lesquel on va travailler après seront verouillés, ma question est que
comme dans la 1ere SP je verouille des tables, et que dans la 2eme SP (que
j'appelle depuis la 1ere SP) je travaille sur les meme tables, est-ce que
je ne serai pas confronté à un verrou mortel qui fait que j'ai le
sentiment que ca bloque?


Avatar
Fred BROUARD
bonjour,

lisez l'article que j'ai écrit sur les transactions imbriquées :
http://www.sqlspot.com/Les-transactions-imbriquees.html" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.sqlspot.com/Les-transactions-imbriquees.html

si vous ne résolvez pas votre problème, lisez l'artile que j'ai écrit
sur la gestion du niveau d'isolation des transactions :
http://www.sqlspot.com/Gerer-l-isolation-des-transactions.html" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.sqlspot.com/Gerer-l-isolation-des-transactions.html

En désespoir de cause, si tout ceci n'a servit à rien, postez nous le
code de vos proc stock et le DDL des tables incriminées

A +


Francky a écrit :
Bonjour

J'ai une 1ere procédure stockée qui ouvre une transaction avec un "BEGIN
TRAN T", suivis par diverses instructions de UPDATE/INSERT/SELECT/DELETE
et vers le milieu de la SP j'execute une 2eme SP (dont je récupere la
valeur) qui contient aussi un "BEGIN TRAN T" et des instructions
UPDATE/INSERT/SELECT/DELETE sur les mêmes tables que ceux de la 1ere SP.
Mais j'ai un probleme, en plein milieu de la 2eme procedure stocké, j'ai
l'impression que y'a un blocage.... Ma requete tourne eternellement, je
ne sais aps ce qui se passe alors je l'arrete.

Ma question est très simple. Apres un BEGIN TRAN, toutes les tables sur
lesquel on va travailler après seront verouillés, ma question est que
comme dans la 1ere SP je verouille des tables, et que dans la 2eme SP
(que j'appelle depuis la 1ere SP) je travaille sur les meme tables,
est-ce que je ne serai pas confronté à un verrou mortel qui fait que
j'ai le sentiment que ca bloque?




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************