Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
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.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
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
Vérifiez que la nouvelle ressource MSDTC est maintenant répertoriée à l’aide de la commande suivante :
Get-Dtc -Verbose |Sort-Object DtcName
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.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