Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Транзакции между базами данных и распределенные транзакции не поддерживаются группами доступности AlwaysOn или зеркальным отображением базы данных. Это связано с тем, что атомарность и целостность транзакций не может быть гарантирована по следующим причинам:
Для транзакций по кросс-базам данных: каждая база данных подтверждается независимо. Таким образом, даже для баз данных в одной группе доступности переключение на резервный узел может произойти после фиксации транзакции в одной базе данных, но до её фиксации в другой базе данных. Для зеркального отображения базы данных эта проблема усложняется, так как после переключения на резервный сервер зеркальная база данных обычно находится на другом экземпляре сервера, чем другая база данных, и даже если обе базы данных зеркально отражаются между теми же двумя партнерами, нет никаких гарантий, что обе базы данных переключатся одновременно.
Для распределенных транзакций: после переключения на резервный сервер новый основной сервер или основная реплика не может подключиться к координатору распределенных транзакций на предыдущем основном сервере или основной реплике. Поэтому новый основной сервер или первичная реплика не может получить состояние транзакции.
В следующем примере зеркального отображения базы данных показано, как может произойти логическое несоответствие. В этом примере приложение использует транзакцию между базами данных для вставки двух строк данных: одна строка вставляется в таблицу в зеркалируемой базе данных, А, а другая строка вставляется в таблицу в другой базе данных, Б. База данных А зеркалируется в режиме высокой безопасности с автоматическим переключением при отказе. Пока транзакция фиксируется, база данных A становится недоступной, и сеанс зеркального отображения автоматически переключается на зеркало базы данных A.
После переключения при отказе транзакция между базами данных может быть успешно зафиксирована в базе данных B, но не в базе данных, подвергшейся отказу. Это произойдет, если исходный основной сервер базы данных A не отправил журнал для транзакции между базами данных зеркальному серверу до сбоя. После переключения на резервный сервер эта транзакция не будет существовать на новом основном сервере. Базы данных A и B становятся несогласованными, поскольку данные, вставляемые в базу данных B, остаются нетронутыми, но данные, вставляемые в базу данных A, были потеряны.
Аналогичный сценарий может произойти при использовании транзакции MS DTC. Например, после переключения новый главный связывается с MS DTC. Но MS DTC не имеет знаний о новом основном сервере, и он завершает любые транзакции, которые "готовятся к фиксации", которые считаются зафиксированными в других базах данных.
Это важно
Использование зеркального отображения базы данных или групп доступности вместе с DTC не приводит к неподдерживаемой установке SQL Server. Однако если база данных является частью сеанса зеркального отображения базы данных или группы доступности и DTC также используется в базе данных, проблемы поддержки будут расследованы корпорацией Майкрософт только в том случае, если они не связаны с объединенным использованием зеркального отображения базы данных или групп доступности с DTC.