sql >> Databáze >  >> RDS >> Sqlserver

Co se stane s nepotvrzenou transakcí, když je spojení uzavřeno?

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.



  1. Datový model aplikace pro maratonský trénink

  2. ORA-12154 nedokázal vyřešit zadaný identifikátor připojení

  3. postgresql COUNT(DISTINCT ...) velmi pomalé

  4. Určení a nastavení edice R12.2