未確定トランザクションの解決

このタスクを使用して、未確定トランザクションとそれに関連するメッセージを解決します。

このタスクについて

トランザクションは、メッセージング・エンジンの破壊を起こすようなノードの除去などの例外的な事情で、未確定状態のままいつまでも残される可能性があります。トランザクションが未確定になった場合、影響を受けたメッセージング・エンジンによる標準処理が続けられるように、トランザクションをコミットまたはロールバックしなければなりません。

管理コンソールを使用して、問題を引き起こしているメッセージを表示することができます (メッセージ・ポイント 上のメッセージのリスト表示を参照してください)。未確定トランザクションにメッセージが含まれている場合、メッセージに関連するパネルにトランザクションの ID が表示されます。以下のいずれかの方法でトランザクションを解決することができます。
  1. サーバーのトランザクション管理パネルを使用する
  2. メッセージング・エンジンの MBean のメソッドを使用する

まず、 アプリケーション・サーバーのトランザクション管理 MBean インターフェースを使用して 未確定トランザクションの解決を試みる必要があります。これらは、wsadmin スクリプトを使用したアクティブ・トランザクションおよび準備済みトランザクションの管理で説明しています。デフォルト・メッセージング・プロバイダーのトランザクション (メッセージング・アクションを含む) を調整している可能性があるすべてのアプリケーション・サーバーに対してスクリプトを使用します。 トランザクション ID がトランザクション・マネージャー・スクリプトで既知である場合は、それらのスクリプトを使用してトランザクションを解決します。 これにより、グローバル・トランザクション内のすべてのリソース (メッセージングを含む) が確実に解決されます。

トランザクション ID がアプリケーション・サーバーで実行されるトランザクション・マネージャー・スクリプトで既知でない場合や、トランザクション・マネージャーをホストするアプリケーション・サーバーを回復できない場合は、SIBMessagingEngine MBean のメソッドを使用して、グローバル・トランザクションとは別個のトランザクションのメッセージング部分を解決することができます。 トランザクションをコミットするか、またはロールバックするかの選択は、手動で行う必要があります。

トランザクション ID (xid) のリストを取得し、トランザクションをコミットまたはロールバックするには、以下のメッセージング・エンジンの MBean のメソッドが使用できます。
  • getPreparedTransactions()
  • commitPreparedTransaction(String xid)
  • rollbackPreparedTransaction(String xid)
メソッドを呼び出すには、wsadmin コマンドを使用することができます。例えば、以下の書式のコマンドを使用して、メッセージング・エンジンの MBean から、未確定トランザクション ID のリストを取得することができます。
wsadmin>AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine,*")
splitlines()[0] , "getPreparedTransactions")
[IBM i]注: [IBM i]wsadmin スクリプト・クライアントは Qshell から実行されます。. [IBM i]詳しくは、wsadmin スクリプトを使用した WebSphere スクリプトを実行するための Qshell の構成.
代わりに次のようなスクリプトを使用して MBean のメソッドを呼び出すことができます。
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"

このスクリプトは、トランザクション ID を索引と共にリストします。これで、索引を選択し、その索引に対応するトランザクションをコミット、またはロールバックすることができます。

手順

  1. 管理コンソールを使用し、未確認トランザクションを持つメッセージのトランザクション ID を検索します。
  2. オプション: トランザクション管理パネルにトランザクション ID が表示された場合、必要に応じてトランザクションをコミットまたはロールバックします。
  3. オプション: トランザクション ID がトランザクション管理パネルに表示されない場合、メッセージング・エンジンの MBean のメソッドを使用します。 例えば、スクリプトを使用して未確定トランザクションのトランザクション ID のリストを表示します。各トランザクションに対して、次のようにします。
    1. トランザクションのトランザクション ID の索引を入力します。
    2. オプション: トランザクションをコミットするには「c」を入力します。
    3. オプション: トランザクションをロールバックするには「r」を入力します。
  4. そのトランザクションが未確定でなくなったことを確認するには、サーバーを再始動し、トランザクション管理パネル、またはメッセージング・エンジンの MBean のメソッドを使用して確認します。

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjm0165_
ファイル名:tjm0165_.html