Freigeben über


Weitere Informationen finden Sie unter Distributed Transaction Coordinator (DTC) für Azure SQL Managed Instance.

Gilt für: Azure SQL Managed Instance

Dieser Artikel bietet eine Übersicht über Distributed Transaction Coordinator (DTC) für Azure SQL Managed Instance. Sie können DTC verwenden, um verteilte Transaktionen in gemischten Umgebungen auszuführen, z. B. über verwaltete Instanzen, SQL Server-Instanzen, andere Managementsysteme für relationale Datenbanken (RDBMSs), benutzerdefinierte Anwendungen und andere Transaktionsteilnehmer hinweg, die in einer beliebigen Umgebung gehostet werden, die Netzwerkkonnektivität mit Azure herstellen kann.

Szenarien

Sie können DTC für Azure SQL Managed Instance für die Ausführung von verteilten Transaktionen über Umgebungen hinweg aktivieren, die Netzwerkkonnektivität mit Azure herstellen können. DTC für SQL Managed Instance wird verwaltet, was bedeutet, dass Azure die Verwaltungs- und Wartungsaufgaben übernimmt, z. B. Protokollierung, Speicherung, DTC-Verfügbarkeit und Netzwerkfunktionen. Abgesehen vom Aspekt der Verwaltung ist DTC für SQL Managed Instance derselbe DTC-Windows-Dienst, der herkömmliche verteilte Transaktionen für SQL Server unterstützt.

DTC für SQL Managed Instance ermöglicht eine Vielzahl von Technologien und Szenarien, z. B. XA, .NET, T-SQL, COM+, ODBC und JDBC.

Schließen Sie zum Ausführen von verteilten Transaktionen die folgenden Aufgaben ab:

  1. Konfigurieren Sie DTC.
  2. Aktivieren Sie die Netzwerkkonnektivität zwischen Teilnehmern.
  3. Konfigurieren Sie DNS-Einstellungen.

Hinweis

Für verteilte T-SQL- oder .NET-Transaktionen über Datenbanken hinweg, die nur von verwalteten Instanzen gehostet werden, empfiehlt es sich, die native Unterstützung für verteilte Transaktionen zu verwenden.

Requirements (Anforderungen)

Zum Ändern der DTC-Einstellungen benötigen Sie Schreibberechtigungen für die Ressource Microsoft.Sql/managedInstances/dtc. Zum Anzeigen von DTC-Einstellungen benötigen Sie Leseberechtigungen für die Ressource Microsoft.Sql/managedInstances/dtc.

Konfigurieren von DTC

Sie können DTC mit Azure-Portal, Azure PowerShell und CLI konfigurieren.

So konfigurieren Sie DTC über das Azure-Portal:

  1. Navigieren Sie im Azure-Portal zu Ihrer verwalteten Instanz.

  2. Wählen Sie im linken Menü unter Einstellungen die Option Distributed Transaction Coordinator aus.

    Screenshot: hervorgehobene Menüoption, Bereich „Distributed Transaction Coordinator“ für SQL Managed Instance und Registerkarte „Grundlagen“

  3. Legen Sie auf der Registerkarte Grundlagen die Option Distributed Transaction Coordinator auf Aktiviert fest.

  4. Lassen Sie auf der Registerkarte Sicherheit eingehende oder ausgehende Transaktionen zu, und aktivieren Sie XA oder SNA LU.

  5. Geben Sie auf der Registerkarte Netzwerk das DTC-DNS an, und rufen Sie Informationen ab, um DNS und Netzwerkfunktionen zu konfigurieren.

Netzwerkkonnektivität

Um DTC verwenden zu können, müssen alle Transaktionsteilnehmer über eine Netzwerkverbindung mit Azure verfügen. Da verwaltete Instanzen immer in einem dedizierten virtuellen Netzwerk in Azure bereitgestellt werden, müssen Sie Ihre externe Umgebung mit dem virtuellen Netzwerk Ihrer verwalteten Instanz verbinden. In diesem Kontext bezieht sich extern auf jedes Objekt oder jeden Prozess, bei dem es sich nicht um Ihre verwaltete Instanz handelt. Wenn Ihre externe Ressource ebenfalls ein virtuelles Netzwerk in Azure verwendet, können Sie das Peering virtueller Netzwerke verwenden. Andernfalls stellen Sie die Konnektivität mithilfe Ihrer bevorzugten Methode her, z. B. durch Point-to-Site-VPN, Azure ExpressRoute oder eine andere Netzwerkkonnektivitätstechnologie, die Ihre geschäftlichen Anforderungen erfüllt.

Port 135 muss eingehende und ausgehende Kommunikation zulassen, die Ports 14000–15000 müssen eingehende Kommunikation zulassen und die Ports 49152–65535 müssen ausgehende Kommunikation zulassen – sowohl in der Netzwerksicherheitsgruppe des virtuellen Netzwerks für die verwaltete Instanz als auch in jeder Firewall, die in der externen Umgebung eingerichtet ist.

DNS-Einstellungen

DTC benötigt für die gegenseitige Kommunikation den NetBIOS-Namen eines Transaktionspartners. Da das NetBIOS-Protokoll von Azure-Netzwerken nicht unterstützt wird und NetBIOS-Namen in gemischten Umgebungen nicht aufgelöst werden können, nutzt DTC für die verwaltete Instanz DNS-Namensserver für die Hostnamensauflösung. DTC-Hosts für verwaltete Instanzen werden automatisch beim Azure DNS-Server registriert. Externe DTC-Hosts müssen von Ihnen bei einem DNS-Server registriert werden. Die verwaltete Instanz und die externe Umgebung müssen ebenfalls DNS-Suffixe austauschen.

Das folgende Diagramm zeigt die Namensauflösung in gemischten Umgebungen:

Diagramm: Namensauflösung in gemischten Umgebungen bei Verwendung von DTC

Hinweis

Sie müssen keine DNS-Einstellungen konfigurieren, wenn Sie den DTC nur für XA-Transaktionen verwenden möchten.

So tauschen Sie DNS-Suffixe aus:

  1. Navigieren Sie im Azure-Portal zu Ihrer verwalteten Instanz.

  2. Wählen Sie im linken Menü unter Einstellungen die Option Distributed Transaction Coordinator aus. Wählen Sie die Registerkarte Netzwerk aus.

    Screenshot: Registerkarte „Netzwerk“ des Bereichs „DTC“ für Ihre verwaltete Instanz im Azure-Portal, „Neues externes DNS-Suffix“ hervorgehoben

  3. Wählen Sie unterDNS-Konfiguration die Option Neues externes DNS-Suffix aus. Geben Sie das DNS-Suffix für Ihre externe Umgebung ein, z. B. dnszone1.com.

  4. Kopieren Sie den Wert für das DTC-Host-DNS-Suffix. Verwenden Sie dann den PowerShell-Befehl Set-DnsClientGlobalSetting -SuffixSearchList $list in Ihrer externen Umgebung, um das DTC-Host-DNS-Suffix festzulegen. Wenn Ihr Suffix beispielsweise abc1111111.database.windows.net lautet, definieren Sie den Parameter $list, um die vorhandenen DNS-Einstellungen abzurufen. Fügen Sie dann Ihr Suffix an, wie im folgenden Beispiel gezeigt:

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

Netzwerkkonnektivität testen

Führen Sie nach dem Konfigurieren von Netzwerk und DNS Test-NetConnection (TNC) zwischen den DTC-Endpunkten Ihrer verwalteten Instanz und dem externen DTC-Host aus.

Bevor Sie die Verbindung testen, aktualisieren Sie zuerst die benutzerseitig konfigurierbaren Werte. Verwenden Sie dann das folgende PowerShell-Skript in der externen Umgebung, um den vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) des DTC-Hosts der verwalteten Instanz zu identifizieren. Hier sehen Sie ein Beispiel:

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

Die JSON-Ausgabe sieht wie der folgende Beispiel-FQDN aus:

chn000000000000.zcn111111111.database.windows.net

Hierbei gilt:

  • chn000000000000 ist der NetBIOS-Name des DTC-Hosts der verwalteten Instanz.
  • zcn111111111.database.windows.net ist das DNS-Suffix.

Führen Sie als Nächstes das Cmdlet TNC für den FQDN und den NetBIOS-Namen des DTC-Hosts der verwalteten Instanz an Port 135 aus. Im folgenden Beispiel überprüft der erste Eintrag die Netzwerkkonnektivität. Der zweite Eintrag überprüft, ob die DNS-Einstellungen richtig sind.

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

Wenn Konnektivität und DNS-Suffixe ordnungsgemäß konfiguriert sind, wird die Ausgabe TcpTestSucceeded : True angezeigt.

Erstellen Sie auf der Seite der verwalteten Instanz einen SQL-Agent-Auftrag, um den TNC-Befehl von PowerShell auszuführen, um die Konnektivität mit Ihrem externen Host zu testen.

Wenn der FQDN für Ihren externen Host beispielsweise host10.dnszone1.com lautet, führen Sie den folgenden Test über Ihren SQL-Agent-Auftrag aus:

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

Einschränkungen

Beachten Sie die folgenden Einschränkungen bei der Verwendung von DTC mit SQL Managed Instance:

  • Die Ausführung verteilter T-SQL-Transaktionen zwischen SQL Managed Instance und einem Drittanbieter-RDBMS wird nicht unterstützt. SQL Managed Instance unterstützt keine Verbindungsserver mit RDBMS-Drittanbietern. Die Ausführung verteilter T-SQL-Transaktionen zwischen verwalteten Instanzen und SQL Server und anderen SQL Server-basierten Produkten dagegen wird unterstützt.
  • Hostnamen in einer externen Umgebung dürfen nicht länger als 15 Zeichen sein.
  • Verteilte Transaktionen in Azure SQL-Datenbank werden mit dem DTC nicht unterstützt.
  • Für die Authentifizierung unterstützt DTC nur die Option Keine Authentifizierung. Die Optionen für die gegenseitige Authentifizierung und die Authentifizierung eingehender Anrufer sind nicht verfügbar. Da DTC nur Synchronisierungsnachrichten und keine Benutzerdaten austauscht und nur mit dem virtuellen Netzwerk kommuniziert, ist diese Einschränkung kein Sicherheitsrisiko.

Verwalten von Transaktionen

Informationen zum Anzeigen von Statistiken verteilter Transaktionen finden Sie unter sys.dm_tran_distributed_transaction_stats.

Sie können das DTC-Protokoll mit der gespeicherten Prozedur sp_reset_dtc_log zurücksetzen.

Verteilte Transaktionen können mit der gespeicherten Prozedur sys.sp_manage_distributed_transaction verwaltet werden.

Nächste Schritte

Informationen zur Unterstützung von verteilten Transaktionen mit nativen verwalteten Instanzen finden Sie unter Elastische Transaktionen.