SQL Server的分散式XA事務
阿新 • • 發佈:2019-01-06
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