Skip to content

MS_MSDTC

nishi_74322014 edited this page Aug 18, 2026 · 2 revisions

MS-DTC

概要

MS-DTC は、

  • 1996 年に初めて登場した Microsoft Transaction Server(MTS)
  • MTS の後継である Windows DNA の中核コンポーネントの COM+
  • COM+ の後継である Enterprise Services(.NET に対応)
  • SQL Server で言うリンク サーバ(Oracle で言う DB リンク)。

から利用することで、2 相コミットを実現する、

  • トランザクション マネージャ(TM)
  • リソース マネージャ(RM)

である。

移行メモ(正誤): MS-DTC 自身は トランザクション マネージャ(TM)であって、
リソース マネージャ(RM)ではない。
RM に当たるのは、実際にデータを保持している
SQL Server / Oracle / MSMQ などの各リソース側である。
MS-DTC は複数の RM を跨いだ 2 相コミットを調停する
役割を担う。

補足(2相コミットの流れ): MS-DTC が調停する 2 相コミット(2PC)は
以下の 2 フェーズからなる。

フェーズ 内容
1. Prepare TM が各 RM に「コミットできるか」を問い合わせる。RM はログを永続化し、コミットもロールバックもできる状態で待つ
2. Commit / Abort 全 RM が Prepare に成功したら Commit を指示。1 つでも失敗すれば全体を Abort

Prepare 後・Commit 指示前に TM が落ちると、RM は
in-doubt(未確定)トランザクションとして資源をロックしたまま待ち続ける。
これが分散トランザクションで最も厄介な障害モードで、
復旧には TM の回復処理(または手動解決)が必要になる。
クラウドやマイクロサービスで 2PC が敬遠される主因でもある。

補足(最新化:.NET での分散トランザクション):

ランタイム MS-DTC への昇格
.NET Framework サポート
.NET Core 〜 .NET 6 未サポート(昇格時に PlatformNotSupportedException
.NET 7 以降 Windows のみサポート(Linux は未サポート)

代替として、結果整合性を前提とした設計
Saga パターンOutbox パターン)を採るのが現在の定石。
詳細はクラウド設計パターンを参照。

ユースケース

Windows DNA

1997 年に提唱されたアーキテクチャで、

  • COM+ をベースにした分散オブジェクト環境と
  • HTML をベースにした WWW 環境の

統合を図ることを目的としている。

Windows 2000 で実現された。

COM+

下記のマイクロソフト独自技術と TP モニタ・リソース マネージャ機能などなどを兼ね備えた
AP サーバ コンポーネント。

  • COM(Component Object Model):
    ソフトウェアの再利用を目的としたモジュールのコンポーネント化の技術
  • DCOM(Distributed Component Object Model):
    ネットワーク上に分散するコンポーネント間通信の技術。

Enterprise Services

  • COM+ の機能を .NET 開発でも利用可能にした COM+ の後継である AP サーバ コンポーネント。

  • アンマネージ コードでの仕様であるCOMDCOM.etc に関連する技術の
    いくつかは、.NET の技術にリプレースされている。

    • 例えば、COMの GUID を使用したバージョニングは、
      アセンブリの AssemblyVersion 属性に置き換えられている。
    • また、DCOMの RPC は、.NET リモーティングに置き換えられている。
  • .NET における Enterprise Services(COM+)について
    https://learn.microsoft.com/ja-jp/previous-versions/dotnet/articles/ms973847(v=msdn.10)

補足(最新化): System.EnterpriseServicesServicedComponent)と
.NET リモーティングは、いずれも .NET Core 以降には移植されていない
COM+ 相当の機能が必要な場合は .NET Framework に留まるか、
gRPC(gRPC)や HTTP API での置き換えを検討する。

SQL Server リンクサーバ機能

SQL Server リンクサーバ機能を参照。

補足(MS-DTC が動かないときの確認点): 分散トランザクションの障害は
ネットワーク/構成に起因することが多い。確認順は概ね以下。

  1. 両ノードで Distributed Transaction Coordinator サービスが起動しているか
  2. dcomcnfg(コンポーネント サービス)の MS-DTC のセキュリティ構成で
    ネットワーク DTC アクセス、送受信の許可、認証方式が両側で整合しているか
  3. ファイアウォールで **RPC エンドポイント マッパ(TCP 135)**と
    動的ポート範囲が開いているか
  4. 名前解決(両方向の FQDN / NetBIOS 名)が通るか

検証には DTCPing / DTCTester が使える。

参考


Tags: 移行, インフラストラクチャ, Windows, データアクセス, SQL Server

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally