DTC (Distributed Transaction Coordinator) voor Azure SQL Managed Instance

Van toepassing op: Azure SQL Managed Instance

Dit artikel bevat een overzicht van DTC (Distributed Transaction Coordinator) voor Azure SQL Managed Instance. U kunt DTC gebruiken om gedistribueerde transacties uit te voeren in gemengde omgevingen, inclusief beheerde exemplaren, SQL Server-exemplaren, andere relationele databasebeheersystemen (RDBMSs), aangepaste toepassingen en andere transactiedeelnemers die worden gehost in elke omgeving die netwerkconnectiviteit met Azure tot stand kan brengen.

Notitie

DTC voor Azure SQL Managed Instance maakt deel uit van de functiegolf van november 2022. Zie de functiegolf van november 2022 voor meer informatie over de tijdlijn voor de functiegolf.

Scenario's

U kunt DTC inschakelen voor Azure SQL Managed Instance om gedistribueerde transacties uit te voeren in meerdere omgevingen die netwerkconnectiviteit met Azure tot stand kunnen brengen. DTC voor SQL Managed Instance wordt beheerd, wat betekent dat Azure zorgt voor beheer en onderhoud, zoals logboekregistratie, opslag, DTC-beschikbaarheid en netwerken. Afgezien van het beheerde aspect is DTC voor SQL Managed Instance dezelfde DTC Windows-service die traditionele gedistribueerde transacties voor SQL Server ondersteunt.

DTC voor SQL Managed Instance ontgrendelt een breed scala aan technologieën en scenario's, waaronder XA, .NET, T-SQL, COM+, ODBC en JDBC.

Voer de volgende taken uit om gedistribueerde transacties uit te voeren:

  1. DTC configureren.
  2. Netwerkconnectiviteit inschakelen tussen deelnemers.
  3. DNS-instellingen configureren

Notitie

Voor gedistribueerde T-SQL- of .NET-transacties tussen databases die alleen worden gehost door beheerde exemplaren, raden we u aan systeemeigen ondersteuning te gebruiken voor gedistribueerde transacties.

Vereisten

Als u DTC-instellingen wilt wijzigen, moet u schrijfmachtigingen voor Microsoft.Sql/managedInstances/dtc de resource hebben. Als u DTC-instellingen wilt weergeven, moet u leesmachtigingen voor Microsoft.Sql/managedInstances/dtc de resource hebben.


DTC configureren

U kunt DTC configureren met Azure Portal, Azure PowerShell en CLI.

DTC configureren met behulp van Azure Portal:

  1. Ga in Azure Portal naar uw beheerde exemplaar.

  2. Selecteer in het linkermenu onder Instellingen gedistribueerde transactiecoördinator.

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

  3. Stel op het tabblad Basisbeginselen gedistribueerde transactiecoördinatorin op Ingeschakeld.

  4. Sta op het tabblad Beveiliging binnenkomende of uitgaande transacties toe en schakel XA of SNA LU in.

  5. Geef op het tabblad Netwerken DTC DNS op en haal informatie op om externe DNS en netwerken te configureren.

Netwerkverbinding

Als u DTC wilt gebruiken, moeten alle transactiedeelnemers een netwerkverbinding met Azure hebben. Omdat beheerde exemplaren altijd worden geïmplementeerd in een toegewezen virtueel netwerk in Azure, moet u uw externe omgeving verbinden met het virtuele netwerk van uw beheerde exemplaar. In deze context verwijst extern naar een object of proces dat niet uw beheerde exemplaar is. Als uw externe resource ook gebruikmaakt van een virtueel netwerk in Azure, kunt u peering van virtuele netwerken gebruiken. Anders kunt u connectiviteit tot stand brengen met behulp van uw voorkeursmethode, zoals punt-naar-site-VPN, Azure ExpressRoute of een andere netwerkverbindingstechnologie die voldoet aan uw bedrijfsbehoeften.

Poort 135 en poort 1024-65535 moeten zowel binnenkomende als uitgaande communicatie toestaan in zowel de netwerkbeveiligingsgroep voor het virtuele netwerk als in een firewall die is ingesteld in de externe omgeving.

DNS-instellingen

DTC is afhankelijk van de NetBIOS-naam van een transactiedeelnemer voor wederzijdse communicatie. Omdat het NetBIOS-protocol niet wordt ondersteund door Azure-netwerken en NetBIOS-namen niet kunnen worden omgezet in gemengde omgevingen, is DTC voor een beheerd exemplaar afhankelijk van DNS-naamservers voor hostnaamomzetting. DTC-hosts van beheerde exemplaren worden automatisch geregistreerd bij de Azure DNS-server. U moet externe DTC-hosts registreren bij een DNS-server. Het beheerde exemplaar en de externe omgeving moeten ook DNS-achtervoegsels uitwisselen.

In het volgende diagram ziet u naamomzetting in gemengde omgevingen:

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

Notitie

U hoeft geen DNS-instellingen te configureren als u van plan bent om alleen DTC te gebruiken voor XA-transacties.

DNS-achtervoegsels uitwisselen:

  1. Ga in Azure Portal naar uw beheerde exemplaar.

  2. Selecteer in het linkermenu onder Instellingen gedistribueerde transactiecoördinator. Selecteer het tabblad Netwerken.

    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. Selecteer in de DNS-configuratie nieuw extern DNS-achtervoegsel. Voer het DNS-achtervoegsel in voor uw externe omgeving, zoals dnszone1.com.

  4. Kopieer de waarde voor DTC Host DNS-achtervoegsel. Gebruik vervolgens de PowerShell-opdracht Set-DnsClientGlobalSetting -SuffixSearchList $list in uw externe omgeving om het DNS-achtervoegsel van de DTC-host in te stellen. Als uw achtervoegsel bijvoorbeeld is abc1111111.database.windows.net, definieert u de $list parameter om de bestaande DNS-instellingen op te halen. Voeg vervolgens het achtervoegsel eraan toe, zoals wordt weergegeven in het volgende voorbeeld:

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

Netwerkconnectiviteit testen

Nadat u netwerken en DNS hebt geconfigureerd, voert u Test-Net Verbinding maken ion (TNC) uit tussen de DTC-eindpunten van uw beheerde exemplaar en de externe DTC-host.

Als u de verbinding wilt testen, werkt u eerst de door de gebruiker configureerbare waarden bij. Gebruik vervolgens het volgende PowerShell-script in de externe omgeving om de FQDN (Fully Qualified Domain Name) van het beheerde exemplaar van de DTC-host te identificeren. Hier volgt een voorbeeld:

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

De JSON-uitvoer ziet eruit als de volgende voorbeeld-FQDN:

chn000000000000.zcn111111111.database.windows.net

Waarbij geldt:

  • chn000000000000 is de NetBIOS-naam van de DTC-host van het beheerde exemplaar.
  • zcn111111111.database.windows.net is het DNS-achtervoegsel.

Voer vervolgens een TNC uit op zowel de FQDN als de NetBIOS-naam van de DTC-host van het beheerde exemplaar op poort 135. In het volgende voorbeeld verifieert de eerste vermelding de netwerkverbinding. De tweede vermelding controleert of de DNS-instellingen juist zijn.

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

Als de connectiviteit en DNS-achtervoegsels correct zijn geconfigureerd, wordt de uitvoer tcpTestSucceededed weergegeven: True .

Maak aan de zijde van het beheerde exemplaar een SQL Agent-taak om de TNC PowerShell-opdracht uit te voeren om de connectiviteit met uw externe host te testen.

Als de FQDN voor uw externe host bijvoorbeeld is host10.dnszone1.com, voert u de volgende test uit via uw SQL Agent-taak:

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

Beperkingen

Houd rekening met de volgende beperkingen wanneer u DTC gebruikt met SQL Managed Instance:

  • Het uitvoeren van gedistribueerde T-SQL-transacties tussen SQL Managed Instance en een extern RDBMS wordt niet ondersteund. SQL Managed Instance biedt geen ondersteuning voor gekoppelde servers met RDBMS's van derden. Omgekeerd wordt het uitvoeren van gedistribueerde T-SQL-transacties tussen beheerde exemplaren en SQL Server en andere op SQL Server gebaseerde producten ondersteund.
  • Hostnamen in een externe omgeving mogen niet langer zijn dan 15 tekens.
  • Gedistribueerde transacties naar Azure SQL Database worden niet ondersteund met DTC.
  • Voor verificatie ondersteunt DTC alleen de optie geen verificatie . Wederzijdse verificatie en opties voor binnenkomende bellerverificatie zijn niet beschikbaar. Omdat DTC alleen synchronisatieberichten en geen gebruikersgegevens uitwisselt en omdat deze alleen met het virtuele netwerk communiceert, is deze beperking geen beveiligingsrisico.

Transacties beheren

Zie sys.dm_tran_distributed_transaction_stats om statistieken van gedistribueerde transacties weer te geven.

U kunt het DTC-logboek opnieuw instellen met de sp_reset_dtc_log opgeslagen procedure.

Gedistribueerde transacties kunnen worden beheerd met de sys.sp_manage_distributed_transaction opgeslagen procedure.

Volgende stappen

Zie Elastische transacties voor systeemeigen ondersteuning voor gedistribueerde transacties van beheerde exemplaren.