Зеркальное отображение базы данных и межбазовые транзакции

Зеркальное отображение базы данных не поддерживается межбазовыми и распределенными транзакциями вследствие того, что атомарность или целостность транзакции не может быть гарантирована по следующим причинам.

  • Для межбазовых транзакций после перехода на другой ресурс зеркальная база данных находится на другом экземпляре сервера, и, как правило, это база данных, отдельная от незеркальной. Даже если обе базы данных зеркально отражены между теми же участниками, нет гарантии того, что обе базы данных перейдут на другой ресурс одновременно.

  • Для распределенных транзакций после перехода на другой ресурс новый основной сервер не сможет подключиться к координатору распределенных транзакций предыдущего основного сервера, использующего такой же идентификатор ресурса. Поэтому новый основной сервер не сможет получить состояние транзакции.

В следующем примере показано, как возникает логическое несоответствие. В этом примере приложение использует межбазовую транзакцию для вставки двух строк данных: одна строка вставляется в таблицу в зеркально отображаемую базу данных A, а другая строка вставляется в таблицу в зеркальной базе данных B. База данных A зеркально отображается в режиме высокого уровня безопасности с автоматическим переходом на другой ресурс. При фиксации транзакции база данных A становится недоступной, и сеанс зеркального отображения автоматически переходит на зеркальное отображение базы данных A.

После автоматического перехода на другой ресурс межбазовая транзакция может успешно зафиксироваться в базе данных B, но не в базе данных, с которой выполнен автоматический переход. Это случится, если исходный основной сервер для базы данных А перед переходом не отправил журнал межбазовых транзакций на зеркальный сервер. После автоматического перехода эта транзакция не будет существовать на новом основном сервере. Базы данных A и B станут несогласованными, поскольку вставленные данные в базе данных B останутся нетронутыми, в то время как вставленные данные в базе данных A будут потеряны.

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