Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
azure Synapse Analytics Analytics
Platform System (PDW)
Внимание
SQL Server Native Client (SNAC) не поставляется с:
- SQL Server 2022 (16.x) и более поздних версий
- SQL Server Management Studio 19 и более поздних версий
Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.
Для новых проектов используйте один из следующих драйверов:
Сведения о SQLNCLI, которые поставляется в качестве компонента SQL Server ядро СУБД (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.
Распределенная транзакция может быть создана для различных систем Microsoft SQL различными способами.
Драйвер ODBC вызывает MSDTC для локальной среды SQL Server
Координатор распределенных транзакций Майкрософт (MSDTC) позволяет приложениям расширять или распространять транзакцию между двумя или более экземплярами SQL Server. Распределенная транзакция работает, даже если два экземпляра размещаются на отдельных компьютерах.
MSDTC устанавливается для локальной среды Microsoft SQL Server, но недоступно для облачной службы Майкрософт База данных SQL Azure.
MSDTC вызывается драйвером собственного клиента SQL Server для open Database Connectivity (ODBC), когда программа C++ управляет распределенной транзакцией. Драйвер ODBC собственного клиента имеет диспетчер транзакций, соответствующий стандарту XA для распределенной обработки распределенных транзакций (DTP). Это соответствие требуется MSDTC. Как правило, все команды управления транзакциями отправляются через этот драйвер ODBC собственного клиента. Последовательность выглядит так:
Приложение ODBC собственного клиента C++ запускает транзакцию, вызвав SQLSetConnectAttr, с отключенным режимом автозаключения.
Приложение обновляет некоторые данные sql Server X на компьютере A.
Приложение обновляет некоторые данные sql Server Y на компьютере B.
- Если обновление в SQL Server Y завершается ошибкой, откат всех незафиксированных обновлений в обоих экземплярах SQL Server.
Наконец, приложение завершает транзакцию путем вызова SQLEndTran (1) с параметром SQL_COMMIT или SQL_ROLLBACK.
(1) MSDTC можно вызывать без ODBC. В таком случае MSDTC становится диспетчером транзакций, и приложение больше не использует SQLEndTran.
Только одна распределенная транзакция
Предположим, что приложение ODBC собственного клиента C++ задается в распределенную транзакцию. Затем приложение закрепит вторую распределенную транзакцию. В этом случае драйвер ODBC собственного клиента SQL Server покидает исходную распределенную транзакцию и закручивается в новой распределенной транзакции.
Дополнительные сведения см . в справочнике программиста DTC.
Альтернатива C# для База данных SQL в облаке
MSDTC не поддерживается для База данных SQL Azure или Azure Synapse Analytics.
Однако распределенная транзакция может быть создана для База данных SQL, если программа C# использует класс .NET System.Transactions.TransactionScope.
Другие языки программирования
Следующие другие языки программирования могут не поддерживать распределенные транзакции со службой База данных SQL:
- Собственный C++ с драйверами ODBC
- Связанный сервер с помощью Transact-SQL
- Драйверы JDBC