Zwevende XA-transacties wanneer u verbinding met SQL Server maakt via JDBC-stuurprogramma voor SQL Server

Symptomen

Wanneer u XA-transacties, JDBC-stuurprogramma voor Microsoft SQL Server en Microsoft SQL Server als de back-enddatabase, mag u hebben zwevend transacties die in behandeling zijn op de SQL-Server als er een systeemstoring of een verbindingsprobleem de transactiebeheerder.

Bovendien treedt een van de volgende veelvoorkomende problemen:

  • Transacties in behandeling zijn voor een lange tijd op het exemplaar van SQL Server. Er is wellicht een null of -2 sessie-ID in de database.

  • Transacties worden gedurende een langere periode geblokkeerd door een transactie met een sessie -2 . Dit zorgt ervoor dat een time-out vergrendelen of threads te blokkeren.

Oorzaak

De verbinding tussen de transactiebeheerder en SQL Server verloren is gegaan voor een transactie niet voorbereid, vervolgens de JDBC-stuurprogramma voor SQL Server worden niet door Ntfrs.exe opgeschoond deze transacties als deze blijven gebruikmaken van bronnen en andere transacties te blokkeren. Vanwege de XA-implementatie in de JDBC-stuurprogramma voor SQL Server, SQL Server kan abnormale verbroken verbindingen met transactiebeheerders niet detecteren. Daarom voor SQL Server blijven deze transacties in het systeem totdat de XA-transactie een optreedt time-out of de database opnieuw wordt opgestart. De time-outperiode oneindig op het exemplaar van SQL Server gebruikt en kan niet worden geconfigureerd op de database.

Tijdelijke oplossing

Los dit probleem op door een van de volgende methoden te gebruiken:

  • De databaseserver opnieuw starten wanneer er elke crash Java Virtual Machine (JVM) of verbinding met het netwerk die resulteren in deze zwevende transacties problemen.

  • Stop de zwevende transacties afzonderlijk op de database voor het opschonen van hun bronnen. Om te verifiëren dat een transactie wordt zwevend, zorg ervoor dat het niet een onzeker is bereid () transactie of die momenteel wordt voltooid. Alle transacties die tot en met het opnieuw opstarten van de verwante JVM en een cyclus herstel laatste moeten worden zwevend.

  • Stel een time-outwaarde voor de XA-transacties die langer is dan de langste transactie te dwingen te stoppen zodra de time-outwaarde wordt overschreden. U kunt dit doen door het aanroepen van de methode XAResource.setTransactionTimeout() .

  • Voor veel fabrikanten transactiebeheerders, XAResource is niet rechtstreeks toegang tot het object door de aanroepende code en de transactiebeheerder de transactie time-outwaarde niet instelt. In dit geval kan een externe toepassing worden gebruikt de time-outperiode van transacties op een nieuwe standaardwaarde instellen. Deze nieuwe standaardinstellingen worden gebruikt door andere transacties die een time-out van de transactie niet opgeeft.

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

Hartelijk dank voor uw feedback! Het lijkt ons een goed idee om u in contact te brengen met een van onze Office-ondersteuningsagenten.

×