J'ai une application que j'aimerais prendre en charge SQL Server Mirroring. Cependant, l'architecture est actuellement telle que plusieurs services WCF et connexions DB seront enrôlés dans une seule transaction MSDTC, et Microsoft déclare que MSDTC n'est pas pris en charge lors de l'utilisation de la mise en miroir.Pourquoi MSDTC n'est-il pas pris en charge lors de l'utilisation de SQL Server Mirroring & Automatic Failover?
Their explanation est pas très instructif:
Un scénario similaire peut se produire lorsque vous utilisez la base de données mise en miroir avec des transactions MS DTC. Par exemple, le nouveau serveur principal contacte le MS DTC après un basculement. Cependant, le MS DTC n'a aucune connaissance du nouveau serveur principal. Par conséquent, le MS DTC arrête toutes les transactions qui se trouvent dans la phase «préparation à la validation», même si les transactions sont considérées comme validées dans d'autres bases de données.
Ce que j'ai un problème de compréhension est la dernière phrase. En quoi est-ce différent que si le serveur de base de données n'était pas en miroir, et est juste mort au même moment? Quelqu'un peut-il m'expliquer cela? Je dois pouvoir expliquer cela à d'autres personnes de mon organisation (ainsi qu'aux clients), mais je ne comprends pas pourquoi MSDTC peut correctement restaurer/compenser dans un scénario, mais cela n'est pas possible si l'un des participants est un serveur SQL en miroir (en mode de sécurité totale).
MSDTC aurait-il annulé les autres ressources? Ou cette transaction distribuée attend-elle jusqu'à ce que le serveur d'origine revienne? Que fait le partenaire en miroir lorsque MSDTC l'ignore (annuler? Commit? Lancer une erreur?) –
En cas de validation en deux phases, il y a un état dans lequel DTC ne peut pas agir: après avoir notifié certaines RM à valider. À ce moment-là, le DTC ne peut pas changer d'avis sur le résultat de la transaction, et c'est le moment de l'échec. Si le basculement se produit avant ce moment, alors c'est simple: demandez à tous les autres RM de revenir en arrière, ce n'est pas grave. –
Alors disons qu'il y a 3 RM impliqués. Nous arrivons à la phase que vous avez mentionnée, et on dit à RM1 de s'engager. RM2 est notre serveur SQL, et puisqu'il a échoué, il ne peut pas être atteint. Qu'arrive-t-il à RM3? Est-il dit de commettre? Combien de temps cette transaction distribuée traîne-t-elle si le serveur d'origine ne revient jamais pour lui dire de revenir en arrière? La transaction a-t-elle été conclue avec le partenaire miroir ou non? S'il y a quelque part où je peux aller en apprendre plus à ce sujet, veuillez me diriger. Je n'ai pas été capable de trouver beaucoup sur ce sujet par moi-même. Merci pour votre aide, aussi! –