Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server
В этой статье описывается поддержка межбазовых и распределенных транзакций для групп доступности Always On и зеркального отображения баз данных.
Поддержка распределенных транзакций
SQL Server 2017 поддерживает распределенные транзакции для баз данных в группах доступности. Эта поддержка распространяется на базы данных на одном экземпляре SQL Server или базы данных на разных экземплярах SQL Server. Распределенные транзакции не поддерживаются для баз данных, настроенных для зеркального отображения.
Примечание.
SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) обеспечивает полную поддержку распределенных транзакций в группах доступности.
В версиях SQL Server 2016 (13.x) до пакета обновления 2 распределенные транзакции между базами данных (т. е. транзакция с использованием баз данных в одном экземпляре SQL Server) с участием базы данных в группе доступности не поддерживаются.
Сведения о настройка группы доступности для распределенных транзакций см. в статье Configure Availability Group for Distributed Transactions (Настройка группы доступности для распределенных транзакций).
Дополнительные сведения см. в следующих статьях:
- DTC Administration Guide (Руководство по администрированию DTC)
- DTC Developers Guide (Руководство для разработчиков DTC)
- DTC Programmers Reference (Справочник для программистов DTC)
SQL Server 2016 с пакетом обновления 1 (SP1) и более ранние версии: поддержка транзакций между базами данных в одном экземпляре SQL Server
В SQL Server 2016 с пакетом обновления 1 (SP1) и более ранних версиях транзакции между базами данных в одном и том же экземпляре SQL Server не поддерживаются в группах доступности. При транзакции между базами данных две базы данных не могут размещаться в одном экземпляре SQL Server, если любая из этих баз данных или обе базы данных находятся в группе доступности. Это ограничение также применяется в том случае, если базы данных принадлежат к одной и той же группе доступности.
Межбазовые транзакции также не поддерживаются для зеркального отображения базы данных.
SQL Server 2016 с пакетом обновления 1 (SP1) и ранее: поддержка распределенных транзакций
Распределенные транзакции в группах доступности поддерживаются в том случае, если базы данных размещаются в разных экземплярах SQL Server. Это также справедливо для распределенных транзакций между экземплярами SQL Server и другим сервером, совместимым с DTC.
Координатор распределенных транзакций (Майкрософт) (MSDTC) — это служба Windows, которая предоставляет инфраструктуру транзакций для распределенных систем. MSDTC (Microsoft Distributed Transaction Coordinator) позволяет клиентским приложениям включать несколько источников данных в одну транзакцию, которая затем подтверждается на всех серверах, участвующих в транзакции. Например, с помощью MSDTC можно координировать транзакции, которые охватывают несколько баз данных на разных серверах.
В SQL Server 2016 представлена возможность использования распределенных транзакций, где одна или несколько баз данных входят в группу доступности. До выпуска SQL Server 2016 распределенные транзакции не поддерживались для баз данных в группах доступности. SQL Server 2016 может регистрировать диспетчер ресурсов для каждой базы данных. Эта новая функция определяет возможность включения баз данных в группах доступности в распределенные транзакции.
Необходимо выполнить следующие требования.
Группы доступности должны быть запущены в Windows Server 2012 R2 или более поздней версии. Для Windows Server 2012 R2 необходимо установить обновление в KB3090973.
Группы доступности необходимо создавать с помощью команды CREATE AVAILABILITY GROUP и предложения WITH DTC_SUPPORT = PER_DB. Сейчас невозможно изменить существующую группу доступности.
Все экземпляры SQL Server, входящие в группу доступности, должны быть экземплярами SQL Server 2016 или более поздней версии.
Отсутствие поддержки распределенных транзакций
Далее приведены конкретные случаи, когда распределенные транзакции не поддерживаются.
В SQL Server 2016 с пакетом обновления 1 (SP1) и более ранней версии, когда несколько баз данных, включенных в транзакцию, находятся в одной группе доступности.
В SQL Server 2016 с пакетом обновления 1 (SP1) и более ранней версии, когда по меньшей мере одна база данных находится в группе доступности, а другая база данных находится в том же экземпляре SQL Server.
Если группа доступности не была создана с включённой поддержкой распределённых транзакций.
Зеркалирование базы данных.
Внимание
Определите соответствующий результат по умолчанию для транзакций, которые DTC не удалось разрешить для вашей среды. Сведения о настройке результата по умолчанию см. в разделе Параметр конфигурации сервера in-doubt xact resolution.
Пример сценария с зеркальным отображением базы данных
В следующем примере зеркального отображения базы данных показано, как возникает логическое несоответствие. В этом примере приложение использует межбазовую транзакцию для вставки двух строк данных: одна строка вставляется в таблицу зеркально отображаемой базы данных A, другая — в таблицу второй базы данных, B. База данных A зеркально отображается в режиме высокого уровня безопасности с автоматической отработкой отказа. Во время фиксации транзакции база данных A становится недоступной, и сеанс зеркального отображения автоматически переключается на зеркальную копию базы данных A.
После переключения при отказе межбазовая транзакция может быть успешно зафиксирована в базе данных B, но не в базе данных, на которой произошло переключение при отказе. Это произойдет, например, в том случае, если исходный основной сервер для базы данных А не отправил журнал межбазовых транзакций на зеркальный сервер перед возникновением сбоя. После переключения при отказе эта транзакция не будет существовать на новом главном сервере. Базы данных A и B станут несогласованными, поскольку вставленные данные в базе данных B останутся нетронутыми, в то время как вставленные данные в базе данных A будут потеряны.
Похожий сценарий может возникнуть при использовании транзакций координатора распределенных транзакций (Майкрософт). Например, после переключения при отказе новый основной сервер обращается к MS DTC. Но MS DTC не знает о новом основном сервере и завершает все транзакции, готовящиеся к фиксации, которые считаются зафиксированными в других базах данных.
Примечание.
Использование зеркального отображения базы данных с DTC или использование групп доступности с DTC способами, не описанными в этой статье, не поддерживается. Это не означает, что компоненты продукта, не связанные с координатором распределенных транзакций, также не поддерживаются. Однако проблемы, связанные с ненадлежащим использованием распределенных транзакций, не будут устранены.