2.2.10 分散トランザクションのトランザクションリカバリサービス
トランザクションリカバリサービスとは,Connector .NETが提供するWindowsサービスです。トランザクションリカバリサービスは,既定では停止の状態となっています。MSDTC連携機能を使用する場合は,必ずトランザクションリカバリサービスを開始の状態にしてください。インストール時にConnector .NETのインストーラによってWindowsサービスに登録されるトランザクションリカバリサービスの内容を次の表に示します。
タブ |
項目 |
設定値 |
---|---|---|
全般 |
サービス名 |
TP1ConnectorNETTRS |
表示名 |
TP1/Connector.NET Transaction Recovery Service |
|
説明 |
Recovers distributed transaction. |
|
実行ファイルのパス |
"<Connector .NETのインストールディレクトリ>\trs\cnntrs.exe" |
|
スタートアップの種類 |
手動 |
|
ログオン |
ログオン |
ローカルシステムアカウント |
デスクトップとの対話をサービスに許可 |
(チェックなし) |
|
回復 |
最初のエラー |
何もしない |
次のエラー |
何もしない |
|
その後のエラー |
何もしない |
|
エラーカウントのリセット |
0(日後に行う) |
|
依存関係 |
− |
依存関係なし |
- (凡例)
-
−:該当しません。
OSを起動する際にトランザクションリカバリサービスを自動的に起動させたい場合は,「スタートアップの種類」を変更してください。トランザクションリカバリサービスに障害が発生した場合にトランザクションリカバリサービスを自動的に再起動させたいときは,「最初のエラー」,「次のエラー」,「その後のエラー」および「エラーカウントのリセット」を,それぞれ必要に応じて変更してください。
「スタートアップの種類」,「最初のエラー」,「次のエラー」,「その後のエラー」および「エラーカウントのリセット」以外の項目は変更しないでください。変更した場合,トランザクションリカバリサービスが正常に動作しないことがあります。
トランザクションリカバリサービスが提供する機能について説明します。
(1) 未決着トランザクションの回復
トランザクションリカバリサービスは,トランザクションリカバリサービスの開始時とアプリケーションドメイン終了の検知時に,未決着トランザクションを回復します。アプリケーションドメイン終了の検知については「(2) アプリケーションドメインの監視」を参照してください。
未決着トランザクションの回復の流れを次の図に示します。
|
トランザクションリカバリサービスは,トランザクションリカバリサービスの開始時とアプリケーションドメイン終了の検知時に,OpenTP1のXAリソースサービスから未決着トランザクションの回復情報を取得し,その回復情報を基にMSDTCに対してトランザクションの再参加を行います。そのあとで,アプリケーションで失敗した処理要求をMSDTCから受けたトランザクションリカバリサービスが,トランザクションの処理を完了させます。トランザクションリカバリサービスがトランザクションの完了に失敗した場合は,トランザクションリカバリサービスが再度トランザクションの回復を試みます。
OpenTP1が未決着トランザクションの回復情報の取得やトランザクションの再参加に失敗した場合は,一定間隔で回復情報の取得を再度試みます。この間隔は,<recoveryService>要素のrecoverRetryInterval属性で指定します。
(2) アプリケーションドメインの監視
トランザクションリカバリサービスは,MSDTC連携機能を使用するConnector .NETのアプリケーションドメインを監視します。トランザクションリカバリサービスの監視下にあるアプリケーションドメインが終了した場合,終了したアプリケーションドメインで未決着となっていたトランザクションを回復します。アプリケーションドメインの監視の流れを次の図に示します。
|
アプリケーションドメインの監視は,アプリケーションドメインでトランザクションとして扱われる最初のサービス要求時に自動的に開始されます。監視が開始されてからトランザクションリカバリサービスがダウンして,一定時間経過後にトランザクションリカバリサービスが復旧していた場合は,トランザクションとして扱われる最初のサービス要求時に再度監視が開始されます。アプリケーションドメインの監視は一定間隔で行われます。この間隔は,<recoveryService>要素のappDomainCheckInterval属性で指定します。この間隔がアプリケーションダウンなどが発生してからトランザクションの回復処理が行われるまでの最大時間となります。
トランザクションリカバリサービスは,アプリケーションドメインの終了を検知すると,OpenTP1のXAリソースサービスから未決着トランザクションの回復情報を取得し,その回復情報を基にMSDTCに対してトランザクションの再参加を行います。
コンソールアプリケーションなどでトランザクション範囲内の処理が終了し,コミットやロールバックの処理要求が完了する前にアプリケーションのプロセスが終了した場合は,トランザクションリカバリサービスがトランザクションのコミットやロールバックの処理を完了させます。
(3) 未決着トランザクションの確認処理
トランザクションリカバリサービスは,アプリケーションドメインの監視および未決着トランザクションの回復によってトランザクションの回復処理を完了したあとで,OpenTP1に未決着トランザクションが存在しないかどうかを再確認します。これは,トランザクションリカバリサービスが回復処理を実行したタイミングで,OpenTP1に処理中のトランザクションが存在した場合にOpenTP1に未決着トランザクションが残ることを防止するためです。この確認で未決着トランザクションが存在した場合は,トランザクションの回復処理を行います。この確認処理の間隔は<recoveryService>要素のrecoverCheckInterval属性で,確認処理の回数は<recoveryService>要素のrecoverCheckCount属性で指定します。ただし,指定した回数の確認処理が終了する前に,新たに未決着トランザクションが存在する旨の通知を受けた場合やアプリケーションの終了を検知した場合は,確認処理を終了します。