Hello,
Tu peux être dans le cas 2 (mais pas de rollback) ou le cas 3 en fonction du cas.Un truc que j'ignore toujours... Lorsque je lance une requête via une application .NET (en laissant le timeout par défaut (30 secondes)) et que cette requête met plus de 30 secondes à répondre, une exception est levée dans l'application mais que se passe-t-il côté sql server ?
Si une transaction a été initié il se peut qu'elle restera ouverte. Tu peux faire un test rapidement avec SSMS en configuration le timeout de commande à 10s par exemple ou autre et en exécutant une requête du genre:
Voici le résultat chez moi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 begin tran; insert into dbo.table values ('toto', 'toto','toto') waitfor delay '00:00:15'
Transaction information for database 'dbi_v2_tools'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DBCC OPENTRAN;
Oldest active transaction:
SPID (server process ID): 59
UID (user ID) : -1
Name : user_transaction
LSN : (44:416:5)
Start time : Feb 25 2015 5:44:32:313AM
SID : 0x01050000000000051500000032fba7ca7e4af8ca1703afbb56040000
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Le problème est que si tu n'es pas dans le cas 2, tu n'auras pas de transaction ouverte à détecter. De plus la cible pair-matching ne te sera pas d'un grand secours non plus (chose que je voulais te faire faire au départ) car même en cas de timeout l'événement "completed" associé sera de toute façon déclenchée.
As-tu essayé de récupérer toutes les requêtes avec une durée supérieure ou égale au timeout comme demandé par Elsuket pendant la période définie? Désolé d'avance pour les doublons je reprends le wagon en route ..
++
Partager