分散トランザクション処理機能 OpenTP1 解説
複数のOpenTP1システムが,ノードをわたってテーブルを共用できる機能をISTサービスといいます。ISTサービスで使えるテーブルをISTテーブルといいます。ISTサービスを使うと,テーブルの実体がどのノードにあるかを意識しないで,UAPからデータを参照,更新できます。また,各ノードの業務状態を管理するために,メールとしてISTテーブルを使うこともできます。ただし,複数のノードにわたってデータを配布させる場合,次に示す条件の業務にはISTサービスはお勧めできません。
ISTテーブルを使う場合,各ノードのシステムにTP1/Shared Table Accessが組み込まれていることが前提となります。
ISTサービスの構成を次の図に示します。
ISTサービスを使用するには,ノード間のISTテーブル定義の指定を合わせてください。図4-21の場合,ノードA,ノードB,およびノードCでISTテーブル定義に指定したテーブル名が合っていないため,予期しないテーブル情報を受信したとして,ノードAおよびノードBで,OpenTP1が終了するまで定期的にKFCA25533-Wメッセージを出力し続けます。
ISTテーブルは,各ノードの共用メモリ上にあるテーブルです。テーブルの実体にあたるファイルはありません。そのため,UAPからISTテーブルへアクセスできるのは,オンライン中だけです。オフライン環境ではISTテーブルにはアクセスできません。
UAPからISTテーブルのデータを参照,更新するときは,レコード単位でアクセスします。ISTテーブルは,複数のレコードから構成されます。UAPの処理では,一つのレコードへアクセスすることも,複数のレコードを一括して指定してアクセスすることもできます。
UAPからISTテーブルへアクセスする手順については,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。
ISTテーブルへのアクセスは,トランザクションの関数でコミット,ロールバックできません。
ISTテーブルでは,UAPから呼び出した関数ごとに排他制御しています。データの入力から更新まで,ISTテーブルを占有する制御はしていません。そのため,一つのテーブルに複数のUAPからアクセスした場合でも,デッドロックが起こることはありません。
ISTサービスの効果的な運用例を次の図に示します。
図4-22 ISTサービスの効果的な運用例
図4-22では,ISTテーブルAはノードAだけが更新し,ISTテーブルBはノードBだけが更新します。それぞれのノードで更新したデータは,ISTサービスが各ノードに通知および反映するので,更新されたISTテーブルは,どのノードでも参照できます。このように,ISTテーブルを更新するノードを一つに限定した運用が効果的です。
例えば,ISTテーブルAには,ノードAのステータス情報を書き込み,ISTテーブルBには,ノードBのステータス情報を書き込みます。ノードCが更新できるISTテーブルCを作成し,ISTテーブルCにノードCのステータス情報を書き込めば,各ノードで,全ノードのステータス情報を参照できます。ただし,自ノードで更新したISTテーブルの他ノードへの通知が完了するまでに必要な通信時間があります。この通信時間内は最新の情報が未反映のため,古い情報を参照することがあります。
複数のノードでISTサービスを使う場合には,各ノードの時刻を合わせておく必要があります。ノード間で時刻が一致していないと,あるノードで更新したデータに対して,別のノードからの更新が反映されないことがあります。ISTサービスで複数のノードのISTレコード(ISTテーブル中のレコード)を更新する処理の流れを次の図に示します。
図4-23 ISTレコードの更新処理
上記のように,ISTサービスでは,ISTレコードを更新するか,またはそのままとするかを,タイムスタンプを基に判断しています。次のような場合は,最新の更新データがISTレコードに反映されないことがあります。
All Rights Reserved. Copyright (C) 2006, 2012, Hitachi, Ltd.