Partilhar via


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

Aplica-se a:Azure SQL Managed Instance

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. Isso inclui instâncias gerenciadas do SQL, instâncias do SQL Server, outros sistemas de gerenciamento de banco de dados relacional (RDBMS), aplicativos personalizados e outros participantes de transações hospedados em qualquer ambiente que possa estabelecer conectividade de rede com o Azure.

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 registo, armazenamento, rede e disponibilidade do DTC. 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. Configure DTC.
  2. Habilite a conectividade de rede entre os participantes.
  3. Defina as configurações de DNS.

Observação

Para transações distribuídas T-SQL ou .NET entre bancos de dados hospedados somente por instâncias gerenciadas SQL, recomendamos que você use o suporte nativo para transações distribuídas.

Requerimentos

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

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

Configurar DTC

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

Para configurar o DTC usando o portal do Azure, siga estas etapas:

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

  2. 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 SQL e a guia Noções Básicas.

  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 pelo SQL são sempre implantadas em uma rede virtual dedicada no Azure, você deve conectar seu ambiente externo à rede virtual de sua instância gerenciada pelo SQL. Nesse contexto, externo refere-se a qualquer objeto ou processo que não seja sua instância gerenciada pelo SQL. 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 deve permitir comunicação de entrada e saída, o intervalo de portas 14000-15000 deve permitir a entrada e 49152-65535 deve permitir a comunicação de saída no grupo de segurança de rede virtual para a instância gerenciada SQL e qualquer firewall configurado no ambiente externo.

Configurações de DNS

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

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

Diagrama que mostra a resolução de nomes em ambientes mistos quando se utiliza DTC.

Observação

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 do SQL.

  2. Em Configurações, selecione Coordenador de Transações Distribuídas e selecione a guia Rede .

    Captura de ecrã que mostra o separador de Rede do painel DTC para a sua instância de SQL gerida no portal do Azure, com o novo sufixo DNS externo destacado.

  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 parâmetro $list 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 sua instância gerenciada SQL 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 nome de domínio totalmente qualificado (FQDN) da instância gerenciada SQL do host DTC. Aqui está um exemplo:

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

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

chn000000000000.zcn111111111.database.windows.net

Where:

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

Em seguida, execute um comando TNC tanto para o FQDN quanto para o nome NetBIOS do host DTC da instância SQL gerida 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 SQL, 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 através da tarefa 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 RDBMS de terceiros. Por outro lado, há suporte para a execução de transações T-SQL distribuídas entre instâncias gerenciadas do SQL e o SQL Server e outros produtos baseados no SQL Server.
  • Os nomes de host em ambientes externos 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 usando 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óximo passo