Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Co dzieje się z niezatwierdzoną transakcją po zamknięciu połączenia?

Może pozostać otwarty, gdy obowiązuje pula połączeń. Przykład:limit czasu polecenia może pozostawić blokady i TXN, ponieważ klient wysyła jako „przerwij”.

2 rozwiązania:

  • Przetestuj w kliencie, dosłownie:

    IF @@TRANCOUNT <> 0 ROLLBACK TRAN

  • Użyj SET XACT_ABORT ON aby upewnić się, że TXN jest oczyszczony:Pytanie 1 i Pytanie 2

Zawsze używam SET XACT_ABORT ON .

Z tego bloga zespołu SQL:

Zwróć uwagę, że w przypadku puli połączeń, zamknięcie połączenia bez cofnięcia przywrócenia spowoduje jedynie przywrócenie połączenia z pulą, a transakcja pozostanie otwarta do późniejszego ponownego wykorzystania lub usunięcia z puli. Może to spowodować, że blokady zaczną być niepotrzebne i spowodować inne przekroczenie limitu czasu i blokadę przewijania

Z MSDN, sekcja „Obsługa transakcji” (moje pogrubienie)

Gdy połączenie jest zamykane, jest zwalniane z powrotem do puli i do odpowiedniego podziału na podstawie kontekstu transakcji. Dlatego możesz zamknąć połączenie bez generowania błędu, nawet jeśli transakcja dystrybuowana jest nadal w toku. Pozwala to na zatwierdzenie lub przerwanie rozproszonej transakcji w późniejszym czasie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Scal wartości wierszy w CSV (vel GROUP_CONCAT dla SQL Server)

  2. Jaki jest najlepszy sposób automatycznego generowania instrukcji INSERT dla tabeli programu SQL Server?

  3. Jak sprawdzić, czy baza danych istnieje w SQL Server?

  4. Jak usunąć plik danych z bazy danych programu SQL Server (T-SQL)

  5. Znajdź znaki spoza zestawu ASCII w kolumnach varchar za pomocą SQL Server