Adabas では 2 種類のコントロールブロックがサポートされています。
Adabas コントロールブロック(ACB)は、Adabas バージョン 8 より前の Adabas リリースに導入されている従来からのコントロールブロックです。 Adabas 8 より前の Adabas リリースを使用している場合、アプリケーションによるダイレクトコールには ACB が使用されます。 Adabas 8 では ACB が完全にサポートされているため、Adabas 8 をインストールすれば、既存のアプリケーションを更新する必要はありません。
Adabas 8 以降のリリースでは、拡張 Adabas コントロールブロック(ACBX)を使用できます。 ACBX は、Adabas 8 から増量されたバッファサイズと、Adabas 8 で導入されたセグメントバッファに対応しています。 Adabas 8(以降)がインストールされている場合、アプリケーションからのダイレクトコールに ACBX を使用できます。 それ以外の場合は、使用できません。
コントロールブロックの各フィールドの使用法については、「コマンド」で各 Adabas コマンドの説明を参照してください。 今後の Adabas リリースとユーザープログラムとの互換性を確保するため、特定のコマンドによって使用されていないすべてのコントロールブロックフィールドは、そのフィールドタイプに応じてゼロまたは空白に設定する必要があります。
コントロールブロック内の各フィールドの位置は固定です。 また、コントロールブロックの値はすべて、フィールドに定義されているデータタイプで入力する必要があります。 例えば、ISN フィールドはバイナリ形式であるため、このフィールドの値はバイナリ形式で入力する必要があります。
注意:
このドキュメントでは、次のトピックについて説明します。
Adabas コントロールブロック(ACB)の長さは 80 バイトです。 このセクションでは、次のトピックについて説明します。
次の表は、ACB のフォーマットの説明です。 ダイレクトコールが開始される前に、未使用の ACB フィールドにバイナリの 0 を設定することをお勧めします。
DSECT 名 | フィールド | コントロールブロックの位置 | オフセット | 長さ(バイト) | フォーマット |
---|---|---|---|---|---|
ACBTYPE | コールタイプ | 1 | 00 | 1 | バイナリ |
予約 | (予約) | 2 | 01 | 1 | バイナリ |
ACBCMD | コマンドコード | 3~4 | 02 | 2 | 英数字 |
ACBCID | コマンド ID | 5~8 | 04 | 4 | 英数字/バイナリ |
ACBFNR | ファイル番号 | 9~10 | 08 | 2 | バイナリ |
ACBRSP | レスポンスコード | 11~12 | 0A | 2 | バイナリ |
ACBISN | ISN | 13~16 | 0C | 4 | バイナリ |
ACBISL | ISN 下限 | 17~20 | 10 | 4 | バイナリ |
ACBISQ | ISN 数 | 21~24 | 14 | 4 | バイナリ |
ACBFBL | フォーマットバッファ長 | 25~26 | 18 | 2 | バイナリ |
ACBRBL | レコードバッファ長 | 27~28 | 1A | 2 | バイナリ |
ACBSBL | サーチバッファ長 | 29‐30 | 1C | 2 | バイナリ |
ACBVBL | バリューバッファ長 | 31‐32 | 1E | 2 | バイナリ |
ACBIBL | ISN バッファ長 | 33~34 | 20 | 2 | バイナリ |
ACBCOP1 | コマンドオプション 1 | 35 | 22 | 1 | 英数字 |
ACBCOP2 | コマンドオプション 2 | 36 | 23 | 1 | 英数字 |
ACBADD1 | アディション 1 | 37~44 | 24 | 8 | 英数字/バイナリ |
ACBADD2 | アディション 2 | 45~48 | 2C | 4 | 英数字/バイナリ |
ACBADD3 | アディション 3 | 49~56 | 30 | 8 | 英数字 |
ACBADD4 | アディション 4 | 57~64 | 38 | 8 | 英数字 |
ACBADD5 | アディション 5 | 65~72 | 40 | 8 | 英数字/バイナリ |
ACBCMDT | コマンドタイム | 73~76 | 48 | 4 | バイナリ |
ACBUSER | ユーザーエリア | 77~80 | 4C | 4 | 該当なし |
コントロールブロックフィールドおよびバッファの内容は、Adabas コマンド(コール)を発行する前にセットしておかなければなりません。 また、Adabas は各コマンドの実行後、特定のフィールドおよびバッファに 1 つ以上の値またはコードを返します。
ダイレクトコールが開始される前に、未使用の ACB フィールドにバイナリの 0 を設定することをお勧めします。
ACB の各フィールドについては、このセクションで説明します。ACB フォーマットの表示順に記載されています。 この説明は、ほとんどの Adabas コマンドに当てはまりますが、一部の Adabas コマンドでは、この説明とは異なる目的でコントロールブロックフィールドが使用されます。 これらのフィールドが各 Adabas コマンドによってどのように使用されるかの詳細については、「コマンド」を参照してください。
Adabas コントロールブロック(ADACB)の先頭バイトは、Adabas API がどの処理を実行するかを判断するのに使用されます。 詳細については、「アプリケーションと Adabas のリンク」を参照してください。
論理リクエストの値は次のとおりです。
16 進数 | 説明 |
---|---|
X'00' | 1 バイトファイル番号(ファイル番号 1~255)または DBID |
X'30' | 2 バイトファイル番号(ファイル番号 1~65535)または DBID |
X'40' | 空白以上の値。 この値は、以前の Adabas リリースとの互換性を維持するため、論理アプリケーションコールとして受け入れられます。 |
注意:
ただし、X'44'、X'48'、および X'4C' のコールは、Software AG
用に予約されているため受け入れられません。
ADACB の先頭バイトのうち、上記以外の値はすべて、Software AG 用に予約されています。
アプリケーションでは ADACB の先頭バイトの値を各コールでリセットできるため、単一のアプリケーションに 1 バイトファイル番号と 2 バイトファイル番号(DBID)要求を混在させることができます。 この場合、コールタイプごとに ADACB のファイル番号(ACBFNR)とレスポンスコード(ACBRSP)のフィールドを適切に構成する必要があります。 詳細については、これらのフィールドの説明を参照してください。
2 バイトファイル番号を使用するアプリケーションでは、ADACB の先頭バイトに X'30'、ACBRSP フィールドに論理データベース ID、ACBFNR フィールドにファイル番号を設定することをお勧めします。 そうすることによって、アプリケーションは、使用中のファイル番号の値に関係なく、2 バイトのバイナリ整数としてデータベース ID とファイル番号の両方を処理することができます。
Software AG の Natural 言語でアプリケーションを作成すると、Natural が適切な値を指定するため、Adabas ACB の 1 バイト目にこの値を指定する必要はありません。
コマンドコードは、実行するコマンドを定義し、OP、A1、BT のように 2 文字の英数字で構成されます。
コマンド ID フィールドは、後続のコマンドで使用する論理読み込み順序、検索結果、および(オプション)デコードされたフォーマットを識別するために、多くの Adabas コマンドにより使用されます。 用途に応じて英数字またはバイナリのコマンド ID を使い分けたり、Adabas に新しいバイナリコマンド ID を生成するように要求することができます。 コマンド ID の詳細については、「プログラミング全般に関する考慮事項」を参照してください。 ET、CL および一部の OP コマンドの場合、Adabas は、バイナリのトランザクションシーケンス番号をコマンド ID フィールドに返します。
注意:
カップリングされた対のファイルで演算するコマンドの場合、このフィールドは、ISN
またはデータが返されるプライマリファイルを指定します。
ファイル番号は 1 または 2 バイトです。
1~255(1 バイト)のファイル番号に対応するアプリケーションプログラムから Adabas コマンドを発行する場合は、コントロールブロックを次のように作成します。
位置 | 処理内容 |
---|---|
1 | ADACB の先頭バイトに X'00' を配置します。 |
9 | ADACB の ACBFNR フィールドの 2 番目(右端)のバイトにファイル番号を配置します。 ACBFNR フィールドの 1 バイト目(左側)は、論理(データベース)ID または番号を格納するために使用します。 |
ACBFNR フィールドの先頭バイトが 0(B'0000 0000)の場合、Adabas API は DDCARD 入力データに指定された ADARUN カードのデータベース ID の値、またはオフセット X'80' でリンクルーチンにアセンブルされたデフォルトのデータベース ID 値を使用します。
Adabas は、論理リクエストで 255 より大きなファイル番号を使用できます。 256~5000(2 バイト)のファイル番号に対応するアプリケーションプログラムから Adabas コマンドを発行する場合は、コントロールブロックを次のように作成します。
位置 | 処理内容 |
---|---|
1 | ADACB の先頭バイトに X'30' を配置します。 |
9 | ファイル番号に ACBFNR の 2 バイトを使用し、データベース(論理)ID に ACBRSP の 2 バイトを使用します。 |
ACBRSP フィールドが 0 の場合、Adabas API は DDCARD 入力データに指定された ADARUN カードのデータベース ID の値、またはオフセット X'80' でリンクルーチンにアセンブルされたデフォルトのデータベース ID 値を使用します。
レスポンスコードフィールドには、2 バイトのデータベース ID が使用されます。
また、Adabas コマンドの完了時に必ず値が設定されます。 通常、正常終了はゼロのレスポンスコードで示されます。 レコードシーケンスまたは ISN シーケンスを処理する繰り返し可能なコマンドの場合には、レスポンスコードはエンドオブファイルまたはエンドオブ ISN リストを示します。 ゼロ以外のレスポンスコードは、『Adabas メッセージおよびコードマニュアル』に定義されています。
フィールドコマンドに応じて 4 バイトの ISN 値を指定します。Adabas は、必要に応じてコマンドが生成した ISN リストの先頭 ISN か、またはコマンドが読み込んだレコードの ISN を返します。
ISN 下限には、処理の開始位置となる ISN リストの開始点または範囲を指定します。 OP コマンドでは、オプションとしてユーザー指定の非アクテビティタイムアウトの値を、このフィールドに指定できます。 また、OP コマンドはこのフィールドに Adabas リリース情報も返します(アディション 5 フィールドの説明を参照)。 マルチフェッチオプションを使用した場合、このフィールドはプリフェッチレコードの最大カウント(オプション)を保持します。ゼロにすると制限なしになります。
コマンドから返される ISN のカウントです。 カウントは、ISN リストの ISN 数を合計した値、またはこの操作で大規模な ISN プールから ISN バッファ内に入る ISN 数の合計値です。 OP コマンドは、このフィールドを使用してオプションのユーザー指定トランザクションタイムリミットを指定し、ISN 数フィールドにシステム情報やコールタイプ情報のフラグを返します(アディション 5 フィールドの説明を参照)。 また、セキュリティバイバリューを使用する Sx コマンドは、検索条件を満たす ISN が複数存在した場合、このフィールドに 1 を設定します。
フォーマット、レコード、サーチ、バリュー、ISN の各バッファ長フィールドには、関連するバッファのサイズを指定します。 バッファサイズは通常、トランザクション全体で同じサイズに保たれます。 一部の ISN 関連操作では、ISN バッファサイズ値によって、コマンドによる ISN の処理方法が決まります。例えば、ISN バッファ長をゼロにすると、ISN 結果リストが Adabas ワークエリアに格納されます。 バッファが不要な Adabas コマンドの場合は、対応するバッファ長値にゼロを設定する必要があります。 また、バッファ長が制限されている場合もあります(例えば、マルチフェッチオプション)。詳細については、それぞれのコマンドの説明を参照してください。
コマンドオプション 1 フィールドおよびコマンドオプション 2 フィールドには、処理オプションを指定できます(ISN ホールド、コマンドレベルのプリフェッチ制御、返される ISN など)。
ISN リストを作成するディスクリプタの分類、またはカップリングした対のファイルの 2 番目のファイル番号など、その他のコマンド関連パラメータをアディション 1 フィールドに指定することが必要な場合があります。
An、Ln、Nn、S1/2/4 のどのコマンドでも、左端(上位)2 バイトに圧縮レコード長を返し、右端(下位)2 バイトにレコードバッファで選択されたフィールドの非圧縮長を返します。 OP(オープン)および RE(ET データの読み込み)コマンドは、このフィールドにトランザクションシーケンス番号を返します。 Entire Net-Work がインストールされている場合、一部のレスポンスコードでは、アディション 2 フィールドの左端 2 バイトに、障害が発生した Entire Net-Work ノードのノード ID が返されます。
コマンドの結果がニュークリアスレスポンスコードである場合、アディション 2 フィールドの下位(右端)2 バイト(47 と 48)にレスポンスコードの原因を識別する 16 進のサブコードが返されることがあります。 例えば、セッションを OP コマンドで開始していないものの ADARUN ステートメントに OPENRQ=YES を指定している場合、レスポンスコード 9、サブコード 66 が返され、この 2 バイトには 10 進数の 66 に相当する 16 進値 0042 が設定されます。 レスポンスコードとサブコードの詳細については、『Adabas メッセージおよびコードマニュアル』の「ニュークリアスレスポンスコード」の説明を参照してください。
アディション 3 フィールドには、パスワードで保護されたファイルにアクセスするのに必要なユーザーのパスワードを設定します。 ファイルが実際にパスワードで保護されている場合、コマンドの実行中にフィールド内のパスワードがスペース(空白)に置き換えられた後、ユーザープログラムに制御が戻されます。
アディション 4 フィールドには、暗合化(サイファ化)されたデータベースのデータファイルを読み書きする命令に合わせたサイファコードを設定する必要があります。 複数のコマンド ID を必要とするコマンドでは、サイファコードが不要であれば、コマンド ID の 1 つをこのフィールドに指定します。
ニュークリアスによって処理される Adabas コールは、Adabas リリース(バージョンおよび改訂)レベル番号およびデータベース ID をアディション 4 フィールドの下位(右端)3 バイトに次のような vrnnnn 形式で返します。
v | Adabas バージョン番号を示します。 |
r | Adabas リリース番号を示します。 |
nnnn | コールを処理した Adabas データベースの番号(16 進)を示します。 |
例えば、"741111" は、データベース 4369 の Adabas バージョン 7.4 ニュークリアスがコールを処理したことを示します。
アディション 5 フィールドの 1 バイト目の上位(左端)2 ビットは、ユニークなフォーマット ID かグローバルフォーマット ID のどちらが選択されているかを制御します。下位(右端)4 バイトまたは 8 バイトは、選択に応じてユニークなフォーマット ID かグローバルフォーマット ID のいずれかを格納することができます この機能の詳細については、「グローバルフォーマット ID の使用」を参照してください。 RC(コマンド ID の解放)コマンドでは、削除するグローバルフォーマット ID をこのフィールドに指定できます。 コールが完了すると、OP コマンドはオプションで指定された非アクティビティタイムアウトやトランザクションタイムアウトの値をアディション 5 フィールドに返します。
コマンドタイムフィールドは、ニュークリアスがコマンドを処理するのに要した経過時間を返すために、Adabas が使用します。 スレッドが Adabas I/O オペレーションなどのリソースを待機していた時間は含まれません。 時間は 16 マイクロ秒単位で、"Adabas スレッドタイム" と呼ばれ、 バイナリ形式です。
ユーザーエリアフィールドは、ユーザープログラムで使用できるように予約されています。 論理ユーザーコールを発行したとき、Adabas はユーザーエリアをいっさい読み書きしません。
今後の Adabas リリースとの互換性のため、未使用のコントロールブロックフィールドはフィールドデータタイプに合わせた空値を設定しておくことをお勧めします。
ACB DSECT は、分散 Adabas SRCE ライブラリのメンバ ADACB にあります。
さまざまなホスト言語のコントロールブロック構造を示すプログラミング例は、このマニュアルの「プログラミング例」に記載されています。
拡張 Adabas コントロールブロック ACBX は、Adabas コマンドのバッファサイズの増量に対応しています。 ACB では 80 バイトでしたが、192 バイトに増えています。 既存の非拡張 Adabas コントロールブロック(ACB)も引き続きサポートされ、既存のアプリケーションも機能しますが、Adabas 8 で導入された拡張機能を活用する場合には、新しい ACBX を使用する必要があります。 特に、Adabas 8 の長い(32K を超える)バッファまたはセグメント化されたバッファ(フォーマットバッファとレコードバッファの複数ペア、またはフォーマット、レコードおよびマルチフェッチの 3 つのバッファの複数セット)機能を使用している場合、ACBX を使用する必要があります。
ACBX を使用しない場合は、お使いのアプリケーションプログラムは既存のダイレクトコールインターフェイス(ACB)を使用した Adabas コールと新しいインターフェイス(ACBX)を使用したコールを自由に切り替ることができます。
次の表は、ACBX のフォーマットの説明です。 ダイレクトコールが開始される前に、未使用の ACBX フィールドにバイナリの 0 を設定することをお勧めします。
DSECT フィールド名 | フィールド | コントロールブロックの位置 | オフセット | 長さ(バイト) | フォーマット |
---|---|---|---|---|---|
ACBXTYP | コールタイプ | 1 | 00 | 1 | バイナリ |
ACBXRSV1 | 予約 1 | 2 | 01 | 1 | バイナリ |
ACBXVER | バージョンインジケータ | 3~4 | 02 | 2 | バイナリ |
ACBXLEN | ACBX 長 | 5~6 | 04 | 2 | バイナリ |
ACBXCMD | コマンドコード | 7~8 | 06 | 2 | 英数字 |
ACBXRSV2 | 予約 2 | 9~10 | 08 | 2 | バイナリ |
ACBXRSP | レスポンスコード | 11~12 | 0A | 2 | バイナリ |
ACBXCID | コマンド ID | 13~16 | 0C | 4 | 英数字/バイナリ |
ACBXDBID | データベース ID | 17~20 | 10 | 4 | 数値 |
ACBXFNR | ファイル番号 | 21~24 | 14 | 4 | 数値 |
ACBXISNG | 8 バイト ISN | 25~32 | 18 | 8 | 使用不可 |
ACBXISN | ISN | 29~32 | 1C | 4 | バイナリ |
ACBXISLG | 8 バイト(ISN 下限) | 33~40 | 20 | 8 | 使用不可 |
ACBXISL | ISN 下限 | 37~40 | 24 | 4 | バイナリ |
ACBXISQG | 8 バイト(ISN 数) | 41~48 | 28 | 8 | 使用不可 |
ACBXISQ | ISN 数 | 45~48 | 2C | 4 | バイナリ |
ACBXCOP1 | コマンドオプション 1 | 49 | 30 | 1 | 英数字 |
ACBXCOP2 | コマンドオプション 2 | 50 | 31 | 1 | 英数字 |
ACBXCOP3 | コマンドオプション 3 | 51 | 32 | 1 | 英数字 |
ACBXCOP4 | コマンドオプション 4 | 52 | 33 | 1 | 英数字 |
ACBXCOP5 | コマンドオプション 5 | 53 | 34 | 1 | 英数字 |
ACBXCOP6 | コマンドオプション 6 | 54 | 35 | 1 | 英数字 |
ACBXCOP7 | コマンドオプション 7 | 55 | 36 | 1 | 英数字 |
ACBXCOP8 | コマンドオプション 8 | 56 | 37 | 1 | 英数字 |
ACBXADD1 | アディション 1 | 57~64 | 38 | 8 | 英数字/バイナリ |
ACBXADD2 | アディション 2 | 65~68 | 40 | 4 | バイナリ |
ACBXADD3 | アディション 3 | 69~76 | 44 | 8 | 英数字/バイナリ |
ACBXADD4 | アディション 4 | 77~84 | 4C | 8 | 英数字 |
ACBXADD5 | アディション 5 | 85~92 | 54 | 8 | 英数字/バイナリ |
ACBXADD6 | アディション 6 | 93~100 | 5C | 8 | 英数字/バイナリ |
ACBXRSV3 | 予約 3 | 101~104 | 64 | 4 | バイナリ |
ACBXERRG | バッファ内のエラーオフセット(64 ビット) | 105~112 | 68 | 8 | 使用不可 |
ACBXERRA | バッファ内のエラーオフセット(32 ビット) | 109~112 | 6C | 4 | バイナリ |
ACBXERRB | エラー文字フィールド | 113~114 | 70 | 2 | 英数字 |
ACBXERRC | エラーサブコード | 115~116 | 72 | 2 | バイナリ |
ACBXERRD | エラーバッファ ID | 117 | 74 | 1 | 英数字 |
ACBXERRE | 予約済み(将来的に使用される予定) | 118 | 75 | 1 | 使用不可 |
ACBXERRF | エラーバッファシーケンス番号 | 119~120 | 76 | 2 | 数値 |
ACBXSUBR | サブコンポーネントレスポンスコード | 121~122 | 78 | 2 | バイナリ |
ACBXSUBS | サブコンポーネントレスポンスサブコード | 123~124 | 7A | 2 | バイナリ |
ACBXSUBT | サブコンポーネントエラーテキスト | 125~128 | 7C | 4 | 英数字 |
ACBXLCMP | 圧縮レコード長 | 129~136 | 80 | 8 | バイナリ |
ACBXLDEC | 非圧縮レコード長 | 137~144 | 88 | 8 | バイナリ |
ACBXCMDT | コマンドタイム | 145~152 | 90 | 8 | バイナリ |
ACBXUSER | ユーザーエリア | 153~168 | 98 | 16 | 該当なし |
ACBXRSV4 | 予約 4 | 169~193 | A8 | 24 | 操作不可 |
コントロールブロックフィールドおよびバッファの内容は、Adabas コマンド(コール)を発行する前にセットしておかなければなりません。 また、Adabas は各コマンドの実行後、特定のフィールドおよびバッファに 1 つ以上の値またはコードを返します。
ダイレクトコールが開始される前に、未使用の ACBX フィールドにバイナリの 0 を設定することをお勧めします。
ACBX の各フィールドについては、このセクションで説明します。ACBX フォーマットの表示順に記載されています。 この説明は、ほとんどの Adabas コマンドに当てはまりますが、一部の Adabas コマンドでは、この説明とは異なる目的でコントロールブロックフィールドが使用されます。 これらのフィールドが各 Adabas コマンドによってどのように使用されるかの詳細については、「コマンド」を参照してください。
Adabas コントロールブロック(ADACBX)の先頭バイトは、Adabas API がどの処理を実行するかを判断するのに使用されます。 詳細については、『Adabas オペレーションマニュアル』の「アプリケーションと Adabas のリンク」を参照してください。
Adabas コマンドを発行するときに、このフィールドをバイナリの 0 に設定します。 これは、ACBXTUSR のように、論理ユーザーコールが行われていることを示します。
ACBXTYPE の値の X'04'、X'08'、X'0c'、X'10'、X'14'、X'18'、X'1c'、X'20'、X'24'、X'28'、X'2c'、X'34'、X'38'、X'3c'、X'44'、X'48'、および X'4c' は、Software AG で使用するために予約されています。そのため、アプリケーションプログラムで使用することはできません。
Software AG の Natural 言語で作成されたアプリケーションは、Natural が適切な値を指定するので、Adabas ACBX の 1 バイト目にこの値を指定する必要はありません。
このフィールドは予約されています。 このフィールドにはゼロを設定します。
バージョンインジケータは、Adabas コントロールブロックが新しい ACBX フォーマットを使用するのか、従来の ACB フォーマットを使用するのかを示します。 このフィールドを文字 "F" で始まる値(例えば "F2")に設定すると、Adabas コントロールブロックは ACBX フォーマットで指定されているものとして扱われます。 このフィールドをそれ以外の値に設定すると、Adabas コントロールブロックは従来の ACB フォーマットで指定されているものとして扱われます。
ACBX 長フィールドは、Adabas に渡される ACBX 構造の長さ(ACBXQLL と同じく現時点では 192)に設定する必要があります。
コマンドコードは、実行するコマンドを定義し、OP、A1、BT のように 2 文字の英数字で構成されます。
このフィールドは予約されています。 このフィールドにはゼロを設定します。
このフィールドには、Adabas コマンドの完了時に値が設定されます。 通常、正常終了はゼロのレスポンスコードで示されます。 レコードシーケンスまたは ISN シーケンスを処理する繰り返し可能なコマンドの場合には、レスポンスコードはエンドオブファイルまたはエンドオブ ISN リストを示します。 ゼロ以外のレスポンスコードについては、「Adabas メッセージおよびコード」を参照してください。
コマンド ID フィールドは、後続のコマンドで使用する論理読み込み順序、検索結果、および(オプション)デコードされたフォーマットを識別するために、多くの Adabas コマンドにより使用されます。 用途に応じて英数字またはバイナリのコマンド ID を使い分けたり、Adabas に新しいバイナリコマンド ID を生成するように要求することができます。 コマンド ID の詳細については、「プログラミング全般に関する考慮事項」を参照してください。 ET、CL および一部の OP コマンドの場合、Adabas は、バイナリのトランザクションシーケンス番号をコマンド ID フィールドに返します。
このフィールドを使用して、データベース ID を指定します。 Adabas コールはこのデータベースに送られます。
このフィールドは 4 バイトのバイナリフィールドですが、現時点では 2 バイトのデータベース ID のみがサポートされています。 したがって、データベース ID はフィールドの下位部分(右端のバイト)に指定し、その前にバイナリの 0 を付加する必要があります。
このフィールドがバイナリの 0 に設定されている場合は、Adabas API は DDCARD 入力データで指定された ADARUN カードのデータベース ID か、リンクされているかリンクルーチンによりロードされた LNKGBLS モジュールで指定されているデフォルトのデータベース ID 値のいずれかを使用します。
このフィールドを使用して、Adabas コールで送る必要のあるファイル数を指定します。
このフィールドは 4 バイトのバイナリフィールドですが、ファイル番号はフィールドの下位部分(右端のバイト)に指定し、その前にバイナリの 0 を付加する必要があります。
注意:
カップリングされた対のファイルで演算するコマンドの場合、このフィールドは、ISN
またはデータが返されるプライマリファイルを指定します。
ISN フィールドにはコマンドで必要な Adabas ISN 値を指定し、必要に応じてコマンドが読み込んだレコードの ISN か、またはコマンドが生成した ISN リストの最初の ISN が返されます。
ACBXISN フィールドは、8 バイトの ACBXISNG フィールドに埋め込まれた 4 バイトのバイナリフィールドで、まだ使用されていません。 ACBXISNG フィールドの上位部分には、バイナリの 0 を設定します。
ISN 下限フィールドには、処理の開始位置となる ISN リストの開始点または範囲を指定します。
OP コマンドでは、オプションとしてユーザー指定の非アクテビティタイムアウトの値を、このフィールドに指定できます。 また、OP コマンドはこのフィールドに Adabas リリース情報を返します。
マルチフェッチ オプションを使用した場合、このフィールドにはプリフェッチされるレコードの最大カウント(オプション)が保持されます。ゼロにすると制限なしになります。
ACBXISL フィールドは、8 バイトの ACBXISLG フィールドに埋め込まれた 4 バイトのバイナリフィールドで、まだ使用されていません。 ACBXISLG フィールドの上位部分には、バイナリの 0 を設定します。
ISN 数フィールドは、検索(Sx)コマンドが返した ISN のカウントです。 このカウントは、ISN リストの ISN 数を合計した値、またはこの操作で大規模な ISN プールから ISN バッファセグメントに入る ISN 数の合計値です。 検索コマンドでセキュリティバイバリューを使用すると、複数の ISN が検索条件を満たした場合、ISN 数フィールドが "1" に設定されます。
OP コマンドの場合、オプションとしてユーザー固有のトランザクションタイムリミットをこのフィールドに指定できます。 OP コマンドは、このフィールドにシステム情報およびコールタイプ情報を返します。
ACBXISQ フィールドは、8 バイトの ACBXISQG フィールドに埋め込まれた 4 バイトのバイナリフィールドで、まだ使用されていません。 ACBXISQG フィールドの上位部分には、バイナリの 0 を設定します。
コマンドオプション 1 からコマンドオプション 8 までのフィールドには、処理オプションを指定できます(ISN ホールド、コマンドレベルのプリフェッチ制御、返される ISN など)。 Adabas 8.1 では、コマンドオプション 1 フィールドとコマンドオプション 2 フィールドのみがサポートされています。 それ以外のコマンドオプションフィールドは、今後の Adabas リリースでの拡張のために用意されています。
ISN リストを作成するディスクリプタの分類、またはカップリングした対のファイルの 2 番目のファイル番号など、その他のコマンド関連パラメータをアディション 1 フィールドに指定することが必要な場合があります。
OP(オープン)および RE(ET データの読み込み)コマンドは、このフィールドにトランザクションシーケンス番号を返します。
アディション 3 フィールドには、パスワードで保護されたファイルにアクセスするのに必要なユーザーのパスワードを設定します。 このフィールドは、コマンドの実行中、常に空白にリセットされます。
暗合化(サイファ化)された Adabas ファイルのレコードをコマンドで読み書きする場合は、アディション 4 フィールドをそのファイルのサイファコードに設定する必要があります。 複数のコマンド ID を必要とするコマンドでは、サイファコードが不要であれば、コマンド ID の 1 つをこのフィールドに指定します。
このフィールドは、コマンドの実行中、常に空白にリセットされます。
シングルユーザーモードを実行していない(ADARUN MODE=SINGLE と指定していない)ニュークリアスで Adabas コールを処理すると、アディション 4 フィールドの下位(右端)3 バイトに Adabas リリース(バージョンおよび改訂)レベル番号およびデータベース ID が次のようなフォーマット vrnnnn で返されます。
v | Adabas バージョン番号を示します。 |
r | Adabas リリース番号を示します。 |
nnnn | コールを処理した Adabas データベースの番号(16 進)を示します。 |
例えば、"811111" は、データベース 4369 の Adabas バージョン 8.1 ニュークリアスがコールを処理したことを示します。
アディション 5 フィールドの 1 バイト目の上位(左端)2 ビットは、ユニークなフォーマット ID かグローバルフォーマット ID のどちらが選択されているかを制御します。下位(右端)4 バイトまたは 8 バイトは、選択に応じてユニークなフォーマット ID かグローバルフォーマット ID のいずれかを格納することができます RC(コマンド ID の解放)コマンドでは、削除するグローバルフォーマット ID をこのフィールドに指定できます。 コールが完了すると、OP コマンドはオプションで指定された非アクティビティタイムアウトやトランザクションタイムアウトの値をアディション 5 フィールドに返します。
このフィールドは現時点では使用されません。 バイナリの 0 に設定する必要があります。
このフィールドは予約されています。 このフィールドはバイナリの 0 に設定する必要があります。
バッファのエラーオフセット(64 ビット)およびバッファのエラーオフセット(32 ビット)フィールドは、存在する場合、ダイレクトコール中にエラーが検出されたバッファのオフセットを示します。
バッファのエラーオフセット(64 ビット)フィールドの ACBXERRG は使用できませんが、今後のリリースで使用できるようになる可能性があります。 現時点では、バッファのエラーオフセット(32 ビット)フィールドの ACBXERRA を使用してください。
ACBXERRx フィールドは、レスポンスコードがダイレクトコールから返されたときにのみ設定されます。 ACBXERRA、ACBXERRD、ACBXEFFE の各フィールドは、レスポンスコードがバッファ処理に関連しているときにのみ設定されます。
バッファのエラーオフセット(64 ビット)およびバッファのエラーオフセット(32 ビット)フィールドは、存在する場合、ダイレクトコール中にエラーが検出されたバッファのオフセットを示します。
バッファのエラーオフセット(64 ビット)フィールドの ACBXERRG は使用できませんが、今後のリリースで使用できるようになる可能性があります。 現時点では、バッファのエラーオフセット(32 ビット)フィールドの ACBXERRA を使用してください。
ACBXERRx フィールドは、レスポンスコードがダイレクトコールから返されたときにのみ設定されます。 ACBXERRA、ACBXERRD、および ACBXERRF フィールドは、レスポンスコードがバッファ処理に関連しているときにのみ設定されます。
このフィールドは、エラー検出時に処理されていたフィールドがあれば、そのフィールドの 2 バイトの Adabas ショートネームを示します。
ACBXERRx フィールドは、レスポンスコードがダイレクトコールから返されたときにのみ設定されます。
このフィールドには、ダイレクトコール処理中に発生したエラーのサブコードが格納されます。
ACBXERRx フィールドは、レスポンスコードがダイレクトコールから返されたときにのみ設定されます。 Entire Net-Work がインストールされている場合、レスポンスコードによってはこのフィールドに障害が発生したノードのノード ID が返されます。
このフィールドには、ACBXERRA フィールドが参照するバッファの ID(ABDID フィールドから取得したもの)が格納されるため、複数のバッファが関与している場合にも、エラーが発生しているバッファを特定できます。
ACBXERRx フィールドは、レスポンスコードがダイレクトコールから返されたときにのみ設定されます。 ACBXERRA、ACBXERRD、および ACBXERRF フィールドは、レスポンスコードがバッファ処理に関連しているときにのみ設定されます。
このフィールドは将来の使用のために予約されています。 現時点ではこのフィールドを使用しないでください。
ACBXERRA フィールドおよび ACBXERRD フィールドを参照するエラーがバッファセグメントに含まれている場合、このフィールドにはそのセグメントの 2 バイトのシーケンス番号が入ります。
ACBXERRx フィールドは、レスポンスコードがダイレクトコールから返されたときにのみ設定されます。 ACBXERRA、ACBXERRD、および ACBXERRF フィールドは、レスポンスコードがバッファ処理に関連しているときにのみ設定されます。
このフィールドには、Adabas アドオン製品が Adabas コマンドをインターセプトしたときに発生したエラーからのレスポンスコードが入ります。
このフィールドには、Adabas アドオン製品が Adabas コマンドをインターセプトしたときに発生したエラーからのレスポンスサブコードが入ります。
このフィールドには、Adabas アドオン製品が Adabas コマンドをインターセプトしたときに発生したエラーのエラーテキストが入ります。
このフィールドには、レコード読み書き時の圧縮レコード長が返されます。
これは、正常に完了した Adabas コールが処理した圧縮データの長さです。 論理データストレージレコードが複数の物理データレコードにスパンしている場合、関連する物理レコードをすべて結合した長さがわからなくなることがあります。 この場合、Adabas はこのフィールドの下位ワードに高い値を返します。
このフィールドには、非圧縮レコード長が返されます。 これは、正常に完了したコールが処理した非圧縮データの長さです。 複数のレコードバッファセグメントを指定した場合は、バッファセグメントをすべて合計した長さになります。
コマンドタイム(スレッドタイムとも言う)フィールドは、ニュークリアスがコマンドを処理するのに要した経過時間を返すために、Adabas が使用します。 これには、コマンドを実行する Adabas スレッドが Adabas I/O オペレーションまたは他のリソースで待機する時間は含まれませんが、コードを実行できるよう、スレッドがプロセッサを待機する時間は含まれます。 経過時間は 1/4096 ミリ秒単位で計測され、バイナリ形式で表されます。
ユーザーエリアフィールドは、ユーザープログラムで使用できるように予約されています。 論理ユーザーコールを発行したとき、Adabas はユーザーエリアをいっさい読み書きしません。
このフィールドは、Adabas での使用のために予約されています。 ユーザープログラムでは、この ACBX を使用して最初の Adabas コールを実行する前にこのフィールドをバイナリの 0 に設定し、以後同じ値のままにしておく必要があります。
ACBX DSECT は、分散 Adabas SRCE ライブラリのメンバ ADACBX にあります。 また、このセクションには、参考のために ACBX フォーマット表も記載されています。
ACBX は多くの点で ACB と異なります。 ACBX には ACB にはないフィールドがいくつかあり、一部の ACBX フィールドのサイズは ACB の同じフィールドよりも大きくなっています。 ACBX におけるこれらの拡張は、基本的な構造を長期間にわたって変更することなく将来行われる予定の Adabas への機能強化に対応できるように、ACBX 構造に十分な柔軟性を持たせるために行われました。
このセクションでは、ACB と ACBX の相違点について説明します。
ACBX の長さは 192(または X’C0’)バイトで、ACB の長さは 80 バイトです。
バッファ長フィールドは ACB に含まれていますが ACBX には含まれていません。 ACBX ダイレクトコールインタフェースを使用している場合は、このフィールドは個々の Adabas バッファ記述(ABD)に用意されます。 したがって ACBX には、ACB に含まれる ACBFBL、ACBIBL、ACBRBL、ACBSBL および ACBVBL に対応するバッファフィールドが含まれません。コールに関連付けられた ABD が代わりに使用されます。 1 つの ABD は、単独の Adabas バッファセグメントを表します。 詳細は、「Adabas バッファ記述」で説明しています。
ACBX の方が、コマンドオプション、アディション、予約済みコントロールブロックのフィールドの数が多くなっています。
ACBX には、8 個のコマンドオプションフィールドが含まれていますが、ACB では 2 個です。
ACBX には、6 個のアディションフィールドが含まれていますが、ACB では 5 個です。
ACBX には、4 個の予約フィールドが含まれていますが、ACB では 1 個です。
予約された ACBX フィールドはバイナリの 0 に設定する必要があります。予約された 4 フィールド(ACBXRSV4)は、バイナリの 0 に初期化する必要があり、常にその状態を保つようにします。
コマンドタイム(スレッドタイム)を計測する単位は ACB と ACBX で異なります。 ACB では、コマンドタイム(ACBCMDT)を 16 マイクロ秒単位で計測します。ACBX では、コマンドタイム(ACBXCMDT)を 1/4096 マイクロ秒単位で計測します。
多くのコントロールブロックフィールドで ACBX の方が長さが長くなっています。 次の表は、これらの変更点を要約したものです。
フィールドタイトル | 長さ | |
---|---|---|
ACB | ACBX | |
ファイル番号 | 2 | 4 |
データベース ID | 2 | 4 |
ISN | 4 | 4 |
ISN 下限 | 4 | 4 |
ISN 数 | 4 | 4 |
圧縮レコード長 | 4 | 8 |
非圧縮レコード長 | 4 | 8 |
コマンドタイム | 4 | 8 |
ユーザーエリア | 4 | 16 |
フォーマットバッファ長 | 2 | 4(ABD 内) |
レコードバッファ長 | 2 | 4(ABD 内) |
サーチバッファ長 | 2 | 4(ABD 内) |
バリューバッファ長 | 2 | 4(ABD 内) |
ACBX には次のフィールドが追加されています。
ACBX DSECT 名 | 説明 |
---|---|
ACBXADD6 | アディション 6 |
ACBXCOP3 | コマンドオプション 3 |
ACBXCOP4 | コマンドオプション 4 |
ACBXCOP5 | コマンドオプション 5 |
ACBXCOP6 | コマンドオプション 6 |
ACBXCOP7 | コマンドオプション 7 |
ACBXCOP8 | コマンドオプション 8 |
ACBXDBID | データベース ID です。 ACB では、データベース ID は X'30' コールではレスポンスコードフィールド(ACBRSP)内、その他の論理コールでは ACBFNR の 1 バイト目に格納されます。 |
ACBXERRA | バッファ内へのエラーオフセット(32 ビット)です。 |
ACBXERRB | エラー文字フィールド(フィールド名)です。 |
ACBXERRC | エラーサブコードです。 |
ACBXERRD | 複数のバッファが関連する場合のエラーバッファ ID です。 |
ACBXERRE | 複数のバッファが関連する場合のエラーバッファシーケンス番号です。 |
ACBXERRG | バッファ内へのエラーオフセット(64 ビット)です。このフィールドは現在サポートされていません。 |
ACBXLCMP | 圧縮レコード長(レコード全体が読み込まれていない場合はレコードの一部)です。 ACB では、圧縮レコード長はアディション 2 フィールド(ACBADD2)に格納されます。 |
ACBXLDEC | 非圧縮レコード長です。 ACB では、非圧縮レコード長はアディション 2 フィールド(ACBADD2)に格納されます。 |
ACBXLEN | ACBX の長さ(現在 192)です。 |
ACBXRSV2 | 予約済みです。 このフィールドの値はゼロに設定されている必要があります。 |
ACBXRSV3 | 予約済みです。 このフィールドの値はゼロに設定されている必要があります。 |
ACBXRSV4 | Adabas が使用するように予約済みです。 |
ACBXSUBR | Adabas アドオン製品により使用されるサブコンポーネントレスポンスコードです。 |
ACBXSUBS | Adabas アドオン製品により使用されるサブコンポーネントレスポンスサブコードです。 |
ACBXSUBT | Adabas アドオン製品により使用されるサブコンポーネントエラーテキストです。 |
ACBXVER | C'F2' に設定した場合、このフィールドは Adabas に新しい拡張 ACB(ACBX)が使用されていることを示します。 |
複数の用途を持つ ACB フィールドが、ACBX の追加のフィールドに分割されているケースが多く見られます。
ACB では、X'30' コールのデータベース ID を格納するためにレスポンスコードフィールド(ACBRSP)が使用されます。 その他の論理コールの場合、1 バイトのデータベース ID は、ファイル番号フィールド(ACBFNR)の 1 バイト目に格納されていました。 ACBX では、この目的のためにデータベース ID フィールド(ACBXDBID)が提供されています。
ACB では、特定の Adabas レスポンスコードのエラー情報を保持するために ACBADD2 フィールドが使用されます。 ACBX では、この目的でエラー情報フィールド(ACBXERR* の一連のフィールド)が用意されています。
ACB では正常にコールを行うために、処理されたデータの圧縮および非圧縮レコード長を返すために ACBADD2 フィールドが使用されます。 ACBX では正常にコールを行うために、圧縮レコードフィールド(ACBXLCMP)に、Adabas により処理された圧縮データの長さが含まれます。また非圧縮レコードフィールド(ACBXLDEC)には、非圧縮データの長さが含まれます。
次の表に示すように、ACBX フィールドのオフセットおよびシーケンスは、対応する ACB フィールドとは全般的に異なります。
オフセット | ACB DSECT フィールド名 | ACBX DSECT フィールド名 |
---|---|---|
00 | ACBTYPE(コールタイプ) | ACBXTYPE(コールタイプ) |
01 | 予約 | ACBXRSV1(予約 1) |
02 | ACBCMD(コマンドコード) | ACBXVER(ACBX バージョンインジケータ) |
04 | ACBCID(コマンド ID) | ACBXLEN(ACBX 長) |
06 | (ACBCID の続き) | ACBXCMD(コマンドコード) |
08 | ACBFNR(ファイル番号) | ACBXRSV2(予約 2) |
0A | ACBRSP(レスポンスコード -- X'30' コールでデータベース ID に使用される) | ACBXRSP(レスポンスコード) |
0C | ACBISN(ISN) | ACBXCID(コマンド ID) |
10 | ACBISL(ISN 下限) | ACBXDBID(データベース ID) |
14 | ACBISQ(ISN 数) | ACBXFNR(ファイル番号) |
18 | ACBFBL(フォーマットバッファ長) | ACBXISNG(8 バイト ISN) |
1A | ACBRBL(レコードバッファ長) | (ACBXISNG の続き) |
1C | ACBSBL(サーチバッファ長) | ACBXISN(ISN -- ACBXISNG に含まれる) |
1E | ACBVBL(バリューバッファ長) | (ACBXISN および ACBXISNG の続き) |
20 | ACBIBL(ISN バッファ長) | ACBXISLG(8 バイト ISN 下限) |
22 | ACBCOP1(コマンドオプション 1) | (ACBXISLG の続き) |
23 | ACBCOP2(コマンドオプション 2) | (ACBXISLG の続き) |
24 | ACBADD1(アディション 1) | ACBXISL(ISN 下限 -- ACBXISLG に含まれる) |
28 | (ACBADD1 の続き) | ACBXISQG(8 バイト ISN 数) |
2C | ACBADD2(アディション 2) | ACBXISQ(ISN 数 -- ACBXISQG に含まれる) |
30 | ACBADD3(アディション 3) | ACBXCOP1(コマンドオプション 1) |
31 | (ACBADD3 の続き) | ACBXCOP2(コマンドオプション 2) |
32 | (ACBADD3 の続き) | ACBXCOP3(コマンドオプション 3) |
33 | (ACBADD3 の続き) | ACBXCOP4(コマンドオプション 4) |
34 | (ACBADD3 の続き) | ACBXCOP5(コマンドオプション 5) |
35 | (ACBADD3 の続き) | ACBXCOP6(コマンドオプション 6) |
36 | (ACBADD3 の続き) | ACBXCOP7(コマンドオプション 7) |
37 | (ACBADD3 の続き) | ACBXCOP8(コマンドオプション 8) |
38 | ACBADD4(アディション 4) | ACBXADD1(アディション 1) |
40 | ACBADD5(アディション 5) | ACBXADD2(アディション 2) |
44 | (ACBADD5 の続き) | ACBXADD3(アディション 3) |
48 | ACBCMDT(コマンドタイム) | (ACBXADD3 の続き) |
4C | ACBUSER(ユーザーエリア) | ACBXADD4(アディション 4) |
54 | --- | ACBXADD5(アディション 5) |
5C | --- | ACBXADD6(アディション 6) |
64 | --- | ACBXRSV3(予約 3) |
68 | --- | ACBXERRG(バッファ内のエラーオフセット、64 ビット -- 現在サポートされていません) |
6C | --- | ACBXERRA(バッファ内のエラーオフセット、32 ビット) |
70 | --- | ACBXERRB(エラー文字フィールド) |
72 | --- | ACBXERRC(エラーサブコード) |
74 | --- | ACBXERRD(エラーバッファ ID) |
75 | --- | ACBXERRE(エラーバッファシーケンス番号) |
78 | --- | ACBXSUBR(サブコンポーネントレスポンスコード) |
7A | --- | ACBXSUBS(サブコンポーネントレスポンスサブコード) |
7C | --- | ACBXSUBT(サブコンポーネントエラーテキスト) |
80 | --- | ACBXLCMP(圧縮レコード長) |
88 | --- | ACBXLDEC(非圧縮レコード長) |
90 | --- | ACBXCMDT(コマンドタイム) |
98 | --- | ACBXUSER(ユーザーエリア) |
A8 | --- | ACBXRSV4(予約 4) |
コマンドログ(CLOG)には、CLOGLAYOUT=5 と CLOGLAYOUT=8 の 2 つのフォーマットがあります。 ADARUN パラメータ CLOGLAYOUT によって、使用するフォーマットを区別します。
注意:
Adabas 8 までのバージョン向けのユーザープログラムには CLOGLAYOUT=5 を使用することをお勧めします。 Adabas 8
以降向けのユーザープログラムには、CLOGLAYOUT=8 を使用してください。
Adabas ニュークリアス起動パラメータに CLOGLAYOUT=5 を指定すると、Adabas コントロールブロックフィールドがすべて基本コマンドログエリアに記録されます。 CLOGLAYOUT=8 を使用すると、各バッファとも CLOGLAYOUT=5 の場合とほとんど同じように書き出されますが、各バッファの接頭辞として、対応する Adabas バッファ記述(ABD)が付加される点が異なります。 各セグメントバッファ(フォーマット、レコード、またはマルチフェッチ)は別々に書き込まれ、一意に識別されます。
CLOGLAYOUT パラメータについては、「CLOGLAYOUT コマンドログレイアウト」を参照してください。 この 2 つのコマンドログフォーマットの詳細については、「コマンドログフォーマット」を参照してください。