Freigeben über


Erstellen oder Verschieben einer MSDTC-Installation für die Verwendung mit einem SQL-Failovercluster

In diesem Artikel wird beschrieben, wie Sie eine fehlerhafte Microsoft Distributed Transaction Coordinator (MSDTC)-Installation für die Verwendung mit einer Failovercluster-SQL Server-Installation neu erstellen.

Ursprüngliche KB-Nummer: 294209

Übersicht

Der folgende Blog enthält detaillierte Informationen zu den Änderungen des MSDTC-Verhaltens seit der Veröffentlichung von Windows Server 2008.

MSDTC-Empfehlungen für SQL-Failovercluster

Der Zweck der folgenden häufig gestellten Fragen (FAQs) besteht darin, häufig gestellte Fragen mit MSDTC zu beantworten, wenn sie mit SQL Server-Failoverclustered-Instanzen verwendet werden, um aktuelle Empfehlungen und bewährte Methoden einzuschließen.

MsDTC ist ein Transaktionsmanager, der es Clientanwendungen ermöglicht, mehrere verschiedene Datenquellen in einer Transaktion einzuschließen und dann das Commit der verteilten Transaktion auf allen Servern zu koordinieren, die in der Transaktion aufgelistet sind. Dadurch wird sichergestellt, dass die Transaktion zugesichert wird, wenn jeder Teil der Transaktion erfolgreich ist oder ein Rollback ausgeführt wird, wenn ein Teil des Transaktionsvorgangs fehlschlägt.

Viele Personen fragen, warum wir MSDTC vor der Installation von SQL Server installieren müssen. Sie müssen diesen Vorgang nicht mehr ausführen. Es war eine Anforderung, dass SQL Server 2005 erforderlich war. Diese Version von SQL Server hat ihren Lebenszyklus beendet und die Anforderung zur Installation von SQL Server beendet.

Bei der Bereitstellung von SQL Server in einer hochverwendbaren Umgebung wie Windows-Failoverclustering gibt es bestimmte bewährte Methoden, mit denen das MSDTC-Dienstverhalten vorhersehbarer wird.

  • Wenn das Thema datenbankübergreifender und/oder DTC-Transaktionsunterstützung unter einer Verfügbarkeitsgruppe angezeigt wird, wird die schnelle Antwort NICHT UNTERSTÜTZT!.

  • Dies ist eine wahre Aussage, und die Unterhaltung tendiert dazu, sich dann zu konzentrieren, aber warum? Tatsächlich haben einige DBAs verschiedene Formen dieser Transaktionstypen getestet und keine Fehler gefunden.

  • Das Problem besteht darin, dass das Testen nicht abgeschlossen ist, und die erforderliche Zwei-Phasen-Commit-Aktivität kann zu Datenverlusten oder einer Datenbank führen, die in bestimmten Konfigurationen nicht wie erwartet wie erwartet wiederhergestellt wird. Tatsächlich fügt der SQL Server-Tester Fehler an strategischen Standorten ein, um die Szenarien zu erstellen, die schwierig (aber nicht unmöglich) auf einem Produktionsserver zu erstellen sind. Weitere Informationen finden Sie unter "Nicht unterstützt:AGs mit TC/Cross-Database Transaction".

Bei Windows 2008-Failoverclustern und höher müssen Sie MSDTC nicht clustern, um die Funktionalität des MSDTC-Diensts zu verwenden, da MSDTC in Windows 2008 neu gestaltet wurde. Im Gegensatz zu Windows 2003 mussten Sie bei der Installation des Windows-Failoverclusters MSDTC clustern. Dies ist bei Verwendung von Windows 2008 nicht mehr der Fall, da standardmäßig der MSDTC-Dienst lokal ausgeführt wird, auch wenn Failoverclustering installiert ist.

Wenn für Ihre SQL Server-Failoverclustered-Instanz MSDTC erforderlich ist und die MSDTC-Ressourcen mit der SQL Server-Instanz fehlschlagen müssen, empfehlen wir, eine MSDTC-Ressource in der FailoverCluster-Rolle zu erstellen, die die SQL Server-Instanz enthält und folgendes verwendet:

  • Der SQL Server-Netzwerkname\Clientzugriffspunkt
  • Ein Datenträger innerhalb der SQL Server-Rolle
  • Benennen Sie die MSDTC-Ressource mit dem Namen des virtuellen SQL-Servers.

Einrichten und Testen einer neuen MSDTC-Clusterressource mithilfe von PowerShell

  1. Erstellen Sie eine neue MSDTC-Ressource, die den Inhalt zwischen und einschließlich der <> nachfolgenden Abschnitte ersetzt, und führen Sie dann aus.

    $SqlRole = <Actual name of the role containing the SQL Server instance>
    $SqlNetName = <Actual SQL Servernetwork resourcename>
    $VSqlSrv = <Actual SQL Server virtual server name>
    $CluDsk = <Actual disk resource name>
    
    Add-ClusterResource -Name $VSqlSrv -ResourceType "Distributed Transaction Coordinator" -Group $SqlRole
    

    Wenn die MSDTC-Ressource den angegebenen Namen nicht akzeptiert hat, können Sie den Namen mithilfe der folgenden PowerShell ändern, indem Sie den New Distributed Transaction Coordinator durch RealSqlVsName ersetzen:

    Get-ClusterResource "New Distributed Transaction Coordinator" | %{$_.Name = RealSqlVsName }
    

    Sie können realSqlVsName ersetzen $VSqlSrv , wenn sie noch aktiv ist.

  2. Überprüfen Sie Firewallregeln mithilfe des folgenden Skripts:

    Set-NetFirewallRule -Name 'RPC Endpoint Mapper' -Enabled True
    Set-NetFirewallRule -Name 'DTC incoming connections' -Enabled True
    Set-NetFirewallRule -Name 'DTC outgoing connections' -Enabled True
    
  3. Legen Sie die MSDTC-Netzwerkauthentifizierung mithilfe des folgenden Skripts fest:

    Set-DtcNetworkSetting -AuthenticationLevel Mutual `
    -DtcName "Local" -InboundTransactionsEnabled $True `
    -LUTransactionsEnabled $True `
    -OutboundTransactionsEnabled $True `
    -RemoteAdministrationAccessEnabled $False `
    -RemoteClientAccessEnabled $False `
    -XATransactionsEnabled $True -verbose
    
  4. Überprüfen Sie, ob die neue MSDTC-Ressource jetzt mit dem folgenden Befehl aufgelistet ist:

    Get-Dtc -Verbose |Sort-Object DtcName
    
  5. Testen Sie die neue MSDTC-Ressource.

    Test-Dtc -LocalComputerName RealSqlVsName -Verbose
    

    Sie können realSqlVsName ersetzen $VSqlSrv , wenn sie noch aktiv ist. Wird $Env:COMPUTERNAME verwendet, um die lokale Installation zu testen. Sie müssen die Firewallregeln und MSDTC-Authentifizierungs-PowerShell-Befehle auf allen anderen vorhandenen Clusterknoten ausführen.

  6. Testen Sie MSDTC.

    In diesem Beispiel verwenden wir die AdventureWorks2012-Datenbank, sie müssen einen tatsächlichen Datenbanknamen ersetzen, mit dem Sie testen möchten. Führen Sie in einem SQL Server-Abfragefenster die folgende SQL-Anweisung aus:

    USE AdventureWorks2012;
    
    GO
    
    BEGIN DISTRIBUTED TRANSACTION; 
    
    -- Enter fake transaction to the database
    
    INSERT SQL_Statement
    
    DELETE SQL_Statement
    
    COMMIT TRANSACTION
    
    GO
    

    Nun sollten Sie sehen, dass eine Zeile betroffen ist und dass der eingefügte Datensatz nicht vorhanden ist.

References

Empfohlene MSDTC-Einstellungen für die Verwendung von verteilten Transaktionen in SQL Server