1. 程式人生 > >SQL Server的分散式XA事務

SQL Server的分散式XA事務

XA–eXtended Architecture 在事務中意為分散式事務
XA由協調者(coordinator,一般為transaction manager)和參與者(participants,一般在各個資源上有各自的resource manager)共同完成。
例如在java程式中實現一個操作多個異構資料庫資料的分散式事務,則分工為:
Transaction Manager
javax.transaction.xa.XAResource, or Java::BitronixTm(aka “Transaction Coordinator”) 也就是程式本身

Resource Managers
MySQL, PostgreSQL, Oracle, Redis, MQueue, MongoDB, SQL Server etc.(aka “cohorts”) 即各個資料庫。也就是說只要是提供了相應Java介面的資料庫產品就可以作為XA的參與者。
下面的link就是SQL Server提供的Java API:

https://msdn.microsoft.com/en-us/library/aa342335(v=sql.110).aspx

在SQL Server中使用XA事務

在資料庫系統內部也可以使用分散式事務。如下例就定義了一個分散式事務,同時修改AdventureWorks2012和一個遠端資料庫的資料。其中遠端資料庫必須為定義好的linked server。
此時執行該事務的SQL Server engine扮演協調者的角色。

USE AdventureWorks2012;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
    DELETE AdventureWorks2012.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
    DELETE RemoteServer.AdventureWorks2012.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO