Transakcje XA oddzielone po podłączeniu do serwera SQL przy użyciu sterownika JDBC dla programu SQL Server

Objawy

Użycie transakcji XA, sterownik JDBC Microsoft SQL Server i Microsoft SQL Server jako bazy danych zaplecza, możesz mogą mieć oddzielone transakcje oczekujące na serwerze SQL Server Jeśli Menedżer transakcji ulegnie awarii lub problem z łącznością.

Ponadto może wystąpić jeden z następujących symptomów wspólne:

  • Transakcje są w toku przez długi czas w wystąpieniu programu SQL Server. W bazie danych mogą mieć wartość null lub jest -2 identyfikator sesji.

  • Transakcje są zablokowane przez długi czas przez transakcję, która ma identyfikator sesji -2 . Powoduje to, że limit czasu blokady lub wątków do zamrożenia.

Przyczyna

Jeśli połączenie między Menedżera transakcji i SQL Server zostaną utracone nieprzygotowany transakcji, następnie sterownik JDBC dla programu SQL Server nie oczyszczania tych transakcji, i mogą nadal korzystać z zasobów i zablokować inne transakcje. Ze względu na wykonanie XA w sterowniku JDBC dla programu SQL Server program SQL Server nie może wykryć nieprawidłowe rozłączenia menedżerów transakcji. W związku z tym dla programu SQL Server, transakcje te pozostają w systemie dopóki nie upłynie limit czasu transakcji XA lub ponownym uruchomieniu bazy danych. Limit czasu używa nieskończoności na wystąpienie programu SQL Server, a nie jest konfigurowany w bazie danych.

Obejście problemu

Aby rozwiązać ten problem, użyj jednej z następujących metod:

  • Uruchom ponownie serwer bazy danych, gdy łączność sieciowa problemy tego wyniku w tych osieroconych transakcji lub w przypadku wszelkich awarii Java Virtual Machine (JVM).

  • Zatrzymaj indywidualnie osieroconych transakcji bazy danych, aby oczyścić swoje zasoby. Aby sprawdzić, czy transakcja jest oddzielony, upewnij się, że nie jest w stanie wątpliwości (przygotowany) transakcji lub taki, który jest obecnie ukończeniu. Wszelkie transakcje, które trwają przez ponowne uruchomienie związanej z tym JVM i cyklu pomyślnego wykonania odzyskiwania powinien oddzielony.

  • Ustaw wartość limitu czasu transakcji XA jest dłuższa niż długie transakcji wymusić przerwanie tak szybko, jak tylko zostanie przekroczona wartość limitu czasu. Można to zrobić przez wywołanie metody XAResource.setTransactionTimeout() .

  • Dla wielu menedżerów transakcji innych firm obiektu XAResource nie jest bezpośrednio dostępna przez kod wywołujący i Menedżer transakcji nie ustawia wartość limitu czasu transakcji. W tej sytuacji zewnętrznej aplikacji może służyć do ustawienia limitu czasu transakcji na nową wartość domyślną. To nowe ustawienie domyślne będą używane przez wszystkie transakcje, które nie określają limit czasu transakcji.

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×