1.2.10 分散トランザクションのトランザクションリカバリサービス

トランザクションリカバリサービスとは,Connector .NETが提供するWindowsサービスです。トランザクションリカバリサービスは,既定では停止の状態となっています。MSDTC連携機能を使用する場合は,必ずトランザクションリカバリサービスを開始の状態にしてください。インストール時にConnector .NETのインストーラによってWindowsサービスに登録されるトランザクションリカバリサービスの内容を次の表に示します。

表1-3 トランザクションリカバリサービスの登録内容

タブ項目設定値
全般サービス名TP1ConnectorNETTRS
表示名TP1/Connector.NET Transaction Recovery Service
説明Recovers distributed transaction.
実行ファイルのパス"<Connector .NETのインストールディレクトリ>¥trs¥cnntrs.exe"
スタートアップの種類手動
ログオンログオンローカルシステムアカウント
デスクトップとの対話をサービスに許可(チェックなし)
回復最初のエラー何もしない
次のエラー何もしない
その後のエラー何もしない
エラーカウントのリセット0(日後に行う)
依存関係依存関係なし
(凡例)
-:該当しません。

OSを起動する際にトランザクションリカバリサービスを自動的に起動させたい場合は,「スタートアップの種類」を変更してください。トランザクションリカバリサービスに障害が発生した場合にトランザクションリカバリサービスを自動的に再起動させたいときは,「最初のエラー」,「次のエラー」,「その後のエラー」および「エラーカウントのリセット」を,それぞれ必要に応じて変更してください。

「スタートアップの種類」,「最初のエラー」,「次のエラー」,「その後のエラー」および「エラーカウントのリセット」以外の項目は変更しないでください。変更した場合,トランザクションリカバリサービスが正常に動作しないことがあります。

トランザクションリカバリサービスが提供する機能について説明します。

<この項の構成>
(1) 未決着トランザクションの回復
(2) アプリケーションドメインの監視
(3) 未決着トランザクションの確認処理

(1) 未決着トランザクションの回復

トランザクションリカバリサービスは,トランザクションリカバリサービスの開始時とアプリケーションドメイン終了の検知時に,未決着トランザクションを回復します。アプリケーションドメイン終了の検知については「(2) アプリケーションドメインの監視」を参照してください。

未決着トランザクションの回復の流れを次の図に示します。

図1-7 未決着トランザクションの回復の流れ

[図データ]

トランザクションリカバリサービスは,トランザクションリカバリサービスの開始時とアプリケーションドメイン終了の検知時に,OpenTP1のXAリソースサービスから未決着トランザクションの回復情報を取得し,その回復情報を基にMSDTCに対してトランザクションの再参加を行います。そのあとで,アプリケーションで失敗した処理要求をMSDTCから受けたトランザクションリカバリサービスが,トランザクションの処理を完了させます。トランザクションリカバリサービスがトランザクションの完了に失敗した場合は,トランザクションリカバリサービスが再度トランザクションの回復を試みます。

OpenTP1が未決着トランザクションの回復情報の取得やトランザクションの再参加に失敗した場合は,一定間隔で回復情報の取得を再度試みます。この間隔は,<recoveryService>要素のrecoverRetryInterval属性で指定します。

(2) アプリケーションドメインの監視

トランザクションリカバリサービスは,MSDTC連携機能を使用するConnector .NETのアプリケーションドメインを監視します。トランザクションリカバリサービスの監視下にあるアプリケーションドメインが終了した場合,終了したアプリケーションドメインで未決着となっていたトランザクションを回復します。アプリケーションドメインの監視の流れを次の図に示します。

図1-8 アプリケーションドメインの監視の流れ

[図データ]

アプリケーションドメインの監視は,アプリケーションドメインでトランザクションとして扱われる最初のサービス要求時に自動的に開始されます。監視が開始されてからトランザクションリカバリサービスがダウンして,一定時間経過後にトランザクションリカバリサービスが復旧していた場合は,トランザクションとして扱われる最初のサービス要求時に再度監視が開始されます。アプリケーションドメインの監視は一定間隔で行われます。この間隔は,<recoveryService>要素のappDomainCheckInterval属性で指定します。この間隔がアプリケーションダウンなどが発生してからトランザクションの回復処理が行われるまでの最大時間となります。

トランザクションリカバリサービスは,アプリケーションドメインの終了を検知すると,OpenTP1のXAリソースサービスから未決着トランザクションの回復情報を取得し,その回復情報を基にMSDTCに対してトランザクションの再参加を行います。

コンソールアプリケーションなどでトランザクション範囲内の処理が終了し,コミットやロールバックの処理要求が完了する前にアプリケーションのプロセスが終了した場合は,トランザクションリカバリサービスがトランザクションのコミットやロールバックの処理を完了させます。

(3) 未決着トランザクションの確認処理

トランザクションリカバリサービスは,アプリケーションドメインの監視および未決着トランザクションの回復によってトランザクションの回復処理を完了したあとで,OpenTP1に未決着トランザクションが存在しないかどうかを再確認します。これは,トランザクションリカバリサービスが回復処理を実行したタイミングで,OpenTP1に処理中のトランザクションが存在した場合にOpenTP1に未決着トランザクションが残ることを防止するためです。この確認で未決着トランザクションが存在した場合は,トランザクションの回復処理を行います。この確認処理の間隔は<recoveryService>要素のrecoverCheckInterval属性で,確認処理の回数は<recoveryService>要素のrecoverCheckCount属性で指定します。ただし,指定した回数の確認処理が終了する前に,新たに未決着トランザクションが存在する旨の通知を受けた場合やアプリケーションの終了を検知した場合は,確認処理を終了します。