top
Loading...
13.4.7.XA事務
13.4.7. XA事務
13.4.7.1. XA事務SQL語法
13.4.7.2. XA事務狀態

對于InnoDB存儲引擎,可以獲得對XA事務的支持。MySQL XA的執行依據X/Open CAE文件Distributed Transaction Processing: The XA Specification。本文件由Open Group出版,可以從http://www.opengroup.org/public/pubs/catalog/c193.htm獲取。在I.5節,“對XA事務的限制”對當前XA執行的限制進行了描述。

在客戶端方面,沒有特殊要求。連接MySQL服務器的XA接口由以XA關鍵詞開頭的SQL語句組成。MySQL客戶端必須能發送SQL語句,并能理解XA語句接口的語義,但是它們不需要被鏈接到特定的MySQL客戶庫上。

當前,在MySQL連接器當中,MySQL連接器/J 5.0.0直接支持XA(也就是,通過一個可以控制XA SQL語句接口的等級接口)。

XA支持分布式的事務,具備能力,讓多個獨立的事務資源參加全局的事務。事務資源通常是RDBMSs,不過也可以是其它種類的資源。

一個全局事務會涉及到多個行動,這些行動本身是事務性的。不過,所有行動都必須作為一個群組成功完成,或者作為一個群組被回滾。實際上,這會延伸ACID性質,“提高等級”,這樣,多個ACID事務就可以一起執行,相當于也擁有ACID性質的全局操作的組件。(但是,對于一個分布式事務,您必須使用SERAILIZABLE隔離等級,以實現ACID性質。對于一個非分布式事務,使用REPEATABLE READ就足夠了。但是對于分布式事務,使用REPEATABLE READ是不夠的。)

分布式事務的部分示例:

·         應用程序相當于一個把消息傳遞服務和RDBMS組合在一起的整合工具。應用程序可以確保,所有進行消息發送、回收和處理的事務(同時包含一個事務數據庫)均在一個全局事務中發生。您可以把這看作是“事務電子郵件。”

·         應用程序執行的行動會涉及到不同數據庫服務器,比如MySQL服務器和Oracle服務器(或多個MySQL服務器)。涉及到多個服務器的行動必須作為一個全局事務的一部分發生,而不是作為針對每個服務器的獨立的本地事務發生。

·         銀行把帳戶信息保存在RDBMS中,并通過自動取款機(ATMs)分發和收取欠款。必須要確保ATM行動被正確地反映到帳戶中,但是這不能只由RDBMS單獨完成。全局事務管理器會整合ATM和數據庫資源,以確保財務事務的整體一致性。

使用全局事務的應用程序涉及一個或多個資源管理器和一個事務管理器:

·         資源管理器(RM)用于提供通向事務資源的途徑。數據庫服務器是一種資源管理器。該管理器必須可以提交或 回滾由RM管理的事務。

·         事務管理器(TM)用于協調作為一個全局事務一部分的事務。TM與管理每個事務的RMs進行通訊。一個全局事務中各個單個事務均是全局事務的“分支”。全局事務和各分支通過一種命名方法進行標識。這種命名方法在后面進行講述。

MySQL執行XA MySQL時,MySQL服務器相當于一個用于管理全局事務中的XA事務的資源管理器。與MySQL服務器連接的客戶端相當于事務管理器。

要執行一個全局事務,必須知道涉及到了哪些組件,并且把每個組件引到一點,在此時,組件可以被提交或回滾時。根據每個組件報告的有關組件效能的內容,這些組件必須作為一個原子性群組全部提交或 回滾。即,要么所有的組件必須提交,要么所有的組件必須回滾。要管理一個全局事務,必須要考慮任何組件或連接網絡可能會故障。

用于執行全局事務的過程使用兩階段提交(2PC),發生時間在由全局事務的分支進行的行動已經被執行之后。

1.    在第一階段,所有的分支被預備好。即,它們被TM告知要準備提交。通常,這意味著用于管理分支的每個RM會記錄對于被穩定保存的分支的行動。分支指示是否它們可以這么做。這些結果被用于第二階段。

2.    在第二階段,TM告知RMs是否要提交或 回滾。如果在預備分支時,所有的分支指示它們將能夠提交,則所有的分支被告知要提交。如果在預備時,有任何分支指示它將不能提交,則所有分支被告知 回滾。

在有些情況下,一個全局事務可能會使用一階段提交(1PC)。例如,當一個事務管理器發現,一個全局事務只由一個事務資源組成(即,單一分支),則該資源可以被告知同時進行預備和提交。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
北斗有巢氏 有巢氏北斗