・ |
複数のサーバーにわたるトランザクション処理 |
|
・ |
BEGIN DISTRIBUTED TRANSACTION ステートメントで明示的にステートメント開始 |
|
※ |
終了は COMMIT|ROLLBACK TRANSACTION |
|
・ |
トランザクションの発行者:開始ステートメントの実行者、分散トランザクションを管理 |
|
− |
SQL Server では MS DTC サービスがステートメントを管理 |
|
・ |
2 フェーズコミット (2PC) |
|
※ |
ネットワーク障害により一部のサーバーがトランザクションのコミットやロールバックを行う危険性を避ける |
|
− |
準備フェーズ |
|
|
‥
|
コミット要求を受け取った MS DTC サービスがそのトランザクションに関連するすべての SQL Server に準備コマンドを送信 |
|
|
‥
|
各 SQL Server はトランザクションを持続的なものにするために必要な処理をすべて実行、トランザクションのログイメージが入っているすべてのバッファをディスクにフラッシュ |
|
|
‥ |
SQL Server の準備フェーズが完了すると MS DTC に準備の成否を通知 |
|
− |
コミットフェーズ |
|
|
‥
|
すべての SQL Server から準備の正常完了通知を受け取った MS DTC は SQL Server にコミットコマンドを送信し、コミットを完了 |
|
|
‥
|
全 SQL Server がコミット正常完了を報告した場合、トランザクションマネージャはアプリケーションに成功通知を送信 |
|
|
‥
|
準備できなかったことを報告する SQL Server があった場合、MS DTC は全 SQL Server にロールバックコマンドを送信、アプリケーションにコミットできなかったことを報告 |
|
|
|
→ 全 SQL Server でコミットが完了するまでコマンドを送り続ける |