Adabas 8 にはラージオブジェクトフィールド(LB フィールド)があります。 これらは、通常の英数字フィールドの 253 バイトや、LA フィールドの 16,381 バイトよりも多くのデータを格納できるフィールドです。 ラージオブジェクトを含めるフィールドは新しい LB オプションで定義します。 LB フィールドの値の理論上の最大サイズは 2 GB をわずかに下回ります。実際に使用できるサイズはもう少し小さくなります。
Adabas 8 で LB フィールドを使用するには、次の手順に従います。
1 つまたは複数のフィールドに LB オプションを割り当てて FDT を定義します。 ADACMP COMPRESS 機能を使用して LB フィールドを作成できます。 例としては、次のようなものがあります。
ADACMP COMPRESS ADACMP FNDEF='1,AA,8,A,DE' Key field ADACMP FNDEF=... ADACMP FNDEF='1,AZ,250,A,NU' Data field ADACMP FNDEF='1,L1,0,A,LB,NV,NU,NB' Binary LOB field
ここではフィールド L1 をラージオブジェクトフィールドとして定義しています。 NV オプションと NB オプションは、このフィールドで文字の変換と末尾の空白の圧縮を行わないことを指定します。 NU オプションは、このフィールドの空値を省略することを指定します(NB オプションを指定するフィールドには、NU オプションまたは NC オプションのいずれかを定義する必要があります)。 フィールド値は、どのような場合でも変更されません。 LB フィールドオプションとその他すべてのフィールドオプション(NV と NB を含む)の詳細については、「フィールドオプション」を参照してください。
ADACMP で圧縮する入力データを指定する場合、入力には短い LB フィールド値(253 バイトまで)または大きい LB フィールド値(253 バイトを超える)を含めることができます。 非圧縮の入力レコード内の LB フィールドに対応する箇所で(この例では L1)、LB データが後に続かない(LB 値は空なので)長さ X'00000004' を指定することで空の LB 値を指定できます。 COMPRESS の入力データの構造の詳細については、「入力データの必要条件」を参照してください。
または:
LB フィールドを定義する FNDEF を指定して ADADBS NEWFIELD 機能を使用することで既存の FDT
を更新することもできます。 Adabas Online System にも同等の機能があります。この操作を行う場合、新しい基本ファイルを定義してロードする必要はありません。また次の手順を省略して手順 3 に進むことができます。
ADALOD LOAD 機能を使用して、LB フィールドがある基本ファイル(空の可能性がある)をデータベースにロードします。 Adabas は、LB フィールド値を LOB ファイルと呼ばれる個別のファイルに格納します。このファイルは、基本ファイルと呼ばれる LB フィールドを含むファイルと密接に関連付けられます。
次の手順で空の LOB ファイルを別個にロードしますが、LOB ファイルと基本ファイルはどちらを先にロードしても、また同時にロードしてもかまいません。 例としては、次のようなものがあります。
ADALOD LOAD FILE=11,NAME='BASE-FILE' ADALOD LOBFILE=12 ADALOD MAXISN=100000,DSSIZE=5000B ADALOD ... ADALOD SORTSIZE=100,TEMPSIZE=100
LOBFILE パラメータで、この基本ファイルに対応する LOB ファイルのファイル番号を指定しています。 LOB に関連付けられた ADALOD パラメータの詳細については、「LOAD:ファイルのロード」を参照してください。
注意:
基本ファイルと LOB ファイルの組み合わせも、LB フィールド(基本ファイル)のあるファイルがすでに表示されている場合は、LOB
ファイルをロードするだけで設定できます。
ADACMP COMPRESS 手順の //DDAUSBA 出力データセットを、ADALOD LOAD 機能の //DDEBAND 入力データセットとして指定します。
ADALOD LOAD 機能を使用して空の LOB ファイルをロードし、このファイルを前の手順でロードするか、手順 1 で更新した基本ファイルに関連付けます。 LOB ファイルと基本ファイルは任意の順序で、また同時にロードすることもできます。
ADALOD LOAD FILE=12,LOB,NAME='LOB-FILE' ADALOD BASEFILE=11 ADALOD MAXISN=500000,DSSIZE=500000B,NISIZE=4000B,UISIZE=40B ADALOD ISNREUSE=YES,DSREUSE=YES,INDEXCOMPRESSION=YES ADALOD ... ADALOD SORTSIZE=100,TEMPSIZE=100
LOB ファイルタイプは、ADALOD で、FDT が事前に定義された LOB ファイルをロードする必要があることを指定します。 空の LOB ファイルをロードする場合、//DDEBAND 入力データセットを指定する必要はありません。
BASEFILE パラメータで、この LOB ファイルに対応する基本ファイルのファイル番号を指定します。 LOB に関連付けられた ADALOD パラメータの詳細については、「LOAD:ファイルのロード」を参照してください。
注意:
基本ファイルと LOB ファイルの組み合わせも、LB フィールド(基本ファイル)のあるファイルがすでに表示されている場合は、LOB
ファイルをロードするだけで設定できます。
ADAREP を使用してデータベースレポートを実行し、基本ファイルと LOB ファイルがどのように表示されるかを確認します。
Adabas ニュークリアス(ADARUN)のパラメータ NISNHQ、NH、LP、LDEUQ、LWP、NAB、および LU を再評価して調整し、LB フィールドを処理するために十分なリソースをニュークリアスで使用できるようにします。 これらのパラメータの詳細については、「Adabas の初期化(ADARUN ステートメント)」を参照してください。 これらのパラメータの調整については、「旧バージョンの Adabas からの移行」を参照してください。
LB フィールド値を含むデータを基本ファイルにロードするアプリケーションを作成または調整します。 バックグラウンドでは Adabas が LB フィールド値(非常に短いものを除く)を LOB ファイルに格納しますが、この処理はアプリケーションに対して透過的に行われます。 アプリケーションプログラムのコマンドは常に基本ファイルに対して発行され、LOB ファイルの存在を意識する必要はありません。
LB フィールドを操作するには Natural 4.2 を使用する方法があります。 LOB ファイルの LB フィールド(この例では L1)は Natural で動的変数にマッピングされます。 アプリケーションプログラムを通常の方法で作成することもできます。 Natural では、大きな LB フィールド値の処理に必要なフォーマットで Adabas コールが自動的に発行されます。
アプリケーションプログラムで Adabas に対してダイレクトコールを発行することもできます。 大きな LB フィールド値(32 KB を超えるデータ)を使用したコールには、Adabas 8 の ACBX ダイレクトコールインターフェイスを使用する必要があります。 ACB ダイレクトコールインターフェイスを使用するコールは、指定するすべての LB フィールド値が単一の 32 KB バッファに収まる場合に使用できます。詳細については、「ACBX インターフェイスダイレクトコールの指定」を参照してください。 例えば、ACBX ダイレクトコールで次の情報を指定できます。
ダイレクトコールコンポーネント | 指定 |
---|---|
ACBX |
ACBXCMD = N1 (insert record) ACBXFNR = 11 (base file number) ... |
最初のフォーマット/レコードバッファセグメントペア |
FB1 = 'AA,8,A,L1L,4,B,...,AZ,250,A.' RB1 = 'KEY-1 ' X'000186A0' ... 'Some arbitrary data...' |
2 番目のフォーマット/レコードバッファセグメントペア |
FB2 = 'L1,*.' RB2 = X'100,000 bytes of binary data' |
2 つのバッファセグメントペアの場所と長さは、4 つの Adabas バッファ記述(ABD)で指定する必要があります。これらのバッファ記述はここには示しません。 詳細については、「Adabas バッファ記述(ABD)」を参照してください。
最初のフォーマットバッファセグメント(L1L,4,B
)内の LB フィールドの長さインジケータ(L)は、L1
フィールドの固有値を、最初のレコードバッファセグメント内の対応する場所に格納することを指定します。これは LB フィールド値長さ 100,000 バイト(16
進数で 186A0)を示します。 長さインジケータの詳細については、「長さインジケータ(L)」を参照してください。
2 番目のフォーマットバッファセグメント(L1,*
)内のアスタリスク(*)を使った長さ表記は、LB
フィールドの固有値(追加長さ情報なし)を、2 番目のレコードバッファセグメント内の対応する場所に格納することを指定します。
アスタリスクを使った長さ表記の詳細については、「アスタリスク(*)を使った長さ表記」を参照してください。