|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
Messages: n/a
Hébergeur: |
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" <francky@nexistepas.com> wrote in message news:%2384k0z4LIHA.820@TK2MSFTNGP06.phx.gbl... > 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? |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
bonjour,
lisez l'article que j'ai écrit sur les transactions imbriquées : 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-isola...nsactions.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 ************************* |
|
![]() |
| Outils de la discussion | |
|
|