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:
- Configurar o DTC.
- Ativar a conectividade de rede entre os participantes.
- 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:
No portal do Azure, vá para sua instância gerenciada.
No menu à esquerda, em Configurações, selecione Coordenador de transações distribuídas.
Na guia Noções básicas, defina Coordenador de transações distribuídas como Habilitado.
Na guia Segurança, permita transações de entrada ou saída e habilite XA ou SNA LU.
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:
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:
No portal do Azure, vá para sua instância gerenciada.
No menu à esquerda, em Configurações, selecione Coordenador de transações distribuídas. Selecione o separador Rede.
Em Configuração de DNS, selecione Novo sufixo DNS externo. Insira o sufixo DNS para seu ambiente externo, como
dnszone1.com
.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 forabc1111111.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.