Поделиться через


Координатор распределенных транзакций (DTC) для Управляемый экземпляр SQL Azure

Область применения: Управляемый экземпляр SQL Azure

В этой статье представлен обзор координатора распределенных транзакций (DTC) для Управляемый экземпляр SQL Azure. DTC можно использовать для запуска распределенных транзакций в смешанных средах. К ним относятся управляемые экземпляры SQL, экземпляры SQL Server, другие системы управления реляционными базами данных (RDBMS), пользовательские приложения и другие участники транзакций, размещенные в любой среде, которая может установить сетевое подключение к Azure.

Сценарии

Вы можете включить DTC для Управляемый экземпляр SQL Azure выполнять распределенные транзакции в нескольких средах, которые могут установить сетевое подключение к Azure. Управление DTC для Управляемый экземпляр SQL означает, что Azure заботится об управлении и обслуживании, таких как ведение журнала, хранение, доступность DTC и сеть. Помимо управляемого аспекта DTC для Управляемый экземпляр SQL является той же службой DTC Windows, которая поддерживает традиционные распределенные транзакции для SQL Server.

DTC для Управляемого экземпляра SQL разблокирует широкий спектр технологий и сценариев, включая XA, .NET, T-SQL, COM+, ODBC и JDBC.

Чтобы запустить распределенные транзакции, выполните следующие задачи:

  1. Настройте DTC.
  2. Включите сетевое подключение между участниками.
  3. Настройте параметры DNS.

Примечание.

Для распределенных транзакций T-SQL или .NET между базами данных, размещенными только управляемыми экземплярами SQL, рекомендуется использовать встроенную поддержку распределенных транзакций.

Требования

Чтобы изменить параметры DTC, необходимо иметь разрешения на запись для Microsoft.Sql/managedInstances/dtc ресурса. Чтобы просмотреть параметры DTC, необходимо иметь разрешения на чтение ресурса Microsoft.Sql/managedInstances/dtc .

Порт 135 должен разрешать входящий и исходящий обмен данными, диапазон портов 14000-15000 должен разрешать входящий трафик, а 49152-65535 должен разрешать исходящее взаимодействие как в группе безопасности сети виртуальной сети для управляемого экземпляра SQL, так и для любого брандмауэра, настроенного во внешней среде.

настроить DTC;

Вы можете настроить DTC с помощью портала Azure, Azure PowerShell и Azure CLI.

Чтобы настроить DTC с помощью портала Azure, выполните следующие действия.

  1. На портале Azure перейдите к управляемому экземпляру SQL.

  2. В разделе "Параметры" выберите координатор распределенных транзакций.

    Снимок экрана: выделенный пункт меню, панель

  3. На вкладке "Основные сведения" установите для координатора распределенных транзакций значение "Включено".

  4. На вкладке "Безопасность" разрешите входящий или исходящий транзакции и включите XA или SNA LU.

  5. На вкладке "Сеть" укажите DNS DTC и получите сведения для настройки внешних DNS и сетей.

Сетевое соединение

Для использования DTC все участники транзакции должны иметь сетевое подключение к Azure. Так как управляемые экземпляры SQL всегда развертываются в выделенной виртуальной сети в Azure, необходимо подключить внешнюю среду к виртуальной сети управляемого экземпляра SQL. В этом контексте внешний относится к любому объекту или процессу, который не является управляемым экземпляром SQL. Если внешний ресурс также использует виртуальную сеть в Azure, можно использовать пиринг виртуальных сетей. В противном случае установите подключение с помощью предпочтительного метода, например VPN типа "точка — сеть", Azure ExpressRoute или другой технологии сетевого подключения, которая соответствует вашим бизнес-потребностям.

Порт 135 должен разрешать входящий и исходящий обмен данными, диапазон портов 14000-15000 должен разрешать входящий трафик, а 49152-65535 должен разрешать исходящее взаимодействие как в группе безопасности сети виртуальной сети для управляемого экземпляра SQL, так и для любого брандмауэра, настроенного во внешней среде.

Параметры DNS

DTC использует имя NetBIOS участника транзакции для взаимной связи. Так как сеть Azure не поддерживает протокол NetBIOS, и имена NetBIOS не могут быть разрешены в неоднородных сетях, DTC для управляемого экземпляра SQL использует DNS-серверы имен для резолвинга имен хоста. Узлы DTC управляемого экземпляра SQL автоматически регистрируются на dns-сервере Azure. Необходимо зарегистрировать внешние узлы DTC на DNS-сервере. Управляемый экземпляр SQL и внешняя среда также должны обмениваться суффиксами DNS.

На следующей схеме показано разрешение имен в смешанных средах:

Схема, показывающая разрешение имен в смешанных средах при использовании DTC.

Примечание.

Если вы планируете использовать DTC только для транзакций XA, вам не нужно настраивать параметры DNS.

Для обмена суффиксами DNS:

  1. На портале Azure перейдите к управляемому экземпляру SQL.

  2. В разделе "Параметры" выберите "Координатор распределенных транзакций" и перейдите на вкладку "Сеть ".

    Снимок экрана, который показывает вкладку

  3. В конфигурации DNS выберите "Создать внешний DNS-суффикс". Введите DNS-суффикс для внешней среды, например dnszone1.com.

  4. Скопируйте значение dns-суффикса узла DTC. Затем используйте команду Set-DnsClientGlobalSetting -SuffixSearchList $list PowerShell во внешней среде, чтобы задать dns-суффикс узла DTC. Например, если суффикс имеет значение abc1111111.database.windows.net, определите $list параметр, чтобы получить существующие параметры DNS. Затем добавьте к нему суффикс, как показано в следующем примере:

    $list = (Get-DnsClientGlobalSetting).SuffixSearchList + "abc1111111.database.windows.net"
    Set-DnsClientGlobalSetting -SuffixSearchList $list
    

Проверка сетевого подключения

После настройки сети и DNS запустите Test-NetConnection (TNC) между конечными точками DTC управляемого экземпляра SQL и внешним узлом DTC.

Чтобы проверить подключение, сначала обновите настраиваемые пользователем значения. Затем используйте следующий скрипт PowerShell во внешней среде, чтобы определить полное доменное имя (FQDN) управляемого экземпляра SQL узла DTC. Приведем пример:

# ===============================================================
# Get DTC settings
# ===============================================================
# User-configurable values
#

$SubscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$RgName = "my-resource-group"
$MIName = "my-instance-name"

# ===============================================================
#

$startMoveUri = "https://management.azure.com/subscriptions/" + $SubscriptionId + "/resourceGroups/" + $RgName + "/providers/Microsoft.Sql/managedInstances/" + $MIName + "/dtc/current?api-version=2022-05-01-preview"
Write-Host "Sign in to Azure subscription $SubscriptionID ..."
Select-AzSubscription -SubscriptionName $SubscriptionID
$azContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
Write-Host "Getting authentication token for REST API call ..."
$token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId)
$authHeader = @{'Content-Type'='application/json';'Authorization'='Bearer ' + $token.AccessToken}

# Invoke API call to start the operation
#

Write-Host "Starting API call..."
$startMoveResp = Invoke-WebRequest -Method Get -Headers $authHeader -Uri $startMoveUri
Write-Host "Response:" $startMoveResp

# End
# ===============================================================

Выходные данные JSON выглядят следующим образом:

chn000000000000.zcn111111111.database.windows.net

Где:

  • chn000000000000 — это имя NetBIOS узла DTC управляемого экземпляра SQL.
  • zcn111111111.database.windows.net — суффикс DNS.

Затем выполните проверку подключения (TNC) к полному доменному имени и имени NetBIOS хоста DTC управляемого экземпляра SQL на порту 135. В следующем примере первая запись проверяет сетевое подключение. Вторая запись проверяет правильность параметров DNS.

tnc chn000000000000.zcn111111111.database.windows.net -Port 135
tnc chn000000000000 -Port 135

Если подключение и DNS-суффиксы настроены правильно, выводится значение TcpTestSucceeded: True .

На стороне управляемого экземпляра SQL создайте задание агента SQL, чтобы запустить команду TNC PowerShell для проверки подключения к внешнему узлу.

Например, если полное доменное имя внешнего узла имеет значение host10.dnszone1.com, выполните следующий тест с помощью задания агента SQL:

tnc host10.dnszone1.com -Port 135
tnc host10 -Port 135

Ограничения

При использовании DTC с управляемым экземпляром SQL необходимо учитывать следующие ограничения.

  • Выполнение распределенных транзакций T-SQL между управляемым экземпляром SQL и сторонним RDBMS не поддерживается. Управляемый экземпляр SQL не поддерживает связанные серверы с сторонними RDBMS. И наоборот, поддерживаются распределенные транзакции T-SQL между управляемыми экземплярами SQL и SQL Server и другими продуктами на основе SQL Server.
  • Имена узлов во внешних средах не могут превышать 15 символов.
  • Распределенные транзакции в базу данных SQL Azure не поддерживаются в DTC.
  • Для проверки подлинности DTC поддерживает только вариант проверка подлинности не требуется . Варианты "взаимная проверка подлинности" и "проверка подлинности входящего вызова" недоступны. Поскольку DTC обменивается только сообщениями синхронизации, но не данными пользователей, и взаимодействует исключительно с виртуальной сетью, это ограничение не угрожает безопасности.

Управление транзакциями

Сведения о статистике распределенных транзакций см. в разделе sys.dm_tran_distributed_transaction_stats.

Для сброса журнала DTC можно использовать хранимую процедуру sp_reset_dtc_log.

Распределенными транзакциями можно управлять с помощью хранимой процедуры sys.sp_manage_distributed_transaction .

Следующий шаг