バージョン 8.1.3
 —  Adabas 8 の導入計画  —

アーキテクチャの変更点

このドキュメントでは、Adabas 8 になってアーキテクチャがどのように変わったのかについて説明しています。 このリリースのすべての拡張機能およびその他の情報については、「Adabas 8.1.1 リリースノート」を参照してください。


制限の解除

論理エクステントの制限

Adabas の各ファイルエクステントのタイプごとの論理ファイルエクステントは 5 個に制限されていましたが、この制限は解除されました。 定義可能になった論理ファイルエクステントの最大数は、アソシエータの第 1 データセット(DDASSOR1)のブロックサイズから決定されます。 エクステントの情報は、FCB の可変セクション内に格納されます。 使用された FCB サイズがアソシエータデータセットのブロックサイズに到達するまで、新しいエクステントを追加できるようになりました。 例えば、標準の 3390 デバイスタイプの場合、ファイルはタイプごとに 40 を超えるエクステントを持つことができます(他のタイプのエクステント数が少ない場合、1 つのタイプのエクステント数はより多くすることができます)。

物理エクステントの制限

Adabas データベースのアソシエータおよびデータストレージコンポーネントには、各 5 個以上の物理エクステントを格納できるようになりました。 物理エクステントあたりの最大数は 99 に設定されていますが、実際の最大数はそれよりも少ない可能性があります。これは、ファイルの論理エクステントの最大数と同様に、最初のアソシエータデータセット(ASSOR1)のブロックサイズによって物理エクステントの最大数が変わるためです。 例えば、標準の 3390 デバイスタイプでは、アソシエータ、データストレージ、および DSST の各エクステントの個数は 75 を超えることができます(他のタイプのエクステント数が少ない場合は、1 つのタイプのエクステントをより多く持てます)。

MU および PE の上限

MU フィールドまたは PE グループのそれぞれのオカレンス数は、1 レコードあたり、191 から 65,534 に増えましたが、 実際の上限は、最大データストレージレコード長(ADALOD MAXRECL パラメータ)によって決まり、デフォルトではデータストレージブロックのサイズから 4 を引いた数に設定されています。

注意:
1 つのレコードに 191 個を超える MU または PE フィールドを使用する場合、ファイルがこれを使用できるように明示的に許可する必要があります(デフォルトでは許可されていません)。 これは、新しい ADADBS MUPEX 機能または、ADACMP COMPRESS MUPEX と MUPECOUNT パラメータを使用して行います。

すべての MU フィールドおよび PE グループ、およびその他のフィールドは、1 つの圧縮レコードに収まらなければなりません。 スパンドレコード(Adabas 8 で導入)を使用すると、より多くの MU フィールドおよび PE グループを格納できます。

拡張 MU または PE が制限されたファイルが作成された場合、MU フィールドまたは PE グループのオカレンスカウントをレコードバッファの 1 バイトフィールドに読み込んではいけません。 これを行うと、Adabas はレスポンスコード 55、サブコード 9 を返します。 したがってフォーマットバッファで xxC エレメントを使用してオカレンスカウントを読み込む(FB='MUC.' または FB='MUC,1,B.' など)すべてのアプリケーションは、オカレンスカウントを 2 バイト以上のフィールドに読み込ませるように(FB='MUC,2,B.' または FB='MUC,4,B.' など)変更する必要があります。

Top of page

スパンドレコードのサポート

Adabas では、今回のリリースからスパンドレコードの概念が導入されています。 データベース内では、論理レコードは多くの物理レコードに分割されます。それぞれのレコードは単一のデータストレージ(DS)ブロックに格納されます。 分割された各物理レコードには、それぞれ ISN が割り当てられます。 最初の物理レコードはプライマリレコードと呼ばれ、圧縮レコードの先頭が含まれ、プライマリ ISN が割り当てられます。 残りの物理レコードは、セカンダリレコードと呼ばれ、論理レコードの残りのデータを含みます。 セカンダリレコードには、セカンダリ ISN が割り当てられます。 これらの ISN は、N2 コマンドの使用時に割り当てられるユーザー ISN、または L1 コマンドの I オプション使用時に使用される ISN に影響しません。 スパンドレコードでは、セカンダリアドレスコンバータを使用して、セカンダリレコードが格納されているデータストレージブロックの RABN にセカンダリ ISN をマッピングします。

スパンドレコードは、1 つのプライマリレコードと 1 つ以上のセカンダリレコードで構成されます。 ただし、スパンドレコードのセグメント数は制限されています。 Adabas ニュークリアスは、スパンドレコード内に最大 5 個の物理レコード(1 個のプライマリレコードと 4 個のセカンダリレコード)を許可しています。

スパンドレコードはアプリケーションプログラムで直接表示させることはできません。 アプリケーションは、プライマリレコードの ISN を参照してから、スパンドレコードにアクセスします。

スパンドレコードは、拡張 Adabas ファイルおよびマルチクライアントファイルでもサポートされています。

注意:
スパンドレコードのサポートは、ファイルに明示的に許可する必要があります。 ADADBS RECORDSPANNING 機能、または ADACMP COMPRESS の SPAN パラメータを使用してこれを行うことができます。

このセクションでは、次のトピックについて説明します。

スパンドレコードの構造

スパンドレコードは、1 つのプライマリレコードと 1 つ以上のセカンダリレコードで構成されます。 スパンドレコードのプライマリレコードおよびセカンダリレコードは ISN を使用して結合されます。 各物理レコードのヘッダーには、現在のレコードの ISN、プライマリレコードの ISN、また次のセカンダリレコードの ISN が含まれています。 また、ヘッダーには、現在のレコードがプライマリレコードかセカンダリレコードかを示す情報も含まれています。

各物理レコードのヘッダーは、そのレコードの長さ情報も提供します。これはレコードがセグメント化されていても同様です。この場合、レコード長はセグメントの長さになります。

スパンドレコードの識別

ADACMP COMPRESS の SPAN パラメータADADBS の RECORDSPANNING 機能、または Adabas Online System の同等機能で明示的に要求した場合に限り、スパンドレコードはファイルに含めることができます。 ADAREP データベースレポート機能および Adabas Online System レポート機能を使用すると、スパンドレコードを使用できるようにファイルが定義されているかどうかを確認できます。

ファイルの SPAN 属性は、ADAULD UNLOAD 機能内で保持されます。 つまり、ファイルがアンロードされたり、削除されたり、再ロードされた場合に、スパンドレコードのサポートは変わらずに維持されます。

191 を超える MU または PE オカレンスが許可されているファイルにも同じ規則が適用されます。 圧縮レコード内の 191 を超える MU および PE オカレンスの識別の詳細については、「圧縮レコード内の 191 を超える MU および PE オカレンスの特定」を参照してください。

セカンダリレコードのセグメンテーション

セカンダリレコードは、フィールド単位またはバイト単位のいずれかでセグメント化されます。 パフォーマンス上の理由から、セグメンテーションは可能な限りフィールド単位に行われます。 ただし、LB(ラージオブジェクト)タイプではないフィールドのサイズがデータストレージブロックサイズよりも大きい場合、このレコードはバイト単位で分割されます。 フィールドのサイズがデータストレージブロックの残りの空きスペースより大きく、データストレージブロックサイズより小さい場合、このレコードはバイト単位ではなくフィールド単位で分割されます。 各セカンダリレコードのヘッダーには、セグメントレコードがどのタイプであるかを示す情報が格納されています。

パディングファクタ

パディングファクタは、ブロックの領域をすべて使用するために、一般的にはスパンドレコードでは無視されます。 したがって、大抵の場合はレポート上でゼロが表示されます。 パディングファクタは、スパンドレコードの最後の短いセグメントのみに使用されます。

スパンドレコードの ISN の使用

プライマリレコードおよびセカンダリレコードは、アドレスコンバータ(AC)を使用して Adabas によりアドレスされます。 ただし、プライマリアドレスコンバータはプライマリレコードの ISN のみを、対応するデータストレージブロックの RABN にマッピングします。 スパンドレコードでは、セカンダリアドレスコンバータを使用して、セカンダリレコードが格納されているデータストレージブロックの RABN にセカンダリ ISN をマッピングします。 したがって、各スパンドレコードのインデックスは 1 つだけになり、インデックス構造に何も影響を与えません。

ISN の範囲は、プライマリ ISN およびセカンダリ ISN 用に個別に維持されます。 ISN が格納または取り扱われる場合は、必ずそのアクションの対象がプライマリ ISN なのか、セカンダリ ISN なのかが区別されます。

すべてのコマンドは、プライマリレコードの ISN を使用して指定する必要があります。セカンダリレコードの ISN は内部的なもので、ユーザーが使用することはできません。 物理シーケンシャルコマンドは、データストレージ内のセカンダリレコードを自動的にスキップします。 セカンダリ ISN を指定した読み取りコマンドにはエラーが返されます(レスポンスコード 113)。

プライマリレコードの ISN は、TOPISN および MAXISN 値に含まれます。 セカンダリレコードの ISN は含まれません。 代わりに、セカンダリ ISN は、MINSEC および MAXSEC 値に含まれます。 スパンドレコードを含むファイルは MINISN 値を指定してロードできますが、MINISN はプライマリレコードの ISN のみを参照する必要があります(セカンダリレコードの ISN は参照できません)。

関係する ADARUN パラメータ

スパンドレコードを含むファイルをサポートするために、次の ADARUN パラメータ値を大きくする必要がある場合があります。

スパンドレコードに関するレポート

最大レコード長統計は、スパンされたファイルとは関連がありません。 最大レコード長をレポートするユーティリティは、統計結果として "N/A"(該当なし)を表示するようになりました。 FCB の最大レコード長フィールドは、スパンドレコードを使用しているファイルの場合には、値が大きくなります。

スパンドレコードのセキュリティ保護

スパンドレコードを含んでいるファイルは、暗号化することができ、セキュリティバイバリューにより保護することができます。 プライマリレコードの ISN が参照されている場合、すべてのセカンダリのセグメントレコードも読み込まれる必要があります。したがって、処理時間が重要な要素となります。

Top of page

ラージオブジェクト(LB)フィールドのサポート

Adabas ファイルに大型のフィールド(ラージオブジェクト(LB)フィールド)を含めることができるようになりました。このフィールドには、最大で 2,147,483,643 バイト(約 2 GB)までのデータを格納することができます。 Adabas 8 では、LB フィールド全体を格納および取得することのみが可能です。LB フィールドの一部を取得したり、LB フィールドの最後にデータを追加したり、LB フィールドの最後のデータを削除したりする機能は、今後の Adabas バージョンでサポートされる予定です。

このセクションでは、次のトピックについて説明します。

Adabas 8 における LB フィールドの処理

Adabas 8 では、バイナリ型と文字型の LB フィールドがサポートされています。 バイナリ LB フィールドを変更することはできません。 格納されているのと同じ LB フィールドのバイナリバイト文字列が、LB フィールドが読み込まれたときに取り出されます。 バイナリ LB フィールドの詳細については、「バイナリ LB フィールドの定義」を参照してください。

文字型のラージオブジェクトについては、データベース、ファイル、およびユーザーに対するユニバーサルエンコーディングサポート(UES)関連の定義に従って、文字コードが変換されます。 新しいフィールドオプションである NB(非空白圧縮)が LB フィールド定義に存在するかによって、文字型 LB フィールドの末尾の空白が Adabas により削除されるかどうかが示されます。

FDT でのラージオブジェクト(LB)フィールドの定義

LB フィールドは、新しい LB フィールドオプションを使用して、フィールド定義テーブル(FDT)で定義する必要があります。 フィールド形式は、"A"(英数字)に設定する必要があります。

LB フィールドのデフォルトのフィールド長は、現在、ゼロとして定義されている必要があります。 Adabas の今後のリリースでは、ゼロ以外のデフォルトフィールド長がサポートされ、ロング英数字(LA)フィールドとラージオブジェクト(LB)フィールドに 253 を超える数値を定義できるようになる予定です。

LB フィールドでは、次の示す事項は許可されません

LB フィールドでは、次に示す事項が許可されます。

このセクションでは、次のトピックについて説明します。

LB フィールドでの NV オプションの指定

NV(変換なし)オプションを指定すると、フィールド値を受け渡すマシンのアーキテクチャが Adabas サーバーとは異なっていても、フィールド値は変換されません。

新しい NB オプション

新しい NB オプションを LA および LB フィールドとともに使用すると、空白圧縮を制御できます。 NB オプションを指定すると、フィールドの末尾の空白が削除されなくなります。 フィールドに NB オプションを指定した場合、そのフィールドに NU オプションまたは NC オプションも指定する必要があります。NB 処理には、NC または NU の使用も同時に必要となります。 Adabas の今後のリリースでは、通常の英数字フィールドやワイド文字フィールドにも NB オプションを指定できるようになる予定です。

バイナリ LB フィールドの定義

NV および NB オプションを両方とも指定すると、バイナリ LB フィールドが定義されます。このフィールドがいったん保存されるとフィールド値は変更できなくなります。

注意:
バイナリ LB フィールドの定義には、フォーマット B は使用されません。これは、一部の環境ではフォーマット B が、バイト順の異なるバイトスワップを意味するためです。 バイトスワッピングは、バイナリ LB フィールドに適用されません。

LB フィールドの例

次の表は、LB フィールドの FDT 定義の有効な例を示しています。

FDT の指定 説明
1,L1,0,A,LB,NU フィールド L1 は、空値省略の文字列 LB フィールドです。
1,L2,0,A,LB,NV,NB,NU,MU フィールド L2 は、マルチプルバリュー、空値省略のバイナリ LB フィールドです。

LB フィールドでサポートされるフォーマットバッファ

LB フィールドをフォーマットバッファに指定する方法は、通常のフィールドを指定するときとほとんど同じです。 このセクションでは、フォーマットバッファに LB フィールドを指定するうえで、通常と異なる点や特殊な事項について説明します。

範囲の表記

マルチプルバリュー LB フィールドおよびピリオディックグループ内の LB フィールドでは、範囲の表記を使用して、フィールドの固定オカレンス数を指定することができます。 例えば、次のようにフォーマットバッファを指定すると、LB フィールド L2 の最初から 10 番目までの値が選択されます。

FB='L21-10.'

ただし、範囲の終了位置を明示しない 1-N 表記を指定して、フィールドのすべてのオカレンスを選択することはできません。 例えば、次のようにフォーマットバッファを指定することはできません

FB='L21-N.'

1-N 表記は、LB フィールドではサポートされません。

オカレンスインデックス

マルチプルバリュー LB フィールドおよびピリオディックグループ内の LB フィールドでは、フィールドの特定のオカレンスを指定する必要があります。 次の例では、マルチプルバリュー LB フィールド L2 の最初の値が選択されます。

FB='L21.'

同様に、次の例では、LB フィールド L3 の 2 番目の PE グループインスタンス内にある 5 番目の値が選択されます。

FB='L32(5).'

基本フィールドを指定する場合には、オカレンスインデックスが必要です。 例えば、L2 がマルチプルバリューフィールドの場合、次のようにフォーマットバッファを指定することはできません

FB='L2.'

LB フィールドフォーマットの指定

LB フィールドのフォーマットバッファには、A(英数字)を指定することができます。 フォーマットを指定しない場合は、FDT 内の LB フィールドのフォーマット定義が適用されます。

LB フィールドの長さの指定

次に示すように、フォーマットバッファ指定を使用して、LB フィールドの長さを対応するレコードバッファに設定する方法は 3 つあります。

注意:
フォーマットバッファ指定で、LB フィールドの長さを指定しない場合は、FDT に定義されているデフォルトの長さ(ゼロ)が適用されます。 この場合、このセクションで説明しているように、長さ指定がゼロの場合のルールが適用されます。

明示的な長さ指定

フォーマットバッファで明示的に長さを指定することができます。 LB フィールドのフォーマット要素でゼロ以外の長さを指定すると、その長さがレコードバッファの LB 値に割り当てられるスペースの大きさになります。 指定できる有効な最大長は 2,147,483,647 です。

次の例では、レコードバッファの LB フィールド L1 に 50,000 バイトが割り当てられ、フィールド AA に 10 バイトが割り当てられます。

FB='L1,50000,AA,10,A.'

フィールドのフォーマット要素に明示的な長さ設定が含まれている場合は、フィールド全体に必要なスペースをレコードバッファに確保しておく必要があります。 十分なスペースが指定されていない場合は、エラー(レスポンスコード 53)が返されます。

ゼロの長さ指定

フォーマット要素にゼロの長さを指定すると、レコードバッファの LB フィールド値のために確保されるスペースの大きさは可変になり、実際の LB 値の内容によって変わります。 この場合、レコードバッファの LB 値の先頭から 4 バイトには、その 4 バイトの長さも含む LB フィールドの実際の長さ(LB 値の長さ + 4)が格納されます。 有効な最大長は、4 バイト分も含めて、2,147,483,647 です。 LA フィールドの場合は、レコードバッファに 2 バイトのフィールド長が格納されます。

次の例では、LB フィールド L1 のレコードバッファの先頭から 4 バイトに L1 フィールドの長さが格納され、その次のバイトから実際の L1 フィールドの値が格納されます。 次に、L1 フィールドの値の直後に続く 10 バイトのフィールド AA が割り当てられます。

FB='L1,0,AA,10,A.'

フィールドのフォーマット要素にゼロの長さ設定が含まれている場合は、フィールド全体に必要なスペースをレコードバッファに確保しておく必要があります。 十分なスペースが指定されていない場合は、エラー(レスポンスコード 53)が返されます。

アスタリスク(*)を使った長さ表記

LA および LB フィールドにのみ、フォーマット要素に長さではなくアスタリスク(*)を指定できます。 この指定を行うと、レコードバッファに確保される LB フィールド値のスペースの大きさは可変になり、LB フィールドの実際の値に必要な大きさになります。 ただし、長さゼロの指定とは異なり、レコードバッファでは LB フィールド値の前に 4 バイト長フィールドは存在しません。LB フォーマット要素に対応するレコードバッファエリアには、LB フィールドの値のみが含まれます。 実際の LB フィールド値の長さは読み込みコマンド用に取得される必要があり、新しいフォーマットバッファ長さインジケータ L を使用する更新コマンド用に指定される必要があります。 長さインジケータの詳細については、このマニュアルの「長さインジケータ(L)」を参照してください。

次の例では、LB フィールド L1 のレコードバッファには L1 フィールドの値のみが含まれます。次に 10 バイトが割り当てられた AA フィールドの値が続きます。

FB='L1,*,AA,10,A.'

次の例では、LB マルチバリューフィールド L2 のレコードバッファには、L2 フィールドの最初の 10 個の値が含まれます。

FB='L21-10,*.'

レコードバッファは、そのフォーマット要素のアスタリスクの長さ設定が含まれている場合は、フィールド全体が使用する十分な空きスペースが確保されるため、必ずしも必要ではありません。 ただし、読み込みコマンドの処理中に次の両方の条件が合致した場合、フィールド値が切り捨てられます。

これらの条件に合致する場合、エラーは返されません。 上記の 2 番目の例(FB='L21-10,*.')でこの条件が合致した場合、Adabas は読み取る 10 個の値を対応するレコードバッファセグメントの長さに合わせて切り落とします (右から順番に切り落とされます。つまり、最後の値が最初に切り落とされます。まだ残りの空きスペースが不十分な場合、最後から 2 番目が切り落とされ、以下同様に続きます)。極端な場合、このフィールド用にまったく空きスペースがない場合は、値はゼロバイトに切り落とされます。

上記の最初の例では(FB='L1,*,AA,10,A.')、レコードバッファセグメントが非常に短い場合、固定長が指定されたフィールドまたは長さがゼロ(0)のフィールドには切り落としが許可されていないため、切り落としは発生しません。 切り落としは発生しませんが、ニュークリアスはレスポンスコード 53(レコードバッファが非常に小さい)を返します。

Adabas ニュークリアスにより実行される読み取りコマンドでのみ、アスタリスク表記が指定された値が切り落とされます。更新コマンドでは切り落としは発生しません。 さらに、ADACMP ユーティリティは、アスタリスク表記が指定された値を切り落としません。

ロング英数字フィールドとラージオブジェクトフィールドの比較

関連のある LA フィールドおよび LB フィールド機能を比較している次の表は、データベースのフィールドを定義する際にどちら使用するかを決定するのに役立ちます。

機能 LA フィールドの動作 LB フィールドの動作
フォーマットバッファ内のゼロフィールド長指定 対応するレコードバッファエリア内の 2 バイトが、LA フィールドの実際の長さを格納するために使用されます。 対応するレコードバッファエリア内の 4 バイトが、LB フィールドの実際の長さを格納するために使用されます。
データレコードストレージ 英数字フィールドおよびワイド文字フィールドが、圧縮レコード内に格納されます。

すべての長い値は、同じ圧縮レコード内に収まらなければなりません。 シンプルデータレコードまたはスパンドデータレコードの最大長により、格納できる長い値の数および長さが制限されます。 複数の長い値がレコードに含まれると、問題となる場合があります。

一部の LB フィールド値(253 バイト超)は、別のラージオブジェクトファイル(LOB ファイル)にオフラインで格納され、LOB ファイル内の LB フィールド値への参照のみがデータレコードに含まれます。 これにより、通常のフィールド、または LA フィールドを使用するより、単一のデータレコードに長いオブジェクトを格納できるようになります。 ただし、この動作により、LB フィールドの実行時およびファイルメンテナンスのパフォーマンスのオーバーヘッドが増加します。

小さな LB フィールド値(253 バイト以下)は圧縮レコード内に直接格納されます。 これにより、小さな値に対するパフォーマンスは向上しますが、同一の圧縮レコードに格納可能な小さな LB フィールドのオカレンス数が制限されます。

フォーマットバッファ内のアスタリスク(*)フィールド長表記 すべての長さの LA フィールドがサポートされます。 すべての長さの LB フィールドがサポートされます。
最大長が 16,381 バイト以下の格納オブジェクト 英数字またはワイド文字の LA フィールドを使用できます。 これにより、LB フィールドのオーバーヘッドを避けることができますが、単一レコードに格納できるフィールドの数が制限されます。 英数字の LB フィールドを使用できます。
最大長が 16,381 バイトを超える格納オブジェクト サポートされません。 16,381 バイトを超えるオブジェクトがサポートされます。
シンプルデータレコードまたはスパンドデータレコードに収まらない非常に多くのラージオブジェクト サポートされません。 複数のラージオブジェクトがサポートされます。

Top of page

ロング英数字(LA)フィールドの変更点

今回のリリースでは、ロング英数字(LA)フィールドで次の更新が行われました。

LA フィールドと LB フィールドの違いについては、「ロング英数字フィールドとラージオブジェクトフィールドの比較」を参照してください。

Top of page

FDT の変更点

FDT のフィールド定義の変更点は次のとおりです。

Top of page