2013-11-22 89 views
0

我的问题是这样的:2阶段提交第二阶段失败后的全局交易状态

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

  1. TM告诉RM准备。
  2. RMs确认他们已准备好/投票yes。
  3. TM告诉RM要提交。
  4. RM 1提交并确认提交。
  5. 由于网络故障,RM 2永远不会收到提交消息。

在这种情况下,我知道RM 2处于等待状态,然后会话在数据库中超时并进入置疑状态。

如果TM在超过AbandonTimeout之前未与RM重新连接,则放弃该事务。

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

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

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

AbandonTimeout默认为24小时。 TM是否将交易持续24小时,然后一旦达到超时,发回异常?

在该链路2 phase Commit的相位两个状态结束:

  1. 的协调器发送提交消息给所有的队列。
  2. 每个队列完成操作,并释放事务期间持有的所有锁和资源。
  3. 每个队列向协调员发送确认。
  4. 协调员在收到所有确认后完成交易。

那么如果从未接收到提交确认,全局事务会发生什么?

在恢复操作期间,我找不到全局事务的解决方案。任何帮助,将不胜感激。

谢谢, 马特

回答

0

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

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

+0

您是否意味着事务将作为提交返回到应用程序(而不是数据库)?那也是我的想法。你不会碰巧知道将要覆盖的文档在哪里?感谢你的回答! – MattG