孤立したMSDTCトランザクション への対処

FIX:継続的な MS DTC トランザクションは、 SQL Server 2005 で孤立します。 または FIX: An ongoing MS DTC transaction is orphaned in SQL Server 2005 によってHotFixが提供されているようなのだが未適用の環境で問題が起きたのでメモ。

環境の概要

  • ServerA → ServerB への トランザクションレプリケーションが存在する
  • ServerA から ServerB にデータを転送する定期タスクが存在する。この定期タスクは System.Transactions を利用しており、結果としてMSDTCの世話になる
  • ServerB → ServerC へのトランザクションレプリケーションを最近作成した

このような状況で、ServerB (ディストリビュータも兼ねている) において spid=-2 のSQLServerプロセスによってロックが確認され、トラブル対応で調査を行った。

結論としては、spid=-2 のSQLServerプロセスは孤立したMSDTCトランザクションであり、MSDTC側の作業IDユニットは次のSQL文で確認することができる。

SELECT DISTINCT(req_transactionUOW) FROM sys.syslockinfo WHERE req_spid = -2

また、GUIとしては 管理ツール – コンポーネントサービス の分散トランザクションコーディネータ – トランザクションの一覧で確認できる。

比較的早期にMSDTCではないかとあたりを付けたため MS DTC トランザクションに関するトラブルシューティング にたどりついていたのだが、SQL Server 2005 以降ではKILLステートメントの構文は異なり WITH ROLLBACK はつけられない。

トラブルシューティングにあるように、一度GUI画面から「中止」や「破棄」を行おうとしたが、エラーメッセージとともに受け付けてはもらえず、対処としては、 KILL ‘00000000-0000-0000-0000-000000000000’ というように KILL ステートメントの引数として1つだけシングルクオートで囲った作業IDユニット を渡してトランザクションを終了させた。

(GUIでの作業風景、ただし結局役には立たなかった)

 

FIX:継続的な MS DTC トランザクションは、 SQL Server 2005 で孤立します。(KB949075) が累積パッチに含まれているかを確認してみたが、Cumulative update package 8 for SQL Server 2005 Service Pack 2 (CU8) 時点でもまだ含まれていないので個別にHotFixを適用するしかない。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。