Обычно транзакции происходят на одном сервере базы данных:
BEGIN TRANSACTION
SELECT something FROM myTable
UPDATE something IN myTable
COMMIT
A распределенная транзакция включает несколько серверов:
BEGIN TRANSACTION
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2
COMMIT
Сложность возникает из-за того, что серверы должны сообщать , чтобы гарантировать, что транзакционные свойства, такие как атомарность , удовлетворены на обоих серверах: если транзакция завершается успешно, значения должны быть обновлены на обоих серверах. Если транзакция не удалась, транзакция должна быть откатана на обоих серверах. Никогда не должно происходить, чтобы значения обновлялись на одном сервере, но не обновлялись на другом.