5

SQL Server ミラーリングをサポートしたいアプリケーションがあります。ただし、アーキテクチャは現在、複数の WCF サービスと DB 接続が 1 つの MSDTC トランザクションに参加するようなものであり、ミラーリングを使用する場合、Microsoft は MSDTC がサポートされていないと述べています。

彼らの説明はあまり有益ではありません:

MS DTC トランザクションでデータベース ミラーリングを使用すると、同様のシナリオが発生する可能性があります。たとえば、新しいプリンシパル サーバーは、フェールオーバー後に MS DTC に接続します。ただし、MS DTC は新しいプリンシパル サーバーを認識しません。したがって、MS DTC は、トランザクションが他のデータベースでコミットされたと見なされる場合でも、"コミットの準備" フェーズにあるすべてのトランザクションを停止します。

私が理解に問題を抱えているのは、最後の文です。これは、DB サーバーがミラーリングされておらず、同じ時点で停止した場合とどう違うのでしょうか? 誰かが私にそれを説明できますか?これを組織内の他のユーザー (および顧客) に説明できるようにする必要がありますが、MSDTC が 1 つのシナリオで適切にロールバック/補正できる理由がわかりませんが、参加者の 1 つがミラーリングされた SQL サーバーである場合はできません。 (フルセーフティモード)。

4

1 に答える 1

7

MSDTC はミラーリングを認識しません。そのため、リソース マネージャーを分散トランザクションに登録すると、サーバー A などの名前でその RM を認識します。フェイルオーバーが発生した後、ログは新しいプリンシパルに「DTC に連絡して、トランザクション T のステータスを確認してください」と通知します。 '。サーバー B という名前の新しいプリンシパルが DTC にアクセスし、「私はサーバー B です。トランザクション T の結果は何ですか?」と言います。そして DTC は彼に「出て行ってください。私はあなたのことを知りません。あなたはトランザクション T に登録されていません」と言います。これは、KB 記事にも記載されている内容です。

フェールオーバー後、新しいプリンシパル サーバーは、同じリソース ID を使用する以前のプリンシパル サーバーの MS DTC に接続できません。したがって、新しいプリンシパル サーバーはトランザクション ステータスを取得できません。

「これは、DB サーバーがミラーリングされておらず、同じ時点で停止した場合とどう違うのですか?」と尋ねています。違いは、これが発生した場合、データベース回復されると、同じサーバー上で回復され、このサーバーが DTC に接続して、登録された分散トランザクションをロールバックするように要求できることです。

于 2010-07-12T20:33:49.390 に答える