Partager via


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

Cet article explique comment reconstruire une installation msDTC (Microsoft Distributed Transaction Coordinator) rompue à utiliser avec une installation SQL Server en cluster de basculement.

Numéro de base de connaissances d’origine : 294209

Résumé

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

Recommandations MSDTC sur le cluster de basculement SQL

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

Le 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, si une partie du processus de transaction échoue.

De nombreuses personnes demandent pourquoi nous devons installer MSDTC avant d’installer SQL Server. Vous n’avez plus besoin d’effectuer cette opération. Il était nécessaire que SQL Server 2005 ait dû être requis. Cette version de SQL Server a terminé son cycle de vie et a donc mis fin à l’exigence 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 la rubrique 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 !.

  • C’est une vraie déclaration et la conversation a tendance à se concentrer sur mais pourquoi ? En fait, certains administrateurs de base de données ont testé différentes 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 échecs à des emplacements stratégiques pour créer les scénarios difficiles (mais pas impossibles) à créer sur un serveur de production. Pour plus d’informations, consultez Non pris en charge : groupes de sécurité avec tc/transaction 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 cluster MSDTC. Cela 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 nécessite que les ressources MSDTC basculent avec l’instance SQL Server, nous vous recommandons de créer une ressource MSDTC dans le rôle FailoverCluster qui contient l’instance SQL Server et qu’elle utilise :

  • Nom du réseau SQL Server\point d’accès client
  • 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 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>
    
    Add-ClusterResource -Name $VSqlSrv -ResourceType "Distributed Transaction Coordinator" -Group $SqlRole
    

    Si la ressource MSDTC n’a pas accepté le nom fourni, vous pouvez modifier le nom à l’aide de PowerShell suivant 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 maintenant 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. Permet $Env:COMPUTERNAME de 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 affectée et que l’enregistrement inséré n’existe pas.

References

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