解决不确定事务

使用此任务来解决不确定事务以及与它们相关联的消息。

关于此任务

异常情况(如移除节点的操作导致消息传递引擎被破坏)会导致事务无限期地保持不确定状态。当事务具有不确定状态时,它必须被落实或回滚以使受影响的消息传递引擎能够继续正常处理。

可以使用管理控制台来显示导致问题的消息(请参阅列示消息点上的消息)。如果有涉及不确定事务的消息,那么事务的标识将显示在与该消息相关联的面板中。然后,可以通过两种方法处理该事务:
  1. 使用服务器事务管理面板
  2. 使用消息传递引擎 MBean 上的方法

必须先尝试使用应用程序服务器的事务管理 MBean 接口来解决不确定事务。使用 wsadmin 脚本编制管理活动的和就绪的事务中对它们进行了描述。对可能协调缺省消息传递提供程序的事务(包括消息传递操作)的所有应用程序服务器使用这些脚本。如果事务管理器脚本识别事务标识,请使用这些脚本来解决事务。这将以一致方式解析全局事务中的所有资源(包括消息传递)。

如果在任何应用程序服务器上运行的事务管理器脚本不识别事务标识,或者主管事务管理器的应用程序服务器不能恢复,那么可使用 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 脚本编制客户机通过 Qshell 运行. [IBM i]有关更多信息,请参阅 使用 wsadmin 脚本编制配置 Qshell 以运行 WebSphere 脚本.
另外,可以使用如下所示的脚本来调用 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"

此脚本列示事务的事务标识以及索引。于是,您可以选择索引并落实或回滚与该索引相对应的事务。

过程

  1. 使用管理控制台查找具有不确定事务的消息的事务标识。
  2. 可选: 如果事务标识出现在事务管理面板中,请根据需要落实或回滚事务。
  3. 可选: 如果事务标识未出现在事务管理面板中,请使用消息传递引擎 MBean 上的方法。 例如,使用脚本来显示不确定事务的事务标识列表。对于每个事务:
    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