2第二阶段失败后的阶段提交全局事务状态

时间:2013-11-22 19:10:40

标签: jta xa 2phase-commit

我的问题是:

说我有一个事务管理器和2个资源管理器。

  1. TM告诉客户经理准备。
  2. RM承认他们已准备好/投赞成票。
  3. TM告诉客户经理提交。
  4. RM 1提交并确认提交。
  5. 由于网络故障,RM 2永远不会收到提交消息。
  6. 在这种情况下,我知道RM 2处于等待状态,然后会话在数据库中超时并进入不确定状态。

    如果在超出AbandonTimeout之前TM没有与RM重新连接,则该事务将被放弃。

    我的问题是,当TM继续尝试恢复RM时,全局交易会发生什么?

    当TM开始尝试恢复时,TM是否会向应用程序发回异常?

    即使其中一个RM从未发送确认,TM是否会发回成功?

    AbandonTimeout默认为24小时。 TM是否持有24小时的交易,然后一旦超时,发回一个例外?

    在此链接2 phase Commit中,第二阶段结束:

    1. 协调员向所有群组发送提交消息。
    2. 每个群组完成操作,并释放交易期间持有的所有锁和资源。
    3. 每个群组向协调员发送确认。
    4. 协调员在收到所有确认后完成交易。
    5. 那么如果永远不会收到提交确认,那么全局事务会发生什么?

      在恢复操作期间,我找不到围绕全局事务解析的任何内容。任何帮助将不胜感激。

      谢谢, 马特

1 个答案:

答案 0 :(得分:0)

只有当所有参与者都返回ok时,事务才会在提交时返回到数据库。如果TM无法重新连接,它将保持不变,可能会锁定数据库页面(这通常需要手动清理)。

根据超时设置,客户端应用程序可能会收到错误。像oracle这样的某些数据库系统允许模拟不同的错误条件。以下链接描述了http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_txnman009.htm#ADMIN12285