2009/11/28

MSDTCの罠

MSDTCはコミットフェーズのシーケンスにちょっとした罠があり、見事にはまったのでメモ。









































準備フェーズで全てのリソースマネージャから準備完了のメッセージを受信したら、コミットフェーズでアプリへのコミット通知とリソースマネージャーへのコミットメッセージの送信を非同期に行う。

そのためアプリにコミット通知を行ったはいいが、図中の③、④のポイントで障害が発生すると不確定区間のためインダウト トランザクションとして残ってしまう。

アプリとしてはMSDTCからコミットを受けているので正常フローするが、実際はトランザクションがコミットされず、インダウト トランザクションとしてリソースをロックし続けている状態になってしまう。

0 件のコメント:

コメントを投稿