プログラムが入力のみまたは出力のみのためにデータベース・ファイルを順次に処理する場合には、「デー タベース・ファイルによる一時変更 (OVRDBF)」または「データベース・ファイルのオープン
(OPNDBF)」コマンドで順次のみの処理 (SEQONLY) パラメーターを指定することによって、パフォーマン スを向上させることができます。
SEQONLY 処理を使用するには、ファイルが入力専用または出力専用としてオープンされていなければな
りません。NBRRCDS パラメーターは、オープン・オプションのどのような組み合わせとも使用できま す。(「Query ファイルのオープン (OPNQRYF)」コマンドでは、可能な場合には常に順次のみの処理が行 われます。) 高水準言語の仕様によっては、高水準言語でも省略時として順次のみの処理が使用されること があります。たとえば、ファイルを入力専用にオープンし、高水準言語プログラムに指定されている唯一の ファイル操作が順次読み取り操作である場合には、高水準言語は自動的に順次のみの処理を要求します。
注: ファイルの位置付け操作は順次読み取り操作とはみなされないので、位置付け操作を含む高水準言語プ ログラムは、順次のみの処理を自動的には要求しません。 (ファイルの位置付け操作例としては、RPG 言 語の SETLL 操作、および COBOL 言語の START 操作があります。) 高水準言語プログラムが順次のみ の処理を自動的に要求できなくても、「データベース・ファイルによる一時変更 (OVRDBF)」コマンドの
SEQONLY パラメーターを使用して要求できます。
順次のみの処理を指定する場合には、システムのデータベース主記憶域とジョブの内部データ主記憶域との 間で 1 単位として転送されるレコードの数を指定することもできます。順次のみの処理で転送するレコー ドの数を指定しない場合には、システムが、4096 バイト・バッファーに見合うレコードの数に基づいて、
レコードの数を計算します。
さらに、システムでは、補助記憶装置と主記憶域との間で 1 単位として転送されるレコードの数を制御す る方法も用意されています。データが物理的に保管されている順序でデータを読み取る場合には、
OVRDBF コマンドで NBRRCDS パラメーターを使用することによって、ジョブのパフォーマンスを向上
させることができます。
注: 物理データがアクセス・パスと同じ順番でない限り、順次のみの処理をキー順アクセス・パス・ファイ ルで使用するべきではありません。SEQONLY(*YES) 処理は物理データがアクセス・パスの順番に再編成 されるまで、アプリケーションのパフォーマンスを低下させる原因となる場合があります。
順次のみの処理でのオープンに関する考慮事項:
ここでは、順次のみの処理を指定した場合のファイルのオープンに関する考慮事項を示します。
システムが順次のみの処理を行うことができないと判定した場合には、順次のみの処理の要求は受け入れら れないことを示すメッセージがプログラムに送られますが、その場合でも、ファイルは処理に備えてオープ ンされます。
v プログラムが出力専用でメンバーをオープンし、SEQONLY(*YES) を指定しており (レコード数は指定 していない) 、しかもオープンされるメンバーが論理メンバーまたは固有キーを持つ物理メンバーである か、あるいは物理メンバーへのアクセス・パスが他にある場合には、 SEQONLY(*YES) は
SEQONLY(*NO) に変更されるので、出力操作時に、起こり得るエラー (たとえば、重複キー、変換マッ
ピング・エラー、選択/除外エラー) をプログラムが処理できるようになります。システムに順次のみの 処理を実行させたい場合には、*YES の値とレコード数の指定の両方を含むように SEQONLY パラメー ターを変更してください。
v 順次のみの処理は、入力専用 (読み取り) または出力専用 (追加) の操作についてのみ指定することがで きます。プログラムで更新または削除の操作を指定している場合には、システムは順次のみの処理を認 めません。
v ファイル出力用にオープンする場合には、そのファイルは、物理ファイルであるか、または 1 つの物理 ファイル・メンバーが基礎になっている論理ファイルであることが必要です。
v メンバーが出力専用にオープンされている場合しか、順次のみの処理をコミットメント制御とともに指 定することはできません。
v 順次のみの処理が、コミットメント制御を用いてオープンされたファイルについて使用されている場合 に、ジョブのロールバック操作が実行されると、ロールバック操作の間にジョブの記憶域内にあるレコ ードは、システム記憶域に書き込まれず、コミットメント制御トランザクションのジャーナルに反映さ れません。ロールバック操作が特定のコミットメント制御トランザクションに対して実行される前に、
システム記憶域にレコードが書き込まれていない場合は、コミットメント制御トランザクション全体が ジャーナルに反映されません。
v 出力専用の場合には、1 単位として移動するよう指定したレコード数と強制書き出し率が比較され、必 要に応じて自動的に調整されます。レコード数が強制書き出し頻度よりも大きい場合は、レコード数が 強制書き出し頻度と等しくなるように減らされます。逆の場合には、強制書き出し頻度がレコード数と 等しくなるように削減されます。
v メンバーが出力専用としてプログラムによってオープンされ、 SEQONLY(*YES) が指定され (レコード 数は指定されていない) 、しかも重複キー・フィードバックまたは挿入キー・フィードバックが要求され ている場合には、レコードがファイルに挿入される時点でレコードごとのフィードバックが提供される ように、SEQONLY(*YES) は SEQONLY(*NO) に変更されます。
v 以下の条件をすべて満たすならば、1 ブロック内のレコード数は 1 に変更されます。
– メンバーが出力専用のためにオープンされた。
– 順次のみの処理を指定した有効な一時変更操作がない。
– オープンされているファイルは、レコードの増分数がゼロにセットされたため、拡張できないファイ ルである。
– ファイル内の使用できるバイト数が、1 ブロックのレコードに収まるバイト数より小さい。
順次のみの処理を指定せず、Query ファイルのオープン (OPNQRYF) コマンドを使用してファイルをオー プンする場合には、下記の事項を考慮しなければなりません。これらの条件が満たされる場合には、順次の みの処理が行われることを示すメッセージが送られ、Query ファイルがオープンされます。
v OPNQRYF コマンドのグループ・フィールド (GRPFLD) パラメーターに 1 つまたは複数のフィールド 名を指定している場合、あるいは OPNQRYF でグループ処理を要求している場合。
v OPNQRYF コマンドの UNIQUEKEY パラメーターに 1 つまたは複数のフィールド、あるいは *ALL を指定している場合。
v SQL SELECT ステートメントの DISTINCT オプションでビューを使用する場合。この場合は、
SEQONLY(*YES) 処理が自動的に実行されます。
関連概念:
137ページの『「Query ファイルのオープン (OPNQRYF)」コマンドの使用』
「Query ファイルのオープン (OPNQRYF)」コマンドを使用することにより、データベース照会要求を満た すデータベース・レコードのセットに対してファイルをオープンできます。
順次のみの処理での入出力に関する考慮事項:
ここでは、順次のみの処理を指定した場合のファイルに対する入出力操作の考慮事項を示します。
v 入力については、プログラムは入力バッファーから一度に 1 つのレコードを受け取ります。入力バッフ ァーのすべてのレコードが処理されると、システムは自動的に次の 1 組のレコードを読み取ります。
注: レコードが入力バッファーに読み取られた後の変更は、入力バッファーには反映されません。
v 出力については、プログラムは一度に 1 つのレコードを出力バッファーに転送しなければなりません。
出力バッファーがフルになると、システムは自動的にレコードをデータベースに追加します。
注: ジャーナルを使用している場合には、すべての項目が論理的に一緒に起こったかのように、バッファ ー全体が一度にジャーナルに書き込まれます。このジャーナル処理は、レコードがデータベースに追加 される前に行われます。
出力について順次のみの処理を使用する場合には、ファイルに対するすべての変更をそれが起こった時 点で見ることができない場合があります。たとえば、PGMA が使用するファイルに対して順次のみの処 理が指定されていて、 PGMA がファイルに新しいレコードを追加するとします。さらに、バッファー内 のレコードの数として SEQONLY パラメーターで 5 を指定していたとすれば、新しく追加されたレコ ードはバッファーがフルになった時点で初めてデータベースに転送されます。この例では、5 番目のレ コードが追加されてから、初めて最初の 5 つのレコードがデータベースに転送され、システム内の他の ジョブでの処理に使用されることができるようになります。
さらに、出力について順次のみの処理を使用するときには、レコードがバッファーからデータベースへ 移される時点でエラーが発生した場合、それを処理しない限り、レコードがデータベースに追加されな いことがあります。たとえば、バッファーに 5 つのレコードが入っていて、バッファー内の 3 番目の レコードがファイル内の別のレコードと重複するキーを持っており、しかも、ファイルが固有キー・フ ァイルとして定義されているとします。この場合、システムがバッファーの内容をデータベースに転送 すると、最初の 2 つのレコードはデータベースに追加されますが、 3 番目のレコードで重複キー・エ ラーが起こります。このエラーのため、バッファー内の 3 番目、4 番目、および 5 番目のレコードは データベースに追加されません 。
v 出力操作にデータ強制終了機能を使用して、バッファー内のすべてのレコードをデータベースに強制書 き出しをすることができます (ただし、上の例のように、固有キーを持つものとして定義されているファ イルの中で重複キーの原因となったレコードは除かれます)。データ強制終了機能は、ある種の高水準言 語でしか使用することができません。
v 以下の条件をすべて満たすならば、1 ブロック内のレコード数は 1 に変更されます。
– メンバーが出力専用処理または順次のみの処理のためにオープンされた。
– 順次のみの処理を指定した有効な一時変更操作がない。