Unbestätigte Transaktionen auflösen

Verwenden Sie diese Task, um unbestätigte Transaktionen und die zugehörigen Nachrichten aufzulösen.

Informationen zu diesem Vorgang

Transaktionen können für unbegrenzte Zeit in einem unbestätigten Status verbleiben, wenn ein ausgewöhnlicher Umstand eintritt, z. B. wenn ein Knoten entfernt wird und dadurch die zugehörigen Messaging-Engines gelöscht werden. Wenn eine Transaktion einen unbestätigten Status annimmt, muss sie festgeschrieben oder rückgängig gemacht werden, damit die betroffene Messaging-Engine ihre normalen Verarbeitungsvorgänge fortsetzen kann.

Sie können mit der Administrationskonsole die Nachrichten anzeigen, die das Problem verursachen. Informationen hierzu enthält der Artikel Nachrichten an einem Nachrichtenpunkt auflisten. Wenn Nachrichten vorhanden sind, die an einer unbestätigten Transaktion beteiligt sind, wird die Kennung (ID) dieser Transaktion in einer Anzeige zur Nachricht angezeigt. Sie können die Transaktion auf zwei Arten auflösen:
  1. Mit den Transaktionsverwaltungsanzeigen des Servers
  2. Mit den Methoden in der MBean der Messaging-Engine

Sie müssen zuerst versuchen, die unbestätigte Transaktion über die MBean-Schnittstellen für die Verwaltung von Anwendungsservertransaktionen aufzulösen. Nähere Einzelheiten hierzu finden Sie im Artikel Aktive und vorbereitete Transaktionen mit wsadmin-Scripting verwalten. Verwenden Sie die Scripts für alle Anwendungsserver, die möglicherweise Transaktionen, einschließlich Messaging-Aktionen, für den Standard-Messaging-Provider koordiniert haben. Wenn den Scripts des Transaktionsmanagers die Transaktionsidentität bekannt ist, verwenden Sie diese Scripts, um die Transaktionen aufzulösen. Auf diese Weise werden alle Ressourcen (einschließlich der Messaging-Ressourcen) in einer globalen Transaktion einheitlich aufgelöst.

Wenn die Transaktionsidentität den Scripts des Transaktionsmanagers, die in jedem Anwendungsserver ausgeführt werden, nicht bekannt ist, oder wenn der Anwendungsserver mit dem Transaktionsmanager nicht wiederhergestellt werden kann, können Sie Methoden in der MBean "SIBMessagingEngine" verwenden, um den Messaging-Teil einer Transaktion unabhängig von der globalen Transaktion aufzulösen. Die Wahl zwischen Festschreibung und Rollback der Transaktion muss manuell getroffen werden.

Die folgenden Methoden in der MBean der Messaging-Engine können verwendet werden, um eine Liste der Transaktionskennungen (xid) zu erhalten und Transaktionen festzuschreiben bzw. rückgängig zu machen:
  • getPreparedTransactions()
  • commitPreparedTransaction(String xid)
  • rollbackPreparedTransaction(String xid)
Für den Aufruf der Methoden können Sie den Befehl wsadmin verwenden. Beispielsweise können Sie einen Befehl mit dem folgenden Format verwenden, um eine Liste mit den Kennungen der unbestätigten Transaktionen von der MBean einer Messaging-Engine zu erhalten:
wsadmin>AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine,*").
splitlines()[0] , "getPreparedTransactions")
[IBM i]Anmerkung: [IBM i]Der Scripting-Client wsadmin wird über die Qshell ausgeführt. [IBM i]Weitere Informationen finden Sie unter Qshell für die Ausführung von WebSphere-Scripts mit wsadmin-Scripting konfigurieren.
Alternativ können Sie ein Script wie das folgende verwenden, um die Methoden in der MBean aufzurufen:
import sys

mebeans=AdminControl.queryNames("type=SIBMessagingEngine,*").splitlines()

for mebean in mebeans:
  input=0
  meName=""
  print "--- Start ME: ---------------"
  print mebean
  print "-----------------------------"
  while input>=0:
    xidList=AdminControl.invoke(mebean , "getPreparedTransactions").splitlines()
    print "--- Prepared Transactions ---"
    index=0
    for xid in xidList:
      print "  Index=%s XID=%s" % (index , xid)
      index+=1
    print "------- End of list ---------"
    print "Select index of XID to commit/rollback"
    print "(or enter -1 to skip to next ME):"
    input=int(sys.stdin.readline().strip())

    if input<0:
      print "No index selected."
    else:
      xid=xidList[input]
      print "Enter c to commit or r to rollback XID %s" % xid
      input=sys.stdin.readline().strip()
      if input=="c":
        print "Committing xid=%s" % xid
        AdminControl.invoke(mebean , "commitPreparedTransaction" , xid)
      if input=="r":
        print "Rolling back xid=%s" % xid
        AdminControl.invoke(mebean , "rollbackPreparedTransaction" , xid)
    print
  print "--- End ME --------------------"
  print

print "No more ME definitions found, exiting"

Dieses Script listet die Transaktions-IDs der Transaktionen zusammen mit einem Index auf. Sie können einen Index auswählen und die diesem Index entsprechende Transaktion festschreiben oder rückgängig machen.

Vorgehensweise

  1. Ermitteln Sie mit der Administrationskonsole die Transaktions-IDs der Nachrichten mit unbestätigten Transaktionen.
  2. Optional: Wenn im Transaktionsverwaltungsfenster eine Transaktionskennung angezeigt wird, können Sie die Transaktion festschreiben bzw. rückgängig machen.
  3. Optional: Wenn im Transaktionsverwaltungsfenster keine Transaktionskennung angezeigt wird, verwenden Sie die Methoden in der MBean der Messaging-Engine. Verwenden Sie beispielsweise ein Script, um eine Liste mit den Kennungen für unbestätigte Transaktionen anzuzeigen. Führen Sie für jede Transaktion folgende Schritte aus:
    1. Geben Sie den Index der Transaktionskennung ein.
    2. Optional: Geben Sie c ein, um die Transaktion festzuschreiben.
    3. Optional: Geben Sie r ein, um die Transaktion rückgängig zu machen.
  4. Wenn Sie überprüfen möchten, ob die Transaktionen jetzt nicht mehr unbestätigt sind, starten Sie den Server erneut, und verwenden Sie die anschließend zur Überprüfung das Transaktionsverwaltungsfenster oder die Methoden in der MBean der Messaging-Engine.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjm0165_
Dateiname:tjm0165_.html