分佈式事務處理是指一個事務可能涉及多個數據庫操做
分佈式事務處理的關鍵是必須有一種方法能夠知道事務在任何地方所作的全部動做,提交或回滾事務必須產生一致的結果(所有提交或所有回滾)。sql
XA是X/Open DTP組織(X/Open DTP group)定義的兩階段提交協議,XA被許多數據庫(如Oracle、DB二、SQL Server、MySQL)和中間件等工具(如CICS 和 Tuxedo).本地支持 。
X/Open DTP模型(1994)包括應用程序(AP)、事務管理器(TM)、資源管理器(RM)、通訊資源管理器(CRM)四部分。數據庫
在這個模型中,一般事務管理器(TM)是交易中間件,資源管理器(RM)是數據庫,通訊資源管理器(CRM)是消息中間件。分佈式
通常狀況下,某一數據庫沒法知道其它數據庫在作什麼,所以,在一個DTP環境中,交易中間件是必需的,由它通知和協調相關數據庫的提交或回滾。而一個數據庫只將其本身所作的操做(可恢復)影射到全局事務中。 函數
XA就是X/Open DTP定義的交易中間件與數據庫之間的接口規範(即接口函數),交易中間件用它來通知數據庫事務的開始、結束以及提交、回滾等工具
XA接口函數由數據庫廠商提供。一般狀況下,交易中間件與數據庫經過XA 接口規範,使用兩階段提交來完成一個全局事務,XA規範的基礎是兩階段提交協議。spa
在第一階段:交易中間件請求全部相關數據庫準備提交(預提交)各自的事務分支,以確認是否全部相關數據庫均可以提交各自的事務分支。當某一數據庫收到預提交後,若是能夠提交屬於本身的事務分支,則將本身在該事務分支中所作的操做固定記錄下來,並給交易中間件一個贊成提交的應答,此時數據庫將不能再在該事務分支中加入任何操做,但此時數據庫並無真正提交該事務,數據庫對共享資源的操做還未釋放(處於鎖定狀態)。若是因爲某種緣由數據庫沒法提交屬於本身的事務分支,它將回滾本身的全部操做,釋放對共享資源上的鎖,並返回給交易中間件失敗應答。server
在第二階段:交易中間件審查全部數據庫返回的預提交結果,如全部數據庫均可以提交,交易中間件將要求全部數據庫作正式提交,這樣該全局事務被提交。而若是有任一數據庫預提交返回失敗,交易中間件將要求全部其它數據庫回滾其操做,這樣該全局事務被回滾。中間件
在Windows中的DTC屬性中設置開啓 XA事務 ,SQL Server就能夠聯同Windows使用分佈式事務blog
相關文章:http://www.sqldbadiaries.com/2014/09/24/no-transaction-is-active-message-when-accessing-linked-server/接口
若有不對的地方,歡迎你們拍磚o(∩_∩)o
本文版權歸做者全部,未經做者贊成不得轉載。