#sql-server #distributed-transactions #msdtc
#sql-сервер #распределенные транзакции #msdtc
Вопрос:
Может кто-нибудь, пожалуйста, объяснить мне, как это работает? что произойдет, если после фиксации один из участников распределенной транзакции потеряет соединение? Как другие участники узнают, что им потребуется откат? Я не вижу, как распределенная транзакция будет ACID, кто-нибудь может объяснить?
вот пример
SET XACT_ABORT ON
BEGIN DISTRIBUTED TRANSACTION
INSERT INTO [linkedserver1].[Play].[dbo].[tb_Test] VALUES ('Test');
INSERT INTO [linkedserver2].[Play].[dbo].[tb_Test] VALUES ('Test');
INSERT INTO [linkedserver3].[Play].[dbo].[tb_Test] VALUES ('Test');
COMMIT
SET XACT_ABORT OFF
Комментарии:
1. Распределенные транзакции не на 100% надежны, но, вероятно, на 99,9999% (или более).
2. В распределенных транзакциях используется двухфазный протокол фиксации с некоторыми незначительными изменениями . Это далеко не тривиально (а распределенные транзакции относительно дороги), но оно учитывает такие сценарии. В принципе, транзакция не фиксируется до тех пор, пока все участники не согласятся, что это так — если в какой-либо момент произойдет сбой, это соглашение не может быть выполнено, и рано или поздно будет инициирован откат (либо уведомлением, либо таймаутом, либо локальным действием).