1) TransactionScope осуществляет управление распределенными транзакциями?Если да, то каков механизм регистрации?
Да.Первый источник данных запускает новую локальную транзакцию, если не было предыдущей внешней транзакции.Если окружение было с другим источником данных, TransactionScope переводит транзакцию в распределенную транзакцию путем привлечения локальной транзакции.Затем TransactionScope начинает взаимодействовать с координатором распределенных транзакций (DTC), который связывается с менеджером транзакций каждого источника.
Механизм ведения журнала - это механизм менеджера транзакций каждого источника данных, который вы как бы упомянули:
2) Каждый менеджер транзакций должен иметь возможность ведения журналов для управления транзакциями.
Теперь в вашем сценарии сервер 1 переходит в автономный режим после успешной фиксации транзакции и не может выполнить откат, поскольку сервер 2 не можетне фиксируем ... хорошо, что вероятно позволит серверу 1 все еще восстанавливаться и выполнять откат.Я не знаю специфики, но у каждого менеджера транзакций есть ряд механизмов для правильного отката, и да, журнал здесь вступает в игру.
Рассмотрим эту грубую последовательность шагов, включая двух-Фаза фиксации :
- Сервер 1 и Сервер 2 голосуют за фиксацию на фазе 1 (фаза голосования) и информируют DTC и, следовательно, TransactionScope об этих голосах.
- Сервер1 перед голосованием записывает, что он будет делать в журнале.
- Затем DTC сообщает серверу 1 и 2 о фиксации (фаза фиксации).
- Сервер 1 фиксирует, записывает этот факт исообщает DTC.
- Сервер 2 не может выполнить фиксацию, поэтому выполняет откат и сообщает DTC.
- DTC пытается сообщить серверу 1 об отмене и сообщает TransactionScope.
- TransactionScope приходитназад с исключением.
В зависимости от времени, скажем, сервер 1 выпадает где-то после 5, 6 или 7. На этом этапе журналу сервера 1 A) может или B) может не хватитьинформация ктеперь, что делать.
Если сервер 1 все еще работает или перезапускается), он проверяет журнал на наличие проблем, и в случае, если A видит, что ему необходимо выполнить компенсирующую транзакцию .В случае B у него недостаточно информации, поэтому что-то (или кто-то) может решить проблему вне группы.