解析不確定的交易

請利用這個作業來解析不確定的交易及相關聯的訊息。

關於這項作業

交易有可能因為某個異常情況,例如,移除節點導致傳訊引擎毀損,而無限期地陷入不確定的狀態中。 當交易成為不確定時,必須加以確定或回復,受影響的傳訊引擎才能繼續正常的處理。

您可以利用管理主控台來顯示造成問題的訊息(請參閱列出訊息點的訊息)。 如果有訊息涉及不確定的交易,交易身分會顯示在訊息的相關聯畫面中。 之後,您可以用兩種方式來解析這個交易:
  1. 使用伺服器交易管理畫面
  2. 使用傳訊引擎 MBean 的方法

您必須先利用應用程式伺服器交易管理 MBean 介面,來嘗試解析不確定的交易。 這些在Managing active and prepared transactions by using wsadmin scripting中都有記載。 請針對預設傳訊提供者來使用所有可能已協調交易之應用程式伺服器的 Script,其中包括「傳訊」動作。 如果交易管理程式 Script 能夠識別交易身分,請利用這些 Script 來解析交易。 這會一致地解析廣域交易內的所有資源(包括傳訊)。

如果在任何應用程式伺服器上執行的交易管理程式 Script 無法識別交易身分,或代管交易管理程式的應用程式伺服器無法回復,您可以利用 SIBMessagingEngine MBean 的方法,在廣域交易之外,個別解析交易的「傳訊」部分。 您必須手動選擇確定或回復交易。

傳訊引擎 MBean 的下列方法可用來取得交易身分 (xid) 清單,以及確定和回復交易:
  • getPreparedTransactions()
  • commitPreparedTransaction(String xid)
  • rollbackPreparedTransaction(String xid)
如果要呼叫這些方法,您可以使用 wsadmin 指令,例如,您可以使用下列格式的指令,來從傳訊引擎 MBean 中取得不確定的交易身分清單:
wsadmin>AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine,*").
splitlines()[0] , "getPreparedTransactions")
[IBM i]註: [IBM i]wsadmin Scripting 用戶端是從 Qshell 執行. [IBM i]如需相關資訊,請參閱利用 wsadmin Script 配置 Qshell 來執行 WebSphere Script.
另外,您也可以使用如下的 Script 來呼叫 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"

這個 Script 會連同索引來列出交易的交易身分。 之後,您可以選取一個索引,然後確定或回復對應於這個索引的交易。

程序

  1. 利用管理主控台來尋找有不確定交易之訊息的交易身分。
  2. 選擇性的: 如果有交易身分出現在交易管理畫面中,請依照需要來確定或回復交易。
  3. 選擇性的: 如果沒有交易身分出現在交易管理畫面中,請使用傳訊引擎 MBean 的方法。 比方說,利用 Script 來顯示不確定交易的交易身分清單。 請針對每一項交易來執行下列動作:
    1. 輸入交易的交易身分索引。
    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