Comment reconstruire ou déplacer une installation MSDTC à utiliser avec un cluster de basculement SQL

Cet article explique comment reconstruire une installation Microsoft Distributed Transaction Coordinator (MSDTC) rompue pour une utilisation avec une installation de SQL Server en cluster de basculement.

Produits concernés : Windows Server 2019, Windows Server 2016, Windows Server 2012 R2
Numéro de la base de connaissances d’origine : 294209

Résumé

Le blog suivant contient des informations détaillées sur les changements de comportement de MSDTC depuis la publication de Windows Server 2008.

Recommandations MSDTC sur le cluster de basculement SQL

L’objectif des questions fréquentes (FAQ) suivantes est de répondre aux questions courantes avec MSDTC lorsqu’il est utilisé avec SQL Server instances cluster de basculement afin d’inclure les recommandations actuelles et les meilleures pratiques.

MsDTC est un gestionnaire de transactions qui permet aux applications clientes d’inclure plusieurs sources de données différentes dans une transaction, puis de coordonner la validation de la transaction distribuée sur tous les serveurs inscrits dans la transaction. Cela permet de s’assurer que la transaction est validée, si chaque partie de la transaction réussit, ou est restaurée, en cas d’échec d’une partie du processus de transaction.

De nombreuses personnes se demandent pourquoi nous devons installer MSDTC avant d’installer SQL Server. Vous n’avez plus besoin d’effectuer cette opération. Il s’agissait d’une exigence que SQL Server 2005 avait exigée. Cette version de SQL Server a mis fin à son cycle de vie et a donc mis fin à l’obligation d’installer SQL Server.

Lors du déploiement de SQL Server dans un environnement hautement disponible comme le clustering de basculement Windows, certaines bonnes pratiques peuvent rendre le comportement des services MSDTC plus prévisible.

  • Lorsque le sujet de la prise en charge des transactions inter-bases de données et/ou DTC, sous un groupe de disponibilité, apparaît, la réponse rapide n’est PAS PRISE EN CHARGE !.

  • Il s’agit d’une affirmation vraie et la conversation a tendance à se concentrer sur, mais pourquoi ? En fait, certains administrateurs de base de données ont testé diverses formes de ces types de transactions et n’ont pas rencontré d’erreurs.

  • Le problème est que le test n’est pas terminé et que l’activité de validation en deux phases requise peut entraîner une perte de données ou une base de données qui ne récupère pas comme prévu dans certaines configurations. En fait, les testeurs SQL Server injectent des défaillances à des emplacements stratégiques pour créer des scénarios difficiles (mais pas impossibles) à créer sur un serveur de production. Pour plus d’informations, consultez Non pris en charge : groupes de disponibilité avec transaction TC/inter-bases de données.

Avec le cluster de basculement Windows 2008 et versions ultérieures, vous n’avez pas besoin de cluster MSDTC pour utiliser les fonctionnalités du service MSDTC, car MSDTC a été repensé dans Windows 2008. Contrairement à Windows 2003, si vous installez le cluster de basculement Windows, vous deviez mettre en cluster MSDTC. Ce n’est plus le cas lors de l’utilisation de Windows 2008, car par défaut, le service MSDTC s’exécute localement, même avec le clustering de basculement installé.

Si votre instance cluster de basculement SQL Server nécessite MSDTC et que les ressources MSDTC doivent basculer avec l’instance SQL Server, nous vous recommandons de créer une ressource MSDTC dans le rôle FailoverCluster qui contient le SQL Server instance et qu’elle utilise :

  • Nom réseau SQL Server\point d’accès client
  • Un disque dans le rôle SQL Server
  • Nommez la ressource MSDTC avec le nom du serveur virtuel SQL.

Configurer et tester une nouvelle ressource de cluster MSDTC à l’aide de PowerShell

  1. Créez une ressource MSDTC en remplaçant le contenu entre et en incluant les <> sections ci-dessous, puis exécutez.

    $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>
    

    Si la ressource MSDTC n’a pas accepté le nom fourni, vous pouvez modifier le nom à l’aide de la commande PowerShell suivante en remplaçant le nouveau coordinateur de transactions distribuées par RealSqlVsName :

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

    Vous pouvez remplacer $VSqlSrv RealSqlVsName s’il est toujours actif.

  2. Vérifiez les règles de pare-feu à l’aide du script suivant :

    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. Définissez l’authentification réseau MSDTC à l’aide du script suivant :

    Set-DtcNetworkSetting -AuthenticationLevel Mutual `
    -DtcName "Local" -InboundTransactionsEnabled $True `
    -LUTransactionsEnabled $True `
    -OutboundTransactionsEnabled $True `
    -RemoteAdministrationAccessEnabled $False `
    -RemoteClientAccessEnabled $False `
    -XATransactionsEnabled $True -verbose
    
  4. Vérifiez que la nouvelle ressource MSDTC est désormais répertoriée à l’aide de la commande suivante :

    Get-Dtc -Verbose |Sort-Object DtcName
    
  5. Testez la nouvelle ressource MSDTC.

    Test-Dtc -LocalComputerName RealSqlVsName -Verbose
    

    Vous pouvez remplacer $VSqlSrv RealSqlVsName s’il est toujours actif. Utilisez $Env:COMPUTERNAME pour tester l’installation locale. Vous devez exécuter les règles de pare-feu et les commandes PowerShell d’authentification MSDTC sur tous les autres nœuds de cluster existants.

  6. Testez MSDTC.

    Dans cet exemple, nous allons utiliser la base de données AdventureWorks2012. Vous devez remplacer un nom de base de données réel que vous souhaitez tester. À partir d’une fenêtre de requête SQL Server, exécutez l’instruction SQL suivante :

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

    Vous devez maintenant voir qu’une ligne a été affectée et que l’enregistrement inséré n’existe pas.

References

Paramètres MSDTC recommandés pour l’utilisation des transactions distribuées dans SQL Server