DTC (Distributed Transaction Coordinator) för Azure SQL Managed Instance

Gäller för:Azure SQL Managed Instance

Den här artikeln innehåller en översikt över DTC (Distributed Transaction Coordinator) för Azure SQL Managed Instance. Du kan använda DTC för att köra distribuerade transaktioner i blandade miljöer, inklusive mellan hanterade instanser, SQL Server-instanser, andra hanteringssystem för relationsdatabaser (RDBMS), anpassade program och andra transaktionsdeltagare som finns i alla miljöer som kan upprätta nätverksanslutning till Azure.

Kommentar

DTC för Azure SQL Managed Instance är en del av funktionsvågen november 2022. Mer information om tidslinjen för funktionsvågsdistributionen finns i funktionsvågen november 2022.

Scenarier

Du kan aktivera DTC för Azure SQL Managed Instance för att köra distribuerade transaktioner i flera miljöer som kan upprätta nätverksanslutning till Azure. DTC för SQL Managed Instance hanteras, vilket innebär att Azure tar hand om hantering och underhåll, till exempel loggning, lagring, DTC-tillgänglighet och nätverk. Förutom den hanterade aspekten är DTC för SQL Managed Instance samma DTC Windows-tjänst som stöder traditionella distribuerade transaktioner för SQL Server.

DTC för SQL Managed Instance låser upp en mängd olika tekniker och scenarier, inklusive XA, .NET, T-SQL, COM+, ODBC och JDBC.

Utför följande uppgifter för att köra distribuerade transaktioner:

  1. Konfigurera DTC.
  2. Aktivera nätverksanslutning mellan deltagare.
  3. Konfigurera DNS-inställningar.

Kommentar

För T-SQL- eller .NET-distribuerade transaktioner mellan databaser som endast hanteras av hanterade instanser rekommenderar vi att du använder internt stöd för distribuerade transaktioner.

Behov

Om du vill ändra DTC-inställningarna måste du ha skrivbehörighet för Microsoft.Sql/managedInstances/dtc resursen. Om du vill visa DTC-inställningar måste du ha läsbehörighet för Microsoft.Sql/managedInstances/dtc resursen.


Konfigurera DTC

Du kan konfigurera DTC med Azure-portalen, Azure PowerShell och CLI.

Så här konfigurerar du DTC med hjälp av Azure-portalen:

  1. I Azure-portalen går du till din hanterade instans.

  2. I den vänstra menyn under Inställningar väljer du Distribuerad transaktionskoordinator.

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

  3. På fliken Grundläggande anger du Distributed Transaction Coordinator till Aktiverad.

  4. På fliken Säkerhet tillåter du inkommande eller utgående transaktioner och aktiverar XA eller SNA LU.

  5. På fliken Nätverk anger du DTC DNS och hämtar information för att konfigurera extern DNS och nätverk.

Nätverksanslutningar

Om du vill använda DTC måste alla transaktionsdeltagare ha en nätverksanslutning till Azure. Eftersom hanterade instanser alltid distribueras till ett dedikerat virtuellt nätverk i Azure måste du ansluta din externa miljö till det virtuella nätverket för den hanterade instansen. I det här sammanhanget refererar externa till alla objekt eller processer som inte är din hanterade instans. Om din externa resurs också använder ett virtuellt nätverk i Azure kan du använda peering för virtuella nätverk. Annars upprättar du anslutningen med hjälp av den metod du föredrar, till exempel punkt-till-plats-VPN, Azure ExpressRoute eller någon annan nätverksanslutningsteknik som uppfyller dina affärsbehov.

Port 135 och port 1024-65535 måste tillåta både inkommande och utgående kommunikation i både den virtuella nätverkssäkerhetsgruppen för den hanterade instansen och i alla brandväggar som har konfigurerats i den externa miljön.

DNS-inställningar

DTC förlitar sig på en transaktionsdeltagares NetBIOS-namn för ömsesidig kommunikation. Eftersom NetBIOS-protokollet inte stöds av Azure-nätverk och NetBIOS-namn inte kan matchas i blandade miljöer, förlitar sig DTC för en hanterad instans på DNS-namnservrar för värdnamnsmatchning. DTC-värdar för hanterad instans registreras automatiskt med Azure DNS-servern. Du måste registrera externa DTC-värdar med en DNS-server. Den hanterade instansen och den externa miljön måste också byta DNS-suffix.

Följande diagram visar namnmatchning i blandade miljöer:

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

Kommentar

Du behöver inte konfigurera DNS-inställningar om du planerar att endast använda DTC för XA-transaktioner.

Så här byter du DNS-suffix:

  1. I Azure-portalen går du till din hanterade instans.

  2. I den vänstra menyn under Inställningar väljer du Distribuerad transaktionskoordinator. Välj fliken Nätverk.

    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. I DNS-konfiguration väljer du Nytt externt DNS-suffix. Ange DNS-suffixet för din externa miljö, till exempel dnszone1.com.

  4. Kopiera värdet för DNS-suffix för DTC-värd. Använd sedan PowerShell-kommandot Set-DnsClientGlobalSetting -SuffixSearchList $list i din externa miljö för att ange DTC-värd-DNS-suffixet. Om suffixet till exempel är abc1111111.database.windows.netdefinierar du parametern $list för att hämta de befintliga DNS-inställningarna. Lägg sedan till suffixet i det som visas i följande exempel:

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

Testa nätverksanslutning

När du har konfigurerat nätverk och DNS kör du Test-Net Anslut ion (TNC) mellan DTC-slutpunkterna för din hanterade instans och den externa DTC-värden.

Om du vill testa anslutningen uppdaterar du först de användarkonfigurerbara värdena. Använd sedan följande PowerShell-skript i den externa miljön för att identifiera det fullständigt kvalificerade domännamnet (FQDN) för DTC-värdhanterad instans. Här är ett exempel:

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

JSON-utdata ser ut som följande FQDN-exempel:

chn000000000000.zcn111111111.database.windows.net

Där:

  • chn000000000000 är NetBIOS-namnet på den hanterade instansens DTC-värd.
  • zcn111111111.database.windows.net är DNS-suffixet.

Kör sedan en TNC till både FQDN och NetBIOS-namnet på den hanterade instansens DTC-värd på port 135. I följande exempel verifierar den första posten nätverksanslutningen. Den andra posten verifierar att DNS-inställningarna är korrekta.

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

Om anslutningen och DNS-suffixen är korrekt konfigurerade visas utdatan TcpTestSucceeded : True .

På den hanterade instanssidan skapar du ett SQL Agent-jobb för att köra TNC PowerShell-kommandot för att testa anslutningen till den externa värden.

Om FQDN för den externa värden till exempel är host10.dnszone1.comkör du följande test via ditt SQL Agent-jobb:

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

Begränsningar

Tänk på följande begränsningar när du använder DTC med SQL Managed Instance:

  • Det går inte att köra distribuerade T-SQL-transaktioner mellan SQL Managed Instance och en RDBMS från tredje part. SQL Managed Instance stöder inte länkade servrar som har RDBMS från tredje part. Omvänt stöds det att köra distribuerade T-SQL-transaktioner mellan hanterade instanser och SQL Server och andra SQL Server-baserade produkter.
  • Värdnamn i den externa miljön får inte vara längre än 15 tecken.
  • Distribuerade transaktioner till Azure SQL Database stöds inte med DTC.
  • För autentisering stöder DTC endast alternativet ingen autentisering . Alternativ för ömsesidig autentisering och autentisering av inkommande uppringare är inte tillgängliga. Eftersom DTC endast utbyter synkroniseringsmeddelanden och inte användardata, och eftersom de endast kommunicerar med det virtuella nätverket, är den här begränsningen inte en säkerhetsrisk.

Hantera transaktioner

Information om hur du visar statistik över distribuerade transaktioner finns i sys.dm_tran_distributed_transaction_stats.

Du kan återställa DTC-loggen med den sp_reset_dtc_log lagrade proceduren.

Distribuerade transaktioner kan hanteras med den sys.sp_manage_distributed_transaction lagrade proceduren.

Nästa steg

Information om inbyggt stöd för distribuerade instanser av hanterade instanser finns i Elastiska transaktioner.