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

Problembeschreibung

Wenn Sie XA-Transaktionen, JDBC-Treiber für Microsoft SQL Server und Microsoft SQL Server als Back-End-Datenbank verwenden, haben Sie möglicherweise Transaktionen bis auf SQL Server verwaist, wenn der Transaktions-Manager einen Absturz oder ein Konnektivitätsproblem.Darüber hinaus können Sie eines der folgenden Symptome auftreten:

  • Transaktionen sind ausstehende lange auf der Instanz von SQL Server. Sie haben eine null oder -2 Session-ID in der Datenbank.

  • Transaktionen sind lange eine Transaktion blockiert, die eine -2 Sitzung-ID verfügt. Dadurch wird ein Timeout oder Threads einfrieren.

Ursache

Wenn die Verbindung zwischen dem Transaktions-Manager und SQL Server für eine Transaktion aufgehoben JDBC-Treiber für SQL Server wird nicht bereinigt diese Transaktionen und sie weiterhin Ressourcen und andere Transaktionen blockieren. Da der XA-Implementierung in den JDBC-Treiber für SQL Server erkannt nicht SQL Server ungewöhnlich Verbindungsabbrüche Transaktions-Manager. Daher bleiben SQL Server diese Transaktionen im System bis der XA-Transaktion Timeout oder die Datenbank neu gestartet. Das Zeitlimit unendlich auf der Instanz von SQL Server verwendet und kann nicht auf die Datenbank konfiguriert.

PROBLEMUMGEHUNG

Um dieses Problem zu beheben, verwenden Sie eine der folgenden Methoden:

  • Starten Sie Datenbankserver neu, wenn Sie Java Virtual Machine (JVM) Abstürze oder Netzwerkkonnektivität diese verwaisten Transaktionen zur Folge stellt.

  • Beenden Sie einzeln verwaisten Transaktionen in der Datenbank, um Ressourcen zu bereinigen. Überprüfen, ob eine Transaktion verwaist ist, stellen Sie sicher, dass es nicht in Zweifel vorbereitet () Transaktion oder eine gerade abgeschlossen wird. Alle Transaktionen, die durch einen Neustart der JVM und eine erfolgreiche Wiederherstellung Zyklus sollte verwaist.

  • Legen Sie einen Timeoutwert für XA-Transaktionen, die länger als die längste Transaktion zu beenden, sobald das Zeitlimit überschritten. Sie können hierzu XAResource.setTransactionTimeout() aufrufen.

  • Viele Drittanbieter-Transaktions-Manager das XAResource -Objekt nicht direkt durch den aufrufenden Code zugegriffen und der Transaktions-Manager nicht den Transaktionstimeout-Wert festgelegt. In diesem Fall kann eine externe Anwendung verwendet werden, das Transaktionstimeout auf einen neuen Standardwert festgelegt. Diese neue Standardeinstellung wird von anderen Transaktionen verwendet, die keine Transaktionstimeout angeben.

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.