Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 運用と操作


3.15.2 XAリソースサービスのトランザクション管理

XAリソースサービスは,TP1/Client/JまたはClient .NETからのトランザクション要求種別に従って,トランザクションの管理を開始したり終了したりします。また,TP1/Client/JまたはClient .NETから渡されるXAリソースサービスで連携するアプリケーションサーバのXID(トランザクション識別子)と,OpenTP1が管理しているXIDとを対応づけて,トランザクション情報を共用メモリ上で管理します。MSDTC連携機能を使用する場合は,RI(トランザクション回復情報)も管理します。RIとは,トランザクション決着処理で障害が発生した場合にトランザクションを回復するため情報で,トランザクション決着処理時にMSDTCが作成します。これらのトランザクションの状態は,必要に応じてXARファイルに記録されます。

〈この項の構成〉

(1) XAリソースサービスの運用

XAリソースサービスの運用を次の図に示します。

図3‒38 XAリソースサービスの運用

[図データ]

XAリソースサービスを使用する場合で次に示すときは,トランザクションが不正に残ることがあります。

(2) トランザクション情報の管理

J2EEで動作するアプリケーションサーバと連携する場合のトランザクション情報の管理を次の表に示します。

表3‒32 トランザクション情報の管理(J2EEで動作するアプリケーションサーバと連携する場合)

トランザクション要求種別

トランザクション情報の管理

トランザクションの状態変更(正常ケース)

開始

終了

ファイルのI/O

Start()

なし → Active

Call()

変化しない

End()

Active → Idle

Prepare()

Idle → Prepared

Idle → なし※1

Commit()

Prepared → なし※2

Idle → なし※3

Rollback()

Prepared → なし※2

Idle → なし※3

Recover()

変化しない

Forget()

Heuristically Completed → なし

(凡例)

○:処理を実行します。

−:処理を実行しません。

注※1

トランザクションブランチがread onlyの場合

注※2

2相コミット,またはロールバックの場合

注※3

1相コミット,またはロールバックの場合

.NET Frameworkアプリケーションと連携する場合のトランザクション情報の管理を次の表に示します。

表3‒33 トランザクション情報の管理(.NET Frameworkアプリケーションと連携する場合)

トランザクション要求種別

トランザクション情報の管理

トランザクションの状態変更

(正常ケース)

開始

終了

ファイルのI/O

Call()

なし → Active※1

変化しない

Prepare()

Active → Idle → Prepared

Active → Idle → なし※2

Commit()

Prepared → なし※3

Active → Idle → なし※4

Rollback()

Prepared → なし※3

Active → Idle → なし※4

Recover()

変化しない

Forget()

Heuristically Completed → なし

(凡例)

○:処理を実行します。

−:処理を実行しません。

注※1

トランザクション内で最初のCall()要求の場合

注※2

トランザクションブランチがread onlyの場合

注※3

2相コミット,またはロールバックの場合

注※4

1相コミット,またはロールバックの場合

(3) XARファイルの運用

XAリソースサービスは,必要に応じてトランザクション情報をXARファイルに格納します。XARファイルは,XAリソースサービスの正常開始処理で初期化されます。

(a) XARファイルの作成

XARファイルはxarinitコマンドで作成し,xarrmコマンドで削除します。また,XARファイルのファイル情報はxarfillsコマンドで確認します。

XARファイルには,オンライン用XARファイルとバックアップ用XARファイルの二つが必要です。オンライン用XARファイルとバックアップ用XARファイルは,同一のレコード長およびレコード数にしてください。また,I/Oできるファイルにしてください。

通常はオンライン用XARファイルを使用し,オンライン用XARファイルに障害が発生した場合,バックアップ用XARファイルに自動的にスワップします。障害発生を考慮して,オンライン用XARファイルとバックアップ用XARファイルは異なるディスクボリュームに格納してください。

XARファイルは,一つのトランザクションブランチに対して1レコードを使用します。そのため,XARファイルには,同時に起動するトランザクションブランチ数(トランザクションサービス定義のtrn_tran_process_countオペランドの値)以上のレコードが必要です。

  • J2EEで動作するアプリケーションサーバと連携する場合

    XARファイルの1レコード情報は512バイトです。キャラクタ型スペシャルファイルを使用する場合,OpenTP1ファイルシステム構築時にfilmkfsコマンドの-sオプションで指定したセクタ長の単位でファイルのI/Oを行います。そのため,OpenTP1ファイルシステムのセクタ長に512バイトを指定することをお勧めします。ただし,OSによっては,セクタ長に指定できる値の最小値が512バイトよりも大きいものがあります(HP-UXの場合1024バイト)。そのようなOSのOpenTP1ファイルシステムのセクタ長には,指定できる最小値を指定することをお勧めします。なお,指定値は512バイトの整数倍にしてください。UNIXファイルシステムを使用する場合,ファイルのI/Oの単位には512バイトが仮定されます。

  • .NET Frameworkアプリケーションと連携する場合

    MSDTC連携機能を使用する場合,XARファイルのレコード長に1024バイト以上を指定することをお勧めします。これは,RIのサイズがMSDTCが動作する環境に依存するため,環境によってはXARファイルのレコード長の不足が原因となってトランザクション決着処理に失敗することがあるためです。

    XARファイルのレコード長(xarinitコマンドの-sオプションで指定)には,OpenTP1ファイルシステムのセクタ長の倍数を指定してください。XARファイルに格納できる最大RIサイズは,xarfillsコマンドまたはxarlsコマンドで確認できます。

    XARファイルのレコード長の不足が原因となってトランザクションの決着処理に失敗した場合は,次に示す手順でXARファイルを再作成してください。

    1. OpenTP1を停止します。

    2. KFCA32045-Eメッセージの「必要なXARファイルのレコード長」に表示された値をxarinitコマンドの-sオプションに指定して,XARファイルを再作成します。

    3. OpenTP1を正常開始します。

(b) XARファイルの指定

XAリソースサービス定義の定義コマンドxarfileでXARファイルを指定します。指定する前に,上記の条件に合うXARファイルをあらかじめ作成しておいてください。存在しないファイルをXARファイルに指定した場合,エラーになります。また,トランザクションサービス定義のtrn_tran_process_countオペランドの値よりもレコード数が少ないXARファイルを指定した場合もエラーになります。

定義コマンドxarfileの-t onlineオプションでオンライン用XARファイルを,-t backupオプションでバックアップ用XARファイルを指定します。必ず両方のXARファイルを指定してください。

(c) 注意事項

XARファイルの二重化機能はサポートしていません。また,次の状態ではXAリソースサービスはトランザクション情報を管理できません。

  • OpenTP1が未起動

  • リモートAPI機能が未起動

  • XAリソースサービスが未起動

  • XAリソースサービスが閉塞

XAリソースサービスは,オンライン用XARファイルとバックアップ用XARファイルの両方に障害が発生した場合に閉塞します。閉塞を解除するには,xarrlesコマンドを実行してください。詳細については,「3.15.4 XARファイルに障害が発生した場合の運用」を参照してください。

XAリソースサービスが管理するトランザクションの状態を表示するには,xarlsコマンドを実行してください。未決着のトランザクションを決着させるには,xarforceコマンドを実行してください。