MS DTC 概觀
當一筆交易包含許多不同來源的資料時,就必須協調這些提供資料的應用程式。協調的重要性在於確保交易必須是不可部份完成。換句話說,資料的修改不是全部執行,就是全部不執行。如果一筆交易部份完成,部份失敗,就會造成交易邏輯沒有一致性,還可能使資料流失。MS DTC 執行 兩階段交易認可(Two-Phase Commit) 確認交易邏輯。
兩階段交易認可近年來在技術上有很大的改革,這並不是新的技術,也非 SQL Server 獨有。事實上,因 SQL Server 和 Oracle 兩種資料庫皆支援兩階段交易認可的模式及 ODBC,因此兩種資料庫間還可利用兩階段交易認可進行分散式交易。
兩階段交易認可的兩個階段分別為:準備階段與認可階段。在應用程式中以 COMMIT 指令初始化 MS DTC 執行兩階段交易認可。一台 SQL Server 上的 MS DTC,與另一個系統上的 MS DTC 協調處理一筆分散式交易。MS DTC 中處理兩段交易認可的元件稱作 資源管理員 。
當您執行了認可(COMMIT)指令,MS DTC 通知資源管理員開始 準備階段 。第一階段(也就是準備階段),會執行所有認可所需要的動作,包括排清緩衝區和寫入交易記錄檔等動作。這個階段所執行的步驟和一般的標準認可步驟類似,唯一不同的是在這裡,SQL Server 不會真的認可交易,也不會對交易所用到的資源解除鎖定。當所有認可交易的前置動作都完成時,資源管理員便傳送準備成功的訊號給交易管理員。在所有的資源管理員都傳出成功的訊號時,就進入認可階段。
認可階段 在分散式系統中進行。在這個階段,如果所有的資源管理員都傳出成功訊號,應用程式端就會接受到認可成功的訊息;如果其中有一個資源管理員傳出失敗訊號,就會傳送 復原(rollback) 指令給每位資源管理員,這時應用程式端就會收到認可失敗的訊息。當系統交易時間過長,也會執行復原指令。當一個系統內的認可失敗,分散式交易中所有其他相關系統也會執行復原指令。
備註:
兩階段交易認可:
對於分散式資料庫系統來說,因為資料庫的資料是分散儲存在各地的資料庫伺服器,當交易需要執行交付時,如果馬上執行,若任何一個資料庫伺服器沒有完成交付,就有可能造成整個分散式資料庫的資料不一致。
分散式資料庫系統是將交付分為兩個階段來執行,稱為「二階段交付」(Two-phase Commit, 2PC),如下所示:
1. 協調者(Coordinator)送出SECURE訊息給各資料庫伺服器,此時各資料庫伺服器交付分散儲存各處的資料庫伺服器可以執行交付,否則將放棄此交易。
2. 當各資料庫伺服器都回覆可執行交付後,協調者才送出交付訊息,讓各資料庫伺服器執行交付交易,並且回覆是否成功,如果有任何一個資料庫伺服器回覆錯誤,協調者就會送出復原訊息取消交易。
參考資料:
沒有留言:
張貼留言