Gäller för
SQL 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

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.