SQL Server のクラスターでは、MSDTC のクラスターリソースを作成していたことがあるかと思います。
# 使用する機能によっては作成しなくても問題はありませんが。
Windows Server 2003 にインストールする場合には、SQL Server のインストール前にクラスターのコアリソースに MSDTC のリソースを作成していたかと思います。
Windows Server 2008 以降は、MSDTC のクラスターリソースの作成は必須ではなくなったようです。
Understanding MS DTC Resources in Windows Server 2008 Failover Clusters
Microsoft 分散トランザクション コーディネーターのインストール ![]()
BOL によると Windows Server 2008 以降の DTC は以下のルールとなっているようです。
SQL Server によって選択される MSDTC のインスタンスは、次のいずれかのルールを満たすものです。
ローカル グループにインストールされた MSDTC を使用する。
MSDTC のマップされたインスタンスを使用する。
クラスターの既定の MSDTC インスタンスを使用する。
ローカル コンピューターのインストール済み MSDTC インスタンスを使用する。
Windows Server 2008 以降では、
- SQL Server とは独立したグループに作成した DTC (独立した DTC)
# SQL Server のインスタンスとは異なるノードで MSDTC のリソースが実行される可能性がある - SQL Server のグループ内に作成した DTC (専用 DTC)
# SQL Server のインスタンスと同じノードで MSDTC のリソースが実行される - ローカルの DTC (既定のクラスター化 DTC が使用できない場合)
の 3 種類を使用できるようですね。
そのため、クラスターの MSDTC のリソースが無い状態で [BEGIN DISTRIBUTED TRAN] を実行するとエラーとならずに実行することができます。 ![]()
コンポーネントサービスを確認するとローカル DTC で動作しているのが確認できますね。
2003 の場合はローカルの DTC に対応していないため、クラスター化された DTC のリソースが無いと以下のような警告が出力されています。 ![]()
クラスターの DTC を作成しないで、分散トランザクションを実行するとエラーとなります。 ![]()
2003 ではクラスターの DTC のリソースを作成しないで MSDTC のサービスを起動しようとしてもエラーとなってしまうので、クラスターリソースとして DTC を作成する必要がありました。クラスターリソースとして DTC が作成されていれば MSDTC のサービスを起動できますので、BEGIN DISTRIBUTED TRAN を実行できます。
私は分散トランザクションを使用したシステムに携わったことがないので、2008 以降でローカルの DTC とクラスターの DTC を使用した場合のパフォーマンスや運用の利便性についての実情が把握できていないのですが、2008 以降は DTC の考え方が変わってきているのを覚えておいた方が良さそうですね。
書籍では アドバンストMicrosoft SQL Server 2008構築・管理 に書かれていますので、分散トランザクションを使用されている方は一読されておいてもよいかもしれないです。