2013-11-22 61 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