Почему MSDTC не поддерживается при использовании Зеркального отражения SQL Server и Автоматической Обработки отказа?

У меня есть приложение, что я хотел бы иметь Зеркальное отражение SQL Server поддержки. Однако архитектура в настоящее время такова, что несколько услуг WCF и соединений с БД будут включены в список в единственный MSDTC транзакции, и Microsoft заявляет, что MSDTC не поддерживается при использовании Зеркального отражения.

Их объяснение не ужасно информативно:

Подобный сценарий может произойти при использовании зеркального отражения базы данных с транзакциями MS DTC. Например, новый основной сервер связывается с MS DTC после обработки отказа. Однако MS DTC не знает о новом основном сервере. Поэтому MS DTC останавливает любые транзакции, которые находятся в "подготовке фиксировать" фазу, даже при том, что транзакции считают зафиксированными в других базах данных.

То, что у меня есть проблема при понимании, является последним предложением. Как это несколько отличается, чем если бы сервер БД не был зеркально отражен и просто перестал работать в том же самом моменте времени? Кто-то может объяснить это мне? Я должен смочь объяснить это другим в моей организации (а также клиенты), но я не понимаю, почему MSDTC может правильно откатывать/компенсировать в одном сценарии, но это не может, если один из участников является зеркальным SQL-сервером (в режиме Full Safety).

5
задан Bryan Batchelder 12 July 2010 в 19:52
поделиться

1 ответ

MSDTC не знает о зеркалировании. Поэтому, когда он регистрирует диспетчер ресурсов в распределенной транзакции, он будет знать, что RM по его имени, скажем, Сервер A. После отработки отказа журнал сообщит новому принципалу: «Обратитесь в DTC и посмотрите, каков статус транзакции T. '. Новый принципал, названный Сервер B, идет в DTC и говорит: «Я - сервер B, каков результат транзакции T?» и DTC скажет ему: «Уходите, я вас не знаю, вы не участвуете в транзакции T». Это также описано в статье базы знаний:

После отработки отказа новый участник сервер не может подключиться к MS DTC предыдущий основной сервер, который использует тот же идентификатор ресурса. Следовательно, новый основной сервер не может получить статус транзакции

. Вы спрашиваете: «Чем это отличается от того, если бы сервер БД не был зеркалирован и просто умер в тот же момент времени?». Разница в том, что если бы это произошло, то, когда база данных будет восстановлена, она будет восстановлена ​​на том же сервере , и этот сервер может связаться с DTC и попросить его откатить распределенную транзакция, в которой он был зачислен.

7
ответ дан 14 December 2019 в 08:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: