java 分布式事務處理

2021-04-13 08:33:15 字數 1418 閱讀 2771

分布式事務處理   

當資料分布在多個資料庫伺服器上時,就需要各種保護措施來保證資料正確地寫到所有資料庫中。例如,考慮乙個在三個分離的遠端資料庫上修改的 客戶帳戶平衡表,如果在事務寫階段,任何乙個資料庫連線失敗,資料庫之間就失去同步。怎樣檢測並更正這種情形呢?事務處理(tp)監示乙個叫做兩階段提交 的過程並在某種程度上解決了這個問題。

分布式系統上的實時事務處理需要乙個兩階段提交過程保證將事務得到多個資料庫上時的資料完整性。所涉及到的每個資料庫在事務被提交給任何其他資料庫 時都要授權給它。如果事務成功,則被提交,否則事務應被回退。與容錯系統類似,兩階段提交保護系統防止在事務寫期間發生系統錯誤。它也允許操作員異常終止 乙個事務並將資料庫恢復到原先的狀態。事務監示器按下面的過程跟蹤事務過程。   

1.寫操作命令被送到每個資料庫後,事務監示器等待乙個響應訊號以保證所有的系統都準備好寫。如果所有系統都來響應,事務將在這裡異常終止。   

2.假定都響應了,事務監示器指示資料庫開始寫,然後等待每乙個系統表明資料寫成功的確認訊號。   

3.若未得到所有系統響應訊號(由於線路或系統故障),事務監示器命令所有資料庫將此次的寫操作取消。

例如,執行在機器a上的乙個元件是單個事務的組成部分之一,元件能夠利用機器b上的sql server執行資料庫事務。組成事務的另一組件用執行在機器c上的oracle伺服器執行資料庫事務。這三颱機器執行著四塊不同的**,它們全都要參與到這個事務中。

即使通過com+隱藏分布式事務中的細節,也必要研究和了解分布式事務的「幕後」結構。請記住這些acid特性適用於所有型別的事務,不論事務涉及的資料庫是什麼型別或數量有多少。

使用ms dtc進行兩階段提交

讓我們再看一下上述分布式事務的例子。如果oracle伺服器停機了,如何保證事務的原子性。答案是使用兩階段提交(two-phase commit,2pc)和通過microsoft分布式事務協調器(ms dtc)協調。

msdtc是最先整合在sql server中,現在已成為com+必不可少的部分,通過在事務處理中加入其他的因子,ms dtc確認所有的過程完成並提交他們。

讓我們進一步研究ms dtc,了解其工作方式。為了能用兩階段提交協議進行協調,事務中的每個資料來源必須裝有ms dtc。在這些安裝中,主要的協調器總是在事務的起源之處。這個主要的協調器稱為提交協調器,它負責確保事務的提交或終止。不管事務是成功地提交還

是回滾,提交協調器都負責向客戶應用程式返回乙個報告。

在兩階段提交中第一階段是準備階段,每個伺服器執行它接收的指令,但所有應寫到磁碟的內容都被緩衝,如圖1 9 - 1所示。

一旦伺服器已執行了指令,就通知提交協調器關於事務的狀況,如圖1 9 - 2所示。

第二階段稱為提交階段。如果提交協調器接收到來自每個資料來源的「準備提交」通知,就提交事務,如圖1 9 - 3。

然而,如果從某一受影響的資料來源接收到失敗資訊,提交協調器將執行回滾,並且通知客戶應用程式,見圖1 9 - 4。

分布式事務處理

前提如下 db a,db b為兩個資料庫 都有乙個person表 該錶兩個字段 personid 主鍵 和personname 下面的分布式事務 實現的是 同時向這兩個庫的兩個表新增資料 set xact abort on 開始分布式事務 begin distributed transaction ...

分布式事務處理

場景 a資料庫有乙個人叫小明,b資料庫有乙個人叫小花,現在小明要給小花轉賬100,那麼就有兩個操作,小明賬戶 100,小 花賬戶 100,由於是跨資料庫,事務在此時沒用,那該如何保證兩人賬戶資料的準確。方案一 兩次提交,設計理念 在同乙個資料庫中,我們可以使用事務來保證資料的原子性。現在我們有兩個資...

XA分布式事務處理

在談到 xa規範之前,必須首先了解分布式事務處理 distributed transaction processing dtp 的概念。transaction 即事務,又稱之為交易,指乙個程式或程式段,在乙個或多個資源如 資料庫 或檔案上為完成某些功能的執行過程的集合。分布式事務處理是指乙個事務可能...