Příznaky
Při použití transakce XA, Microsoft SQL Server rozhraní JDBC ovladače a Microsoft SQL Server jako back-end databáze, osamocené je může správce transakce dojde k selhání nebo problém s připojením-li čekající transakce na serveru SQL Server.
Dále může vyskytnout některý z následujících běžných příznaků:-
Jsou transakce čekající na instanci serveru SQL Server po dlouhou dobu. Mohou mít buď hodnotu null , nebo -2 ID relace v databázi.
-
Transakce jsou blokovány dlouho transakce, který obsahuje identifikátor relace s -2 . To způsobí, že časový limit uzamčení nebo k zablokování podprocesů.
Příčina
Pokud dojde ke ztrátě neupravený transakce připojení mezi správce transakcí a SQL Server, potom JDBC ovladače SQL Server neprovádí vyčištění tyto transakce a může nadále používat prostředky a blokovat ostatní transakce. Z důvodu provádění XA JDBC ovladače SQL Server SQL Server nemůže rozpoznat abnormální odpojení správci transakcí. Proto pro SQL Server, tyto transakce zůstat v systému až do vypršení časového limitu transakce XA nebo restartování databáze. Časový limit na instanci serveru SQL Server používá nekonečna a nenastavuje v databázi.
Jak potíže obejít
Chcete-li tento problém vyřešit, použijte jednu z následujících metod:
-
Restartujte server databáze při dochází k zhroucení všech Java Virtual Machine (JVM) nebo připojení k síti problémy, jejichž výsledkem jsou tyto osamocené transakce.
-
Jednotlivě ukončete osamocené transakce databáze za účelem vyčištění jejich prostředků. Chcete-li ověřit, že je osamocené transakce, ujistěte se, že není v pochybnost (připraven) transakce nebo takový, který právě dokončuje. Všechny transakce, které bude trvat do restartování související JVM a úspěšné obnovení cyklu by osamocené.
-
Nastavte hodnotu časového limitu transakcí protokolu XA, která je delší než nejdelší přinutit, aby zastavit, jakmile je překročena hodnota časového limitu transakce. To lze provést voláním metody XAResource.setTransactionTimeout() .
-
Objekt XAResource není volající kód přístup přímo mnoho správců transakcí jiných výrobců, a správce transakcí není nastavení časového limitu transakce. V tomto případě externí aplikace lze nastavit novou výchozí hodnotu časového limitu transakce. Toto nové výchozí nastavení bude použit jinými transakcemi, které nemají zadán časový limit transakce.