Logga in med Microsoft
Logga in eller skapa ett konto.
Hej,
Välj ett annat konto.
Du har flera konton
Välj det konto som du vill logga in med.

Symptom

När du använder XA-transaktioner, JDBC-drivrutinen för Microsoft SQL Server och Microsoft SQL Server som backend-databas har du överblivna väntande transaktioner på SQL-servern om transaktionshanteraren uppstår en krasch eller ett anslutningsproblem.

Dessutom händer något av följande vanliga problem:

  • Transaktioner väntar för länge på instansen av SQL Server. De kan ha en null eller -2 sessions-ID i databasen.

  • Transaktioner är spärrade för lång tid av en transaktion som har ett -2 sessions-ID. Detta medför en lås-timeout eller trådar att frysa.

Orsak

Om anslutningen mellan transaktionshanterare och SQL Server bryts för en oförberedd transaktion JDBC-drivrutinen för SQL Server inte rensa upp dessa transaktioner och de kan fortsätta att använda resurser och blockera andra transaktioner. På grund av XA-implementering i JDBC-drivrutinen för SQL Server kan SQL Server identifiera onormala frånkoppling av transaktionshanterare. Därför för SQL Server, dessa transaktioner finns kvar i systemet tills den XA-transaktionen timeout eller databasen startas. Timeout på instansen av SQL Server används oändlighet och kan inte konfigureras på databasen.

Temporär lösning

Lös problemet med någon av följande metoder:

  • Starta om databasservern när det uppstår någon Java Virtual Machine (JVM) kraschar eller nätverksanslutningen problem som uppstår i dessa överblivna transaktioner.

  • Stoppa individuellt överblivna transaktioner på databasen för att rensa upp sina resurser. Kontrollera att det inte är en osäker för att verifiera att en transaktion blir ägarlös beredda () transaktion eller en som för närvarande klar. Alla transaktioner som senast genom en omstart av den relaterade JVM och en lyckas återställa bör vara övergivna.

  • Ange ett timeout-värde för XA-transaktioner som är längre än den längsta transaktionen att tvinga dem att stoppa när tidsgränsen har överskridits. Du kan göra detta genom att anropa metoden XAResource.setTransactionTimeout() .

  • För många tillverkare transaktionshanterare, XAResource -objektet används inte direkt som den anropande koden och transaktionshanteraren Ange inte timeout-värdet för transaktionen. I det här fallet kan ett externt program användas för att ställa in timeout-värdet för transaktionen till ett nytt standardvärde. Denna nya standard kommer att användas av andra transaktioner som inte anger en tidsgräns för transaktionen.

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?
Genom att trycka på skicka, kommer din feedback att användas för att förbättra Microsofts produkter och tjänster. IT-administratören kan samla in denna data. Sekretesspolicy.

Tack för din feedback!

×