通常、トランザクションは 1 つのデータベース サーバーで発生します。
BEGIN TRANSACTION
SELECT something FROM myTable
UPDATE something IN myTable
COMMIT
分散トランザクションには複数のサーバーが含まれます。
BEGIN TRANSACTION
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2
COMMIT
問題は、原子性などのトランザクション プロパティが両方のサーバーで満たされていることを確認するために、サーバーが通信する必要があるという事実にあります。トランザクションが成功した場合、両方のサーバーで値を更新する必要があります。トランザクションが失敗した場合、両方のサーバーでトランザクションをロールバックする必要があります。あるサーバーで値が更新されても、別のサーバーでは更新されないというようなことがあってはなりません。