Applies ToSQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Express

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.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.