2010年11月12日 星期五

Microsoft 分散式交易協調員

MS DTC 是 Windows 2000 元件服務的一部份。(MS DTC 這個觀念在 SQL Server 7 就已經存在。)元件服務也包含 COM+。COM+ 是用於有非交易式通訊需求時,而 MS DTC 則用於有交易式訊息通訊需求時。 MS DTC 主要用來處理分散式交易。所謂 分散式交易 ,就是跨越兩個或多個資料庫的單一 SQL Server 內部的交易,這些資料庫可以放在相同或分別放在不同的電腦系統內。而在同一個資料庫內不同資料表間的交易,則不能稱作分散式交易。在同一個系統上,資料庫與資料庫間的前端交易可利用一般(非分散式)處理;但是 SQL 在執行時仍會以分散式交易處理。
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. 當各資料庫伺服器都回覆可執行交付後,協調者才送出交付訊息,讓各資料庫伺服器執行交付交易,並且回覆是否成功,如果有任何一個資料庫伺服器回覆錯誤,協調者就會送出復原訊息取消交易。
參考資料: