Adabas マルチクライアント機能は、複数のユーザーまたはグループのレコードを 1 つの Adabas ファイルに格納します。 この機能は、ファイルレベルで指定します。 マルチクライアント機能では、各レコ―ドにオーナー ID をつけることで、物理ファイルを複数の論理ファイルに分割します。 各ユーザーは、ユーザーのオーナー ID に関連付けられたレコードのサブセットだけにアクセスできます。 そのファイルは引き続き、1 つの物理 Adabas ファイルとして維持されます。
Adabas ニュークリアスは、マルチクライアントファイルへの全データベース要求を処理します。
このドキュメントでは、次のトピックについて説明します。
マルチクライアントファイル中の各レコードには、それぞれオーナーが存在します。オーナーは各レコードにつけられた内部オーナー ID によって識別されます(RACF または CA-TOP SECRET などの外部セキュリティパッケージについても、Natural ETID または LOGON ID のどちらかによって識別されます)。 オーナー ID は、ユーザー ID に対して割り当てられます。 1 つのユーザー ID は、1 つのオーナー ID しか持つことができませんが、同じオーナー ID が複数のユーザーに所属していてもかまいません。
次の表は、ETID/オーナー ID の関係の例を示しています。
| ETID | オーナー ID | 説明 |
|---|---|---|
| USER1 | 1 | 複数のユーザーが同じオーナー ID を使用できます。
この例では、USER1、USER2、および USER3 が同じオーナー ID を共用しています。つまり、同じレコードを共用しています。 |
| USER2 | 1 | |
| USER3 | 1 | |
| ... | ||
| USER4 | 2 |
ユーザー ID とオーナー ID との関係は、Adabas チェックポイントファイルのプロファイルテーブルに格納されています。 マルチクライアント機能に欠くことのできない Adabas Online System/基本サービス(AOS)を使って、DBA はプロファイルテーブルを維持します。
ユーザー ID とオーナー ID との関係は、1:1 または n:1 です。1 つのオーナー ID に対して単一のユーザーかユーザーグループを割り当てることができます。 レコードの分離は、常にオーナー ID のレベルで行われます。
オーナー ID は、8 バイト(英数字)以下の固定長です。 オーナー ID の長さは、ファイル作成時にユーザーによって定義されます。長さの変更は、マルチクライアントファイルのアンロードやリロードによってのみ可能です。 各オーナー ID の長さは、ファイルに指定された長さ以下でなければなりません。そうでない場合は、ゼロ以外のレスポンスコードが発生します。 スペースの使用効率が悪くならないように、必要以上に長いオーナー ID は避けるべきです。
次の表に、8 つのファイルレコードから成るグループの、オーナーの分離例を示します。
| ISN | オーナー ID | レコード | 説明 |
|---|---|---|---|
| 1 | 1 | データ | さまざまなユーザーが所有するレコードの入った物理 Adabas ファイルの例 |
| 2 | 2 | データ | |
| 3 | 1 | データ | |
| 4 | 3 | データ | |
| 5 | 2 | データ | |
| 6 | 3 | データ | |
| 7 | - データなし - | ||
| 8 | 1 | データ |
| ISN | レコード | ISN | レコード |
|---|---|---|---|
| 1 | データ | 1 | - データなし - |
| 2 | - データなし - | 2 | データ |
| 3 | データ | 3 | - データなし - |
| 4 | - データなし - | 4 | - データなし - |
| 5 | - データなし - | 5 | データ |
| 6 | - データなし - | 6 | - データなし - |
| 7 | - データなし - | 7 | - データなし - |
| 8 | データ | 8 | - データなし - |
| オーナー ID=1 のユーザーから見たファイル | オーナー ID=2 のユーザーから見たファイル | ||
スーパーユーザーオーナー ID は、マルチクライアントファイル中の全レコードへのアクセスを提供します。 スーパーユーザーオーナー ID は、アスタリスク(*)で始まります。 このようなオーナー ID を持ったユーザーは、他のすべてのオーナー ID と一致するとみなされ、ファイル中の全レコードを読み込むことができます。 1 つのマルチクライアントファイルに対して、アスタリスクで始まり、同等の特権を持った複数のスーパーユーザーオーナー ID を定義できます。
スーパーユーザーオーナー ID は、Lx 読み込みコマンドと非ディスクリプタ検索(Sx)コマンドにのみ適用されます。 スーパーユーザーによるディスクリプタ検索コマンドは、スーパーユーザーのオーナー ID を持ったレコードだけを返します。 スーパーユーザーが格納したデータレコードやインデックス値は、スーパーユーザーのオーナー ID でラベル付けされます。
注意:
スーパーユーザーが L3 または L9 コマンドを発行した場合、開始値オプションは無視されます。すなわち、Adabas は常に特定ディスクリプタの先頭値から読み込みを開始します。
マルチクライアント環境で使用するために既存アプリケーションプログラムを変更する必要はありません。しかし、マルチクライアントファイルにアクセスするユーザーは、各オープン(OP)コールの Adabas コントロールブロックのアディション 1 フィールドにユーザー ID を指定しなければなりません。 これにより、Adabas はチェックポイントファイルからオーナー ID を取り出すことができます。 ユーザー ID を指定しなかった場合、アプリケーションプログラムは、マルチクライアントファイルにアクセスするのか、あるいは標準の Adabas ファイルなのかを認識することもできません。
ソフトカップリングのマルチクライアントサポートがあります。
マルチクライアントファイルのデータやインデックスの構造は、標準 Adabas ファイルの場合とは異なっています。
標準ファイルのデータストレージ(DATA)レコードの構造は、次のとおりです。

マルチクライアントファイルのデータストレージレコードの構造は、次のとおりです。

マルチクライアントファイルのすべてのノーマルインデックス値とアッパーインデックス値の先頭にオーナー ID がついています。

次の表は、マルチクライアントのインデックスの構造を示しています。 1 つのディスクリプタ値が複数のデータストレージレコードをポイントする場合、Adabas は後続に ISN リストを付け、その拡張インデックス値を 1 回だけ格納します。 同一ディスクリプタ値に複数のオーナー ID がある場合は、格納時にインデックスに複数のエントリが作成されます。
| ISN | オーナー ID | NAME | |
|---|---|---|---|
| 1 | 1 | SMITH | フィールド NAME はディスクリプタ |
| 2 | 2 | SMITH | |
| 3 | 1 | SMITH | |
| 4 | 3 | JONES | |
| 5 | 2 | JONES | |
| 6 | 3 | HARRIS | |
| 7 | 格納されない | ||
| 8 | 1 | HARRIS |
| オーナー ID | DE 値 | ISN カウント | ISN リスト | |
|---|---|---|---|---|
| 1 | HARRIS | 1 | 8 | ディスクリプタ NAME のインデックス。 値のソート順:オーナー ID |(DE 値) |
| 1 | SMITH | 2 | 1,3 | |
| 2 | JONES | 1 | 5 | |
| 2 | SMITH | 1 | 2 | |
| 3 | HARRIS | 1 | 6 | |
| 3 | JONES | 1 | 4 |
注意:
マルチクライアント機能は、検索(S1、S2)、論理順読み込み(L3)、およびヒストグラム(L9)コマンドに対していっさいの処理オーバーヘッドを付加しません。 インデックス構造によって特定レコードの選択が可能になり、選択後のデータストレージにはいっさいの処理もありません。
データストレージ上で選択を行う場合、Adabas はレコードを読み込んでオーナー ID をチェックしなければなりません。 レコードのオーナー ID が、現在のユーザーのオーナー ID と一致しなければ、そのレコードは読み飛ばされます。 これにより、物理順読み込み(L2)や ISN による読み込み(I オプション付きの L1)コマンド、または非ディスクリプタ検索コマンドが遅くなることがあります。
オーナー ID は、Adabas プロファイルテーブルに格納されたユーザーのプロファイルレコードの一部分です。 プロファイルは、Adabas Online Syetem を使って維持されます。 詳しくは Adabas Online System のドキュメントを参照してください。
マルチクライアントファイルをコールすると、エラーの発生を示す、次のようなゼロ以外の Adabas レスポンスコードが発生する可能性があります。
| 読み込みおよび更新処理 | レコードに該当しないオーナー ID を使って、マルチクライアントファイルのレコードの読み込みまたは変更を試みると、読み込みまたは更新処理の種類に応じてレスポンスコード 3 または 113 のどちらかが返されます。 |
| レコード追加処理 | オーナー ID が空白であったり、マルチクライアントファイルに割り当てられたオーナー ID 長よりも長すぎたりすると、新レコードの追加を試みたときに、レスポンスコード 68 が返されます。 |
| 空白またはオーナー ID の欠如 | ユーザーのオーナー ID が空白の場合や指定されていない場合、マルチクライアントファイルにアクセスすると、レスポンスコード 3 または 113 が返されます。 |
通常、マルチクライアントファイルは Adabas ユーティリティ処理に対して透過的です。 ADALOD や ADAULD ユーティリティの特殊な機能は、標準環境からマルチクライアント環境へのアプリケーションの移行をサポートします。
ADALOD LOAD 機能の 2 つのパラメータ、LOWNERID と ETID は、マルチクライアントファイルをサポートしています。 これらのパラメータが組み合わされて、オーナー ID の定義と、およびファイルがマルチクライアントファイルかどうかの判断が行われます。
LOWNERID は、マルチクライアントファイルの各レコードに割り当てる内部オーナー ID 値の長さを指定します。
有効な長さは 0~8 です。 ETID パラメータと組み合わせると、LOWNERID パラメータは、標準ファイルをマルチクライアントファイルとして再ロードしたり、ファイルのオーナー ID 長を変更したり、ファイルのレコードからオーナー ID を削除するために使用できます。
LOWNERID パラメータを指定しなければ、入力ファイル用のオーナー ID の長さは、引き続き同じ長さになります。
ETID は、マルチクライアントファイルの中にロードされる全レコードに新しいオーナー ID を割り当てます。入力ファイルにオーナー ID が含まれていない場合、つまり、マルチクライアントソースファイルからアンロードした入力ファイルでない場合、ETID パラメータを必ず指定しなければなりません。
次の表は、LOWNERID と ETID の設定値の効果を示しています。
| LOWNERID パラメータ設定 | 入力ファイルのオーナー ID 長 | |
|---|---|---|
| 0 | 2 | |
| 0 | 非マルチクライアントファイルとして保持 | 非マルチクライアントファイルに変換します。 |
| 1 | マルチクライアントファイルの設定(ETID) | オーナー ID 長の縮小 |
| 2 | マルチクライアントファイルの設定(ETID) | オーナー ID 長の保持 |
| 3 | マルチクライアントファイルの設定(ETID) | オーナー ID 長の拡張 |
| (LOWNERID が指定されていない) | 非マルチクライアントファイルとして保持 | マルチクライアントファイルとして保持 |
上の表で、"オーナー ID 長が 0" の欄に、"(ETID)" と示されている場合、ETID パラメータはロードするレコードのオーナーを識別するユーザー ID を指定しなければなりません。 レコードに割り当てられるオーナー ID は指定したユーザー ID のユーザープロファイルから取得します。 "オーナー ID 長が 2" の欄では、ETID パラメータはオプションです。ETID を省略すると、元のオーナー ID がそのまま保持されます。
注意:
ETID パラメータを使用する場合、ADALOD ユーティリティはアクティブニュークリアスを必要とします。 ニュークリアスは、ETID 値を内部オーナー ID 値に変換します。
UPDATE 機能を実行するとき、ADALOD は更新するファイルに以前から定義されていたオーナー ID 長を保持します。 追加するレコードのオーナー ID は、ファイルに対して定義されたオーナー ID 長に合わせて調節されます。 ロードレコードまたは新レコードのオーナー ID は、既存のオーナー ID スペースに収容されなければなりません。
ADALOD LOAD FILE=20,LOWNERID=2,NUMREC=0
ファイル 20 をマルチクライアントファイルとして作成します。 内部オーナー ID 長は 2 バイトですが、実オーナー ID は 1 つも指定されていません。 実際にファイルにはレコードが 1 つもロードされていません(NUMREC=0)。
ADALOD LOAD FILE=20,LOWNERID=2,ETID=USER1
ファイル 20 をマルチクライアントファイルとして作成し、すべてのレコードをユーザー USER1 用にロードします。 内部オーナー ID の長さは 2 バイトです。
ADALOD UPDATE FILE=20,ETID=USER2
大量の更新を実行してマルチクライアントファイルのファイル 20 にレコードを追加します。 新レコードはすべて USER2 用にロードします。
ADAULD ユーティリティは、Adabas ファイルからシーケンシャル出力ファイルにレコードをアンロードします。 この出力ファイルは、後続の ADALOD 処理への入力として使用できます。
マルチクライアントファイルをアンロードした場合、出力ファイルにはオーナー ID を伴ったすべてのアンロードレコードが入っています。 この情報は、後続の ADALOD 処理によって保持されるか、ADALOD ETID パラメータによって新情報に書き換えることができます。 アンロードファイルや新規にロードされたファイルの LOWNERID パラメータ値が異なる場合、それらは自動的に ADALOD によって調節されます。
ADAULD の ETID パラメータを使い、UNLOAD 処理を指定ユーザーの所有するレコードだけに限定することができます。 ETID パラメータを指定しなければ、全レコードをアンロードします。 マルチクライアントファイルに対して SELCRIT/SELVAL パラメータが指定されている場合は、必ず ETID パラメータも指定しなければなりません。
ADAULD UNLOAD FILE=20,ETID=USER1
USER1 が所有する全レコードを物理順にアンロードします。
ADACMP ユーティリティは、シーケンシャル入力ファイルのデータを圧縮して Adabas 内部構造の中に入れるか、Adabas データをシーケンシャルユーザーファイルに圧縮解除します。 COMPRESS 機能は、標準ファイルとマルチクライアントファイルをまったく区別せずに、まったく同じ方法で処理します。 INFILE パラメータでマルチクライアントファイルを指定し正しい ETID 値を指定すれば、DECOMPRESS 機能は自動的に選択したレコードを圧縮解除します。
DECOMPRESS 機能は、オーナー ID(ある場合)をスキップします。 マルチクライアントファイルの DECOMPRESS 処理の出力には、オーナー ID も ETID 情報も含まれていません。
DECOMPRESS 機能に対して INFILE パラメータがマルチクライアントファイルを指定した場合、ETID パラメータを使用した特定ユーザーのレコードだけに圧縮解除を制限することができます。 このとき、ADACMP は特定ユーザーのレコードを読み込んで圧縮解除します。 マルチクライアントファイルの圧縮解除時に ETID パラメータを指定しなければ、ファイル内のすべてのレコードが圧縮解除されます。
ADACMP DECOMPRESS INFILE=20,ETID=USER1
ファイル 20 の USER1 が所有するレコードを圧縮解除して、シーケンシャル出力ファイルに出力します。