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


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

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

В этой статье представлен обзор координатора распределенных транзакций (DTC) для Управляемый экземпляр SQL Azure. DTC можно использовать для выполнения распределенных транзакций в смешанных средах, в том числе между управляемыми экземплярами, экземплярами 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 между базами данных, размещенными только управляемыми экземплярами, рекомендуется использовать встроенную поддержку распределенных транзакций.

Требования

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

настроить DTC;

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

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

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

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

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

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

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

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

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

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

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

Параметры DNS

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

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

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

Примечание.

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

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

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

  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 управляемого экземпляра и внешним узлом DTC.

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

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

$SubscriptionId = "a1a1a1a1-8372-1d28-a111-1a2a31a1a1a1" 
$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 управляемого экземпляра.
  • zcn111111111.database.windows.net — суффикс DNS.

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

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

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

На стороне управляемого экземпляра создайте задание агента 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 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 .

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

Сведения о поддержке распределенных транзакций в собственном управляемом экземпляре см. в разделе "Эластичные транзакции".