このドキュメントでは、次のトピックについて説明します。
DESCRIPTOR パラメータでは、ファイルカップリングのベースを提供するため、各ファイルに 1 つのディスクリプタを定義します。 この場合、サブディスクリプタまたはスーパーディスクリプタも使用できます。これらのディスクリプタは、マルチプルバリューフィールドとして定義したり、マルチプルバリューフィールドから派生させることができます。 指定されたディスクリプタは、ピリオディックグループ内に含まれている必要はありません。また、ピリオディックグループから派生したものである必要もありません。 ディスクリプタには異なる名前を付けることができますが、長さおよびフォーマット定義は同じである必要があります。
FILES パラメータは、カップリングする 2 つのファイルを指定します。 各ファイルの番号は 255 以下である必要があります。 現在互いにカップリングされているファイルを指定することはできません。
SORTSIZE は、ソートデータセットまたは R1/2 データセット(SORTR2 は VSE 下ではサポートされません)に対して使用できるスペースを指定するものです。 値はシリンダ(数値のみ)か、またはブロック(数値に "B" を伴う)で指定します。 ブロックで指定する場合には、それらがシリンダの総数に等しくなっていなければなりません。 SORTSIZE パラメータは必須です。 ソートスペース見積りに関する詳細情報は『Adabas DBA リファレンスマニュアル』を参照してください。
TEMPSIZE は、中間データセットで利用できるスペースを定義します。 値はシリンダ(数値のみ)か、またはブロック(数値に "B" を伴う)で指定します。 このパラメータは必須です。
LPB は、内部プリフェッチバッファの大きさをバイト単位で指定するものです。 指定可能な最大値は、32,760 バイトです。 デフォルト値は、ADARUN LU パラメータに依存し、この LU パラメータがあまりに小さい場合には ADAINV によって指定された LPB 値もよりも少なくなることがあります。
LWP は、ディスクリプタ値のソートに使用されるワークプールの大きさを指定します。 この値は、数値のみでバイト単位で指定するか、あるいは数値の後に "K" を付けてキロバイト単位で指定します。 値が指定されない場合は、デフォルトで 1048576 バイト(または 1024K)が設定されます。ただし、ディスクリプタが非常に長いか、またはディスクリプタの数が著しく多いファイルに対して ADAINV の実行時間を短くする場合には、より大きな値を LWP に設定すべきです。 ソートデータセットとの問題を避けるため、比較的小規模なファイルにディスクリプタを定義する場合には、LWP 値を小さめに指定してください。
最小ワークプールの大きさは、ソートデータセットのデバイスタイプごとに異なります。
ソートデバイス | 最小 LWP | 最小 LWP |
---|---|---|
バイト | キロバイト | |
2000 | 106496 | 104K |
2314 | 090112 | 88K |
3375 | 131072 | 128K |
3380 | 139264 | 136K |
3390 | 159744 | 156K |
機能の実行中にエラーになると、ユーティリティは、エラーメッセージを出力してユーザーアベンド 34(ダンプあり)またはユーザーアベンド 35(ダンプなし)で終了します。
NOUSERABEND を指定すると、ユーティリティは、エラーメッセージを出力してもアベンドしません。 代りに、メッセージ "utility TERMINATED DUE TO ERROR CONDITION"(エラーのためユーティリティを終了します)を表示してコンディションコード 20 で終了します。
カップリングするファイルの片方または両方がセキュリティ保護されている場合は、ファイルの有効なパスワードをこのパラメータで指定する必要があります。 両方のファイルがパスワード保護されている場合は、両方のパスワードが同じである必要があります。
ADAINV はディスクリプタ値のソートにソーデータセットを使用します。 SORTDEV パラメータは、このソートデータセットに使用するデバイスタイプを示します。 このパラメータは、使用するデバイスタイプが ADARUN DEVICE パラメータの指定デバイスと異なる場合にのみ必要です。 SORTDEV に関する特定の注意事項については、z/OS ジョブ制御情報を参照してください。
ADAINV は中間データセットを使用して中間データを格納します。 TEMPDEV パラメータは、このデータセットに使用するデバイスタイプを示します。 このパラメータは、使用するデバイスタイプが ADARUN DEVICE パラメータの指定デバイスと異なる場合にのみ必要です。
TEST パラメータは、処理を実際には行わずに構文のみをテストします。 指定したパラメータの構文だけがテストされ、値や変数の正当性はテストされません。
ADAINV COUPLE FILES=3,4,DESCRIPTOR='AA,BB'
ファイル 3 および 4 をカップリングします。 ファイル 3 のディスクリプタ AA およびファイル 4 のディスクリプタ BB を、カップリングのベースとして使用します。
中間 データセットは、カップリングするファイルごとに生成されます。
ファイルに含まれるレコードごとに、エントリがデータセットに書き込まれます。 各エントリには、レコードの ISN(ファイルに定義された ISNSIZE に応じて 3 または 4 バイト)、およびカップリングのベースとして使用されるディスクリプタの値(圧縮形式)が含まれます。 NU オプションを指定して定義されたディスクリプタの場合、ディスクリプタに空値が含まれるレコードに関してはエントリが書き込まれません。 ディスクリプタがマルチプルバリューフィールドの場合は、それぞれの値についてエントリが書き込まれます。
それぞれの中間データセットに必要なスペースは、各 Adabas ファイルに含まれているレコード数、および各レコードのカップリングディスクリプタに存在する異なる値の長さと個数の関数で求められます。
次の式を使用して、中間データセットに必要なスペースを計算します。
SP = RECS x UV x (ISNSIZE + (AVLEN x 4)
ここでは次の内容を表しています。
SP | 必要な中間データセットのスペース(バイト単位)。 |
RECS | カップリングされたファイルに存在するレコード数。 |
UV | 各レコードに存在するディスクリプタのユニーク値の平均個数。 NU オプションを指定しないでディスクリプタを定義した場合、UV は 1 以下になります。 NU オプションを指定してディスクリプタを定義した場合、UV は各レコードに存在する値の平均個数から空値を含むレコードの割合を引いた値になります。 例えば、各レコードに存在する値の平均個数が 1 で、値の 20 %が空値の場合、UV は 1 - 0.2 = 0.8 になります。 |
ISNSIZE | ファイルに存在する ISN 長(3 または 4 バイト)。 |
AVLEN | ディスクリプタの各値の(圧縮後の)平均長。 |
カップリングするファイルに 3 バイトの ISN が存在し、50,000 個のレコードが含まれています。 カップリングのベースとして使用するディスクリプタには、レコードあたり 1 つの値(空値なし)が含まれ、値の平均長は 5 バイトです。
SP = 50,000 x 1 x (3 + (5 + 1)) SP = 50,000 x 9 SP = 450,000 bytes
ADAINV では、2 つのリストのマッチング、結果として得られる各リストのソート、アソシエータカップリングリストへの各リストの書き込みが行われます。
中間データセットには、ファイルごとにマッチング(カップリング)された ISN が格納されます。 検出されたマッチングごとに、エントリが中間データセットに書き込まれます。 エントリには、マッチング値が存在する各レコードの ISN が含まれます。
ADAINV では、ソートエリアを使用して中間データセットに格納されたエントリがソートされ、ソートされたエントリがファイル A のアソシエータカップリングリストに書き込まれます。 ファイル B についても同じ処理が繰り返されます。
中間エリアに必要なサイズは、ファイルのカップリングに使用するディスクリプタに対して、2 つのファイルに存在するマッチング値の個数によって異なります。 ファイルに定義された ISNSIZE に応じて、それぞれのマッチングに 6 または 8 バイト必要です。
一般的に、中間エリアに必要なスペースの 2 倍の量がソートエリアに必要です。
ファイルカップリングは階層的ではなく双方向です。つまり、もう片方のファイルにカップリングされる ISN が存在するリストごとに、2 つのカップリングリストが作成されます。
カップリングする 2 つのファイルにディスクリプタ AA および BB がそれぞれ含まれているとします。 各ファイルの最初の 5 レコードの値は、次のようになります。
ファイル A | ファイル B | ||
---|---|---|---|
ISN | フィールド AA の値 | ISN | フィールド BB の値 |
1 2 3 4 5 |
20 25 27 30 40 |
1 2 3 4 5 |
18 40 25 20 20 |
カップリングのベース AA および BB を使用して 2 つのファイルをカップリングした結果、カップリングリストは次のようになります。
ファイル A | ファイル B | ||||
---|---|---|---|---|---|
ISN in FILE B* | COUNT | COUPLED ISN | ISN in FILE A* | COUNT | COUPLED ISN |
2 3 4 5 |
1 1 1 1 |
5 2 1 1 |
1 2 5 |
2 1 1 |
4,5 3 2 |
* カップリングされたレコードの個数と ISN を判断するため、内部的にはこのフィールドが Adabas でディスクリプタのように使用されます。
カップリングリストに必要な合計スペースは、カップリングのベースとして使用される 2 つのディスクリプタ間に存在する共通値の個数によって異なります。
それぞれの共通値のスペース要件は、次のように見積もることができます。
SP = 4a + 4b + 6ab
ここでは次の内容を表しています。
SP | 1 つの共通値のスペース要件(バイト単位) |
a | ファイル A に存在する共通値を持つレコード数 |
b | ファイル B に存在する共通値を持つレコード数 |
カップリングリストに必要な合計スペースは、それぞれの共通値のスペース要件の合計になります。
前に定義したサンプルファイル A および B を使用すると、共通値ごとのスペース要件は次のようになります。
共通値 | スペース要件 |
---|---|
20 | SP = 4(2) + 4(1) + 6(2 • 1) = 24 バイト |
25 | SP = 4(1) + 4(1) + 6(1 • 1) = 14 バイト |
40 | SP = 4(1) + 4(1) + 6(1 • 1) = 14 バイト |
必要な合計スペース = 24 + 14 + 14 = 52 バイト
フィールド ID で 2 つのファイルをカップリングしているとします。 ID の値は各ファイルでユニークです。 カップリングされたファイルには 5,000 個の共通値があります。
共通値 | スペース要件 |
---|---|
n | 1 つの共通値に対して SP = 4(1) + 4(1) + 6(1) SP = 14 バイト |
共通値は 5,000 個あり、それぞれに 14 バイト必要です。 カップリングリストに必要な合計スペースは 70,000 バイトになります。
ADAINV で作成されたカップリングリストは、カップリングされたファイルごとにノーマルインデックス(NI)およびアッパーインデックス(UI)に含まれます。 現在ファイルに割り当てられている NI または UI コンポーネントの論理エクステントが ADAINV の実行中にすべて使用されると、追加エクステントをコンポーネントに割り当てようとします。 割り当てられるエクステントのサイズは、コンポーネントに現在割り当てられているすべての論理エクステントの現在の合計サイズの 25 %です。 スペースが不足しているか、またはコンポーネントに割り当て済みのエクステントが最大数に達していると、ADAINV はエラーメッセージを出力して終了します。