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

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

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

Nota

O DTC para Instância Gerenciada SQL do Azure faz parte da onda de recursos de novembro de 2022. Para saber mais sobre a linha do tempo para o lançamento da onda de recursos, consulte Onda de recursos de novembro de 2022.

Cenários

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

O DTC for SQL Managed Instance desbloqueia uma ampla gama de tecnologias e cenários, incluindo XA, .NET, T-SQL, COM+, ODBC e JDBC.

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

  1. Configurar o DTC.
  2. Ativar a conectividade de rede entre os participantes.
  3. Configurar as definições do DNS.

Nota

Para transações distribuídas T-SQL ou .NET entre bancos de dados hospedados somente por instâncias gerenciadas, recomendamos que você use 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 Microsoft.Sql/managedInstances/dtc o recurso. Para exibir as configurações do DTC, você deve ter permissões de leitura para Microsoft.Sql/managedInstances/dtc o recurso.


Configurar o DTC

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

Para configurar o DTC usando o portal do Azure:

  1. No portal do Azure, vá para sua instância gerenciada.

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

    Screenshot that shows the highlighted menu option, the Distributed Transaction Coordinator pane for SQL Managed Instance, and the Basics tab.

  3. Na guia Noções básicas, defina Coordenador de transações distribuídas como Habilitado.

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

  5. Na guia Rede, especifique DNS 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 de sua instância gerenciada. Nesse contexto, externo refere-se a qualquer objeto ou processo que não seja sua instância gerenciada. Se seu recurso externo também usa uma rede virtual no Azure, você pode usar o emparelhamento de rede virtual. Caso contrário, estabeleça conectividade usando seu método preferido, como VPN ponto a site, Rota Expressa do Azure ou outra tecnologia de conectividade de rede que atenda às suas necessidades de negócios.

A porta 135 e a porta 1024-65535 devem permitir a comunicação de entrada e saída no grupo de segurança de rede de rede virtual para a instância gerenciada e em qualquer firewall configurado no ambiente externo.

Definições de DNS

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

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

Diagram that shows name resolution across mixed environments when you use DTC.

Nota

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

Para trocar sufixos DNS:

  1. No portal do Azure, vá para sua instância gerenciada.

  2. No menu à esquerda, em Configurações, selecione Coordenador de transações distribuídas. Selecione o separador Rede.

    Screenshot that shows the Networking tab of the DTC pane for your managed instance in the Azure portal, with New external DNS suffix highlighted.

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

  4. Copie o valor para o sufixo DNS do Host DTC. Em seguida, use o comando Set-DnsClientGlobalSetting -SuffixSearchList $list PowerShell em seu ambiente externo para definir o sufixo DNS do Host DTC. Por exemplo, se o sufixo for abc1111111.database.windows.net, defina o $list parâmetro para obter as configurações de DNS existentes. Em seguida, acrescente seu sufixo a ele, conforme 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 Test-NetConnection (TNC) entre os pontos de extremidade DTC da instância gerenciada e o host DTC externo.

Para testar a conexão, primeiro atualize os valores configuráveis pelo usuário. Em seguida, use o seguinte script do PowerShell no ambiente externo para identificar o FQDN (nome de domínio totalmente qualificado) da instância gerenciada pelo host DTC. Eis 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 JSON se parece com o seguinte exemplo FQDN:

chn000000000000.zcn111111111.database.windows.net

Em que:

  • chn000000000000 é o nome NetBIOS do host 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 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, a saída TcpTestSucceeded : True será exibida.

No lado da instância gerenciada, crie um trabalho do SQL Agent para executar o comando TNC PowerShell para testar a conectividade com seu 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 SQL:

  • Não há suporte para a execução de transações T-SQL distribuídas entre a Instância Gerenciada SQL e um RDBMS de terceiros. A Instância Gerenciada SQL não oferece 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 instâncias gerenciadas e o SQL Server e outros produtos baseados no SQL Server.
  • Os nomes de host em ambiente externo não podem ter mais de 15 caracteres.
  • As transações distribuídas para o Banco de Dados SQL do Azure não são suportadas com o DTC.
  • Para autenticação, o DTC suporta apenas a opção sem autenticação . As opções de autenticação mútua e autenticação de chamada de entrada não estão disponíveis. Como o DTC troca apenas mensagens de sincronização e não dados do usuário, e como ele se comunica apenas com a rede virtual, essa limitação não é um risco de segurança.

Gerenciar transações

Para visualizar estatísticas de transações distribuídas, consulte 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 sys.sp_manage_distributed_transaction procedimento armazenado.

Próximos passos

Para obter suporte a transações distribuídas de instância gerenciada nativa, consulte Transações elásticas.