DTC (Coordenador de Transações Distribuídas) para a Instância Gerenciada de SQL do Azure

Aplica-se a: Instância Gerenciada de SQL do Azure

Este artigo fornece uma visão geral do DTC (Coordenador de Transações Distribuídas) para a Instância Gerenciada de SQL do Azure. Você pode usar o DTC para executar transações distribuídas em ambientes mistos, inclusive entre instâncias gerenciadas, de SQL Server, outros RDBMSs (sistemas de gerenciamento de banco de dados relacionais), aplicativos personalizados e outros participantes de transação hospedados em qualquer ambiente que possa estabelecer conectividade de rede com o Azure.

Cenários

Você pode ativar o DTC para a Instância Gerenciada de SQL do Azure a fim de executar transações distribuídas em vários ambientes que possam estabelecer conectividade de rede com o Azure. O DTC para Instância Gerenciada de SQL é gerenciado, o que significa que o Azure cuida do gerenciamento e da manutenção, como do registro em log, armazenamento, disponibilidade de DTC e rede. Além do aspecto gerenciado, o DTC para Instância Gerenciada de SQL é o mesmo serviço DTC do Windows que dá suporte a transações distribuídas tradicionais para SQL Server.

O DTC para a Instância Gerenciada de SQL desbloqueia uma ampla variedade de tecnologias e cenários, incluindo XA, .NET, T-SQL, COM+, ODBC e JDBC.

Para executar transações distribuídas, conclua estas tarefas:

  1. Configure o DTC.
  2. Habilite a conectividade de rede entre os participantes.
  3. Defina as configurações de DNS.

Observação

Para as transações T-SQL ou .NET distribuídas entre bancos de dados, hospedadas apenas por instâncias gerenciadas, é recomendável usar o suporte nativo para transações distribuídas.

Requisitos

Para alterar as configurações do DTC, você deve ter permissões de gravação para o recurso Microsoft.Sql/managedInstances/dtc. Para exibir as configurações do DTC, você deve ter permissões de leitura para o recurso Microsoft.Sql/managedInstances/dtc.

Configurar o DTC

Você pode configurar o DTC com o portal do Azure, o Azure PowerShell e o CLI.

Para configurar o DTC usando o portal do Azure:

  1. No portal do Azure, acesse sua instância gerenciada.

  2. No menu à esquerda, em Configurações, selecione Coordenador de Transações Distribuídas.

    Captura de tela que mostra a opção de menu realçada, o painel Coordenador de Transações Distribuídas para Instância Gerenciada de SQL e a guia Básico.

  3. Na guia Básico, defina Coordenador de Transações Distribuídas como Habilitado.

  4. Na guia Segurança, permita transações de entrada ou saída e habilite a LU XA ou SNA.

  5. Na guia Rede, especifique o DNS do DTC e obtenha informações para configurar o DNS externo e a rede.

Conectividade de rede

Para usar o DTC, todos os participantes da transação devem ter uma conexão de rede com o Azure. Como as instâncias gerenciadas são sempre implantadas em uma rede virtual dedicada no Azure, você deve conectar seu ambiente externo à rede virtual da sua instância gerenciada. Nesse contexto, externo refere-se a qualquer objeto ou processo que não seja sua instância gerenciada. Se o recurso externo também usar uma rede virtual no Azure, você poderá usar o emparelhamento de rede virtual. Caso contrário, estabeleça a conectividade usando seu método preferido, como a VPN ponto a site, o Azure ExpressRoute ou outra tecnologia de conectividade de rede que atenda às suas necessidades comerciais.

A porta 135 deve permitir a comunicação de entrada e de saída, o intervalo de portas 14000-15000 deve permitir a entrada e 49152-65535 deve permitir a comunicação de saída, tanto no grupo de segurança de rede virtual da instância gerenciada quanto em qualquer firewall configurado no ambiente externo.

Configurações DNS

O DTC depende do nome do NetBIOS do participante da transação para obter comunicação mútua. Como o protocolo NetBIOS não é compatível com a rede do Azure e os nomes NetBIOS não podem ser resolvidos em ambientes mistos, o DTC da instância gerenciada depende de servidores de nomes DNS para a resolução de nomes do host. Os hosts de DTC da instância gerenciada são registrados automaticamente no servidor DNS do Azure. Você deve registrar hosts de DTC externos com um servidor DNS. A instância gerenciada e o ambiente externo também precisam trocar sufixos DNS.

O seguinte diagrama mostra a resolução de nomes em ambientes mistos:

Diagrama que mostra a resolução de nomes em ambientes mistos durante o uso do DTC.

Observação

Você não precisa definir as configurações de DNS se pretende usar o DTC apenas para transações XA.

Para trocar os sufixos DNS:

  1. No portal do Azure, acesse sua instância gerenciada.

  2. No menu à esquerda, em Configurações, selecione Coordenador de Transações Distribuídas. Selecione a guia Rede.

    Captura da guia Rede do painel DTC mostra a instância gerenciada no portal do Azure destacando a opção Novo sufixo DNS externo.

  3. Em Configuração de DNS, selecione Novo sufixo DNS externo. Insira o sufixo DNS do ambiente externo, algo como dnszone1.com.

  4. Copie o valor do Sufixo DNS do Host do DTC. Em seguida, use o comando Set-DnsClientGlobalSetting -SuffixSearchList $list do PowerShell no ambiente externo para definir o sufixo DNS do Host do DTC. Por exemplo, se o sufixo for abc1111111.database.windows.net, defina o parâmetro $list para obter as configurações de DNS existentes. Em seguida, acrescente o sufixo como mostrado no exemplo a seguir:

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

Testar a conectividade de rede

Depois de configurar a rede e o DNS, execute o TNC (Test-NetConnection) entre os pontos de extremidade do DTC da instância gerenciada e o host externo do DTC.

Para testar a conexão, primeiro atualize os valores configuráveis pelo usuário. Depois use o seguinte script do PowerShell no ambiente externo para identificar o FQDN (nome de domínio totalmente qualificado) da instância gerenciada do host do DTC. Veja um exemplo:

# =============================================================== 
# 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 
# =============================================================== 

A saída do JSON se parece com o seguinte exemplo de FQDN:

chn000000000000.zcn111111111.database.windows.net

Em que:

  • chn000000000000 é o nome NetBIOS do host do DTC da instância gerenciada.
  • zcn111111111.database.windows.net é o sufixo DNS.

Em seguida, execute um TNC para o FQDN e o nome NetBIOS do host do DTC da instância gerenciada na porta 135. No exemplo a seguir, a primeira entrada verifica a conectividade de rede. A segunda entrada verifica se as configurações de DNS estão corretas.

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

Se a conectividade e os sufixos DNS estiverem configurados corretamente, o resultado TcpTestSucceeded : True será exibido.

No lado da instância gerenciada, crie um trabalho do SQL Agent para executar o comando do PowerShell TNC a fim de testar a conectividade com o host externo.

Por exemplo, se o FQDN do host externo for host10.dnszone1.com, execute o seguinte teste por meio do trabalho do SQL Agent:

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

Limitações

Considere as seguintes limitações ao usar o DTC com a Instância Gerenciada de SQL:

  • Não há suporte para a execução de transações T-SQL distribuídas entre a Instância Gerenciada de SQL e um RDBMS de terceiros. A Instância Gerenciada de SQL não dá suporte a servidores vinculados que tenham RDBMSs de terceiros. Por outro lado, há suporte para a execução de transações T-SQL distribuídas entre as instâncias gerenciadas e o SQL Server e outros produtos baseados no SQL Server.
  • Os nomes do host no ambiente externo não podem ter mais de 15 caracteres.
  • Não há suporte para transações distribuídas no Banco de Dados SQL do Azure com o DTC.
  • Para autenticação, o DTC dá suporte somente à opção sem autenticação. As opções Autenticação mútua e autenticação de chamador de entrada não estão disponíveis. Como o DTC troca apenas mensagens de sincronização e não dados de usuário e como ele se comunica exclusivamente com a rede virtual, essa limitação não é um risco à segurança.

Gerenciar transações

Para exibir estatísticas de transações distribuídas, confira sys.dm_tran_distributed_transaction_stats.

Você pode redefinir o log DTC com o procedimento armazenado sp_reset_dtc_log.

As transações distribuídas podem ser gerenciadas com o procedimento armazenado sys.sp_manage_distributed_transaction.

Próximas etapas

Para obter o suporte nativo a transações distribuídas da instância gerenciada, veja Transações elásticas.