Během používání sdružování připojení může zůstat otevřený. Příklad:časový limit příkazu může zanechat zámky a TXN, protože klient posílá jako "přerušit".
2 řešení:
-
Test v klientovi, doslova:
IF @@TRANCOUNT <> 0 ROLLBACK TRAN
-
Použijte
SET XACT_ABORT ON
k zajištění vyčištění TXN:Otázka 1 a Otázka 2
Vždy používám SET XACT_ABORT ON
.
Z tohoto blogu SQL Team:
Všimněte si, že při sdružování připojení stačí zavření připojení bez vrácení zpět pouze vrátit připojení do fondu a transakce zůstane otevřená, dokud nebude znovu použita nebo odstraněna z fondu. To může mít za následek, že zablokování začnou být zbytečné a způsobí další časové limity a rolovací blok
Z MSDN, sekce "Podpora transakcí" (tučně)
Když je připojení uzavřeno, je uvolněno zpět do fondu a do příslušného dělení na základě jeho transakčního kontextu. Proto můžete spojení ukončit, aniž by došlo k chybě, i když distribuovaná transakce stále čeká. To vám umožní potvrdit nebo zrušit distribuovanou transakci později.