Informazioni su Distributed Transaction Coordinator per Istanza gestita di SQL di Azure

Si applica a: Istanza gestita di SQL di Azure SQL

Questo articolo offre una panoramica di Distributed Transaction Coordinator (DTC) per Istanza gestita di SQL di Azure. È possibile utilizzare Distributed Transaction Coordinator (DTC) per eseguire transazioni distribuite in ambienti misti, ad esempio tra istanze gestite, istanze di SQL Server, altri sistemi di gestione di database relazionali (RDBMS), applicazioni personalizzate e altri partecipanti alle transazioni che sono ospitati in qualsiasi ambiente in grado di stabilire la connettività di rete ad Azure.

Scenari

È possibile abilitare il controllo DTC per Istanza gestita di SQL di Azure di eseguire transazioni distribuite in più ambienti in grado di stabilire la connettività di rete ad Azure. Il controllo DTC per Istanza gestita di SQL viene gestito, il che significa che Azure si occupa della gestione e della manutenzione, ad esempio la registrazione, l'archiviazione, la disponibilità DTC e la rete. Oltre all'aspetto gestito, il controllo DTC per Istanza gestita di SQL è lo stesso servizio Windows DTC che supporta le transazioni distribuite tradizionali per SQL Server.

DTC per Istanza gestita di SQL sblocca un'ampia gamma di tecnologie e scenari, tra cui XA, .NET, T-SQL, COM+, ODBC e JDBC.

Per eseguire transazioni distribuite, completare queste attività:

  1. Configurare DTC.
  2. Abilitare la connettività di rete tra i partecipanti.
  3. Configurare le impostazioni DNS.

Nota

Per le transazioni distribuite T-SQL o .NET tra database ospitati solo da istanze gestite, è consigliabile utilizzare il supporto nativo per le transazioni distribuite.

Requisiti

Per modificare le impostazioni DTC, è necessario disporre delle autorizzazioni di scrittura per la risorsa Microsoft.Sql/managedInstances/dtc. Per visualizzare le impostazioni del controllo DTC, è necessario disporre delle autorizzazioni di lettura per la risorsa Microsoft.Sql/managedInstances/dtc.

Configurare DTC

È possibile usare il portale di Azure, PowerShell o CLI per configurare il controllo DTC.

Usare il portale di Azure per configurare il controllo DTC:

  1. Passare all’istanza gestita nel portale di Azure.

  2. Nel menu a sinistra in Impostazioni selezionare Distributed Transaction Coordinator.

    Screenshot che mostra l'opzione di menu evidenziata, il riquadro Distributed Transaction Coordinator per l'Istanza gestita di SQL e la scheda Informazioni di base.

  3. Nella scheda Informazioni di base impostare Distributed Transaction Coordinator su Abilitato.

  4. Nella scheda Sicurezza consentire le transazioni in ingresso o in uscita e abilitare XA o SNA LU.

  5. Nella scheda Rete specificare DNS DTC e ottenere informazioni per configurare DNS esterno e rete.

Connettività di rete

Per usare il controllo DTC, tutti i partecipanti alle transazioni devono avere una connessione di rete ad Azure. Poiché le istanze gestite vengono sempre distribuite in una rete virtuale dedicata in Azure, è necessario connettere l'ambiente esterno alla rete virtuale dell'istanza gestita. In questo contesto, esterno fa riferimento a qualsiasi oggetto o processo che non è l'istanza gestita. Se la risorsa esterna usa anche una rete virtuale in Azure, è possibile usare il peering di rete virtuale. In caso contrario, stabilire la connettività usando il metodo preferito, ad esempio VPN da punto a sito, Azure ExpressRoute o un'altra tecnologia di connettività di rete che soddisfi le esigenze aziendali.

La porta 135 deve consentire sia la comunicazione in ingresso che in uscita, l'intervallo di porte 14000-15000 devono consentire la comunicazione in ingresso e la porta 49152-65535 deve consentire quella in uscita, sia nel gruppo di sicurezza di rete virtuale per l'istanza gestita, che in qualsiasi firewall configurato nell'ambiente esterno.

Impostazioni DNS

Il controllo DTC si basa sul nome NetBIOS di un partecipante della transazione per la comunicazione reciproca. Poiché il protocollo NetBIOS non è supportato dalla rete di Azure e i nomi NetBIOS non possono essere risolti in ambienti misti, il controllo DTC per un'istanza gestita si basa sui server dei nomi DNS per la risoluzione dei nomi host. Gli host del controllo DTC dell'istanza gestita vengono registrati automaticamente con il server DNS di Azure. È necessario registrare gli host esterni del controllo DTC con un server DNS. Anche l'istanza gestita e l'ambiente esterno devono scambiare suffissi DNS.

Il diagramma seguente mostra la risoluzione dei nomi in ambienti misti:

Diagramma che mostra la risoluzione dei nomi in ambienti misti quando si usa il controllo DTC.

Nota

Non è necessario configurare le impostazioni DNS se si prevede di usare DTC solo per le transazioni XA.

Per scambiare suffissi DNS:

  1. Passare all’istanza gestita nel portale di Azure.

  2. Nel menu a sinistra in Impostazioni selezionare Distributed Transaction Coordinator. Selezionare la scheda Rete.

    Screenshot che mostra la scheda Rete del riquadro del controllo DTC per l'istanza gestita nel portale di Azure, con il nuovo suffisso DNS esterno evidenziato.

  3. Nella configurazione DNS selezionare Nuovo suffisso DNS esterno. Immettere il suffisso DNS per l'ambiente esterno, ad esempio dnszone1.com.

  4. Copiare il valore per il suffisso DNS host DTC. Usare quindi il comando PowerShell Set-DnsClientGlobalSetting -SuffixSearchList $list nell'ambiente esterno per impostare il suffisso DNS host DTC. Ad esempio, se il suffisso è abc1111111.database.windows.net, definire il parametro $list per ottenere le impostazioni DNS esistenti. Aggiungere quindi il suffisso come illustrato nell'esempio seguente:

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

Testare la connettività di rete

Dopo aver configurato il networking e il DNS, eseguire Test-NetConnection (TNC) tra gli endpoint DTC dell’istanza gestita e l’host DTC esterno.

Per testare la connessione, aggiornare prima di tutto i valori configurabili dall'utente. Usare quindi lo script di PowerShell seguente nell'ambiente esterno per identificare il nome di dominio completo (FQDN) dell'istanza gestita dell'host DTC. Ecco un esempio:

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

L'output JSON ha un aspetto simile all'esempio FQDN seguente:

chn000000000000.zcn111111111.database.windows.net

Dove:

  • chn000000000000 è il nome NetBIOS dell'host DTC dell'istanza gestita.
  • zcn111111111.database.windows.net è il suffisso DNS.

Eseguire quindi un TNC sia sul nome FQDN che sul nome NetBIOS dell'host DTC dell'istanza gestita sulla porta 135. Nell'esempio seguente la prima voce verifica la connettività di rete. La seconda voce verifica che le impostazioni DNS siano corrette.

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

Se la connettività e i suffissi DNS sono configurati correttamente, viene visualizzato l'output TcpTestSucceeded : True.

Sul lato dell'istanza gestita creare un processo di SQL Agent per eseguire il comando TNC di PowerShell per testare la connettività all'host esterno.

Ad esempio, se il nome di dominio completo per l'host esterno è host10.dnszone1.com, eseguire il test seguente tramite il processo di SQL Agent:

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

Limiti

Quando si usa DTC con Istanza gestita di SQL, considerare le limitazioni seguenti:

  • L'esecuzione di transazioni T-SQL distribuite tra Istanza gestita di SQL e RDBMS di terze parti non è supportata. Istanza gestita di SQL non supporta i server collegati con servizi RDBMS di terze parti. Viceversa, è supportata l'esecuzione di transazioni T-SQL distribuite tra istanze gestite e SQL Server e altri prodotti basati su SQL Server.
  • I nomi host nell'ambiente esterno non possono superare i 15 caratteri.
  • Le transazioni distribuite a Database SQL di Azure non sono supportate con DTC.
  • Per l'autenticazione, DTC supporta solo l'opzione di non autenticazione. L'autenticazione reciproca e le opzioni di autenticazione del chiamante in ingresso non sono disponibili. Poiché DTC scambia solo messaggi di sincronizzazione e non dati utente e perché comunica esclusivamente con la rete virtuale, questa limitazione non è un rischio per la sicurezza.

Gestire le transazioni

Per visualizzare le statistiche delle transazioni distribuite, vedere sys.dm_tran_distributed_transaction_stats.

È possibile reimpostare il log DTC con la stored procedure sp_reset_dtc_log .

Le transazioni distribuite possono essere gestite con la stored procedure sys.sp_manage_distributed_transaction.

Passaggi successivi

Supporto nativo per le transazioni distribuite tra istanze gestite, consultare Transazioni elastiche.