Транзакции — группы доступности AlwaysOn и зеркальное отображение баз данныхTransactions - availability groups and database mirroring

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ:даSQL Server (начиная с 2017)нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseTHIS TOPIC APPLIES TO:yesSQL Server (starting with 2017)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

В этом разделе описываются транзакции между базами данных и распределенные транзакции для групп доступности AlwaysOn и зеркального отображения базы данных.This topic describes cross-database and distributed transactions support for Always On availability groups and database mirroring.

Поддержка распределенных транзакцийSupport for distributed transactions

SQL Server 2017 поддерживает распределенные транзакции для баз данных в группах доступности.SQL Server 2017 supports distributed transactions for databases in availability groups. Эта поддержка распространяется на базы данных на одном экземпляре SQL Server или базы данных на разных экземплярах SQL Server.This support includes databases on the same instance of SQL Server or databases on different instances of SQL Server. Распределенные транзакции не поддерживаются для баз данных, настроенных для зеркального отображения.Distributed transactions are not supported for databases configured for database mirroring.

Примечание

[!INCLUDE[SQL Server 2016]](../../../includes/sssql15-md.md)] В SQL Server 2016 включена ограниченная поддержка распределенных транзакций для баз данных в группе доступности.(../../../includes/sssql15-md.md)]SQL Server 2016 included limited support for distributed transactions in for databases in an availability group. Распределенные транзакции с использованием баз данных в группе доступности поддерживались при условии, что другие базы данных в транзакции отсутствовали в том же экземпляре SQL Server.Distributed transactions using databases in an availability group were supported as long as no other databases in the transaction were in the same instance of SQL Server. Дополнительные сведения см. в статье SQL Server 2016 DTC Support in Availability Groups (Поддержка DTC для SQL Server 2016 в группах доступности).For more information, see SQL Server 2016 DTC Support In Availability Groups

Сведения о настройка группы доступности для распределенных транзакций см. в статье Configure Availability Group for Distributed Transactions (Настройка группы доступности для распределенных транзакций).To configure an availability group for distributed transactions, see Configure Availability Group for Distributed Transactions.

Дополнительные сведения см. в следующих статьях:See more information at:

SQL Server 2016 и более ранние версии: поддержка транзакций между базами данных в одном экземпляре SQL ServerSQL Server 2016 and before: Support for cross-database transactions within the same SQL Server instance

В SQL Server 2016 и более ранних версиях транзакции между базами данных в одном и том же экземпляре SQL Server не поддерживаются в группах доступности.In SQL Server 2016 and before, cross-database transactions within the same SQL Server instance are not supported for availability groups. Это означает, что при транзакции между базами данных две базы данных не могут размещаться в одном экземпляре SQL ServerThis means that no two databases in a cross-database transaction may be hosted by the same SQL Server instance. даже в том случае, если они принадлежат к одной и той же группе доступности.This is true even if those databases are part of the same availability group.

Межбазовые транзакции также не поддерживаются для зеркального отображения базы данных.Cross-database transactions are also not supported for database mirroring.

SQL Server 2016: поддержка распределенных транзакций SQL Server 2016: Support for distributed transactions

Распределенные транзакции поддерживаются для групп доступности.Distributed transactions are supported with availability groups. Это относится к распределенным транзакциям между базами данных, размещенными в двух разных экземплярах SQL Server,This applies to distributed transactions between databases hosted by two different SQL Server instances. и к распределенным транзакциям между SQL Server и другим сервером, совместимым с DTC.It also applies to distributed transactions between SQL Server and another DTC-compliant server.

Координатор распределенных транзакций (Майкрософт) (MSDTC) — это служба Windows, которая предоставляет инфраструктуру транзакций для распределенных систем.Microsoft Distributed Transaction Coordinator (MSDTC or DTC) is a Windows service that provides transaction infrastructure for distributed systems. MSDTC позволяет клиентским приложениям включать несколько источников данных в одну транзакцию, которая затем фиксируется на всех серверах, включенных в транзакцию.MSDTC permits client applications to include multiple data sources in one transaction which then is committed across all servers included in the transaction. Например, с помощью MSDTC можно координировать транзакции, которые охватывают несколько баз данных на разных серверах.For example, you can use MSDTC to coordinate transactions that span multiple databases on different servers.

В SQL Server 2016 представлена возможность использования распределенных транзакций, где одна или несколько баз данных входят в группу доступности.SQL Server 2016 introduces the capability to use distributed transactions where one or more of the databases in the transaction are in an availability group. До выпуска SQL Server 2016 распределенные транзакции не поддерживались для баз данных в группах доступности.Prior to SQL Server 2016 distributed transactions were not supported for databases in availability groups. SQL Server 2016 может регистрировать диспетчер ресурсов для каждой базы данных.SQL Server 2016 can register a resource manager per database. Эта новая функция определяет возможность включения баз данных в группах доступности в распределенные транзакции.This new capability is why distributed transactions can include databases in availability groups.

Необходимо выполнить следующие требования.The following requirements must be met:

  • Группы доступности должны быть запущены на Windows Server 2016 или Windows Server 2012 R2.Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. Для Windows Server 2012 R2 необходимо установить обновление KB3090973, доступное по адресу https://support.microsoft.com/en-us/kb/3090973.For Windows Server 2012 R2, you must install the update in KB3090973 available at https://support.microsoft.com/en-us/kb/3090973.

  • Availability groups must be created with the CREATE AVAILABILITY GROUP и предложения WITH DTC_SUPPORT = PER_DB .Availability groups must be created with the CREATE AVAILABILITY GROUP command and the WITH DTC_SUPPORT = PER_DB clause. Сейчас невозможно изменить существующую группу доступности.You cannot currently alter an existing availability group.

  • Все экземпляры SQL Server, которые будут входить в группу доступности, должна быть экземплярами SQL Server 2016 или более поздней версии.All instances of SQL Server that will participate in the availability group must be SQL Server 2016 or later.

    Отсутствие поддержки распределенных транзакцийNon-support for distributed transactions

    Далее приведены конкретные случаи, когда распределенные транзакции не поддерживаются.Specific cases where distributed transactions are not supported include:

    • В SQL Server 2016 и более ранних версиях несколько баз данных, включенных в транзакцию, находятся в одной группе доступности.In SQL Server 2016 and prior, where more than one database involved in the transaction is in the same availability group.

    • В SQL Server 2016 и более ранних версиях по меньшей мере одна база данных находится в группе доступности, а другая база данных — в одном экземпляре SQL Server.In SQL Server 2016 and prior, where at least one database is in an availability group and another database is on the same instance of SQL Server.

    • Группа доступности не была создана с включенной распределенной транзакцией.Where the availability group was not created with enable distributed transaction.

    • Зеркальное отображение базы данных.Database mirroring.

    Важно!

    Определите соответствующий результат по умолчанию для транзакций, которые DTC не удалось разрешить для вашей среды.Determine the appropriate default outcome of transactions that DTC is unable to resolve for your environment. Сведения о настройке результата по умолчанию см. в разделе Параметр конфигурации сервера in-doubt xact resolution.For information on how to configure the default outcome see in-doubt xact resolution Server Configuration Option.

Пример сценария с зеркальным отображением базы данныхExample scenario with database mirroring

В следующем примере зеркального отображения базы данных показано, как возникает логическое несоответствие.The following database mirroring example illustrates how a logical inconsistency could occur. В этом примере приложение использует межбазовую транзакцию для вставки двух строк данных: одна строка вставляется в таблицу зеркально отображаемой базы данных A, другая — в таблицу второй базы данных, B. База данных A зеркально отображается в режиме высокого уровня безопасности с автоматической отработкой отказа.In this example, an application uses a cross-database transaction to insert two rows of data: one row is inserted into a table in a mirrored database, A, and the other row is inserted into a table in another database, B. Database A is being mirrored in high-safety mode with automatic failover. При фиксации транзакции база данных A становится недоступной, и сеанс зеркального отображения автоматически переходит на зеркальное отображение базы данных A.While the transaction is being committed, database A becomes unavailable, and the mirroring session automatically fails over to the mirror of database A.

После автоматической отработки отказа межбазовая транзакция может успешно зафиксироваться в базе данных B, но не в базе данных, с которой выполнен автоматический переход.After the failover, the cross-database transaction might be successfully committed on database B but not on the failed-over database. Это случится, если исходный основной сервер для базы данных А перед переходом не отправил журнал межбазовых транзакций на зеркальный сервер.This would occur if the original principal server for database A had not sent the log for the cross-database transaction to the mirror server before the failure. После автоматической отработки отказа эта транзакция не будет существовать на новом основном сервере.After the failover, that transaction would not exist on the new principal server. Базы данных A и B станут несогласованными, поскольку вставленные данные в базе данных B останутся нетронутыми, в то время как вставленные данные в базе данных A будут потеряны.Databases A and B would become inconsistent, because the data inserted in database B remains intact, but the data inserted in database A has been lost.

Похожее может произойти при использовании транзакций MS DTC.A similar scenario can occur while using a MS DTC transaction. Например, после автоматической отработки отказа новая основная база данных обращается к MS DTC.For example, after failover, the new principal contacts MS DTC. Но MS DTC не знает о новом основном сервере и завершает все транзакции, готовящиеся к фиксации, которые считаются зафиксированными в других базах данных.But MS DTC has no knowledge of the new principal server, and it terminates any transactions that are "preparing to commit," which are considered committed in other databases.

Примечание

Применение зеркального отображения базы данных или использование групп доступности с помощью DTC способами, которые не утверждены в этом разделе, не поддерживается.Using Database Mirroring with DTC or using availability groups with DTC in ways not approved in this topic is not supported. Это не означает, что компоненты продукта, не связанные с DTC, также не поддерживаются. Однако проблемы в связи с ненадлежащим использованием распределенных транзакций не будут устранены.This does not imply that aspects of the product unrelated to DTC are unsupported; however, any issues arising from the improper use of distributed transactions will not be supported.

См. также:See Also

Always On availability groups: Interoperability (SQL Server)Always On availability groups: Interoperability (SQL Server)