第 6 章 ファイルハンドラの構成

ファイルハンドラの動作の一部は、構成することができます。これらの動作は、ファイルハンドラ構成ファイルに値を入力するか、ランタイムスイッチを設定するか、または環境変数を設定して変更します。

6.1 構成ファイル

ファイルハンドラ構成ファイルのデフォルトのファイル名は extfh.cfg です。ただし、次のように EXTFH 環境変数を設定し、別のファイル名を使用することもできます。

set EXTFH=/mydir/test.cfg

上記のように記述すると、ファイル名は /mydir/test.cfg に設定されます。

構成ファイルの検索は次のとおりです。

  1. EXTFH 環境変数 (設定されている場合) で指定されたファイル

  2. COBDIR/etc/extfh.cfg

  3. カレントディレクトリの extfh.cfg

プログラムの ライブラリルーチン CBL_CFGREAD_EXTFH に呼び出しをインクルードすることによって、プログラムの実行時にファイルハンドラに構成ファイルを再読み込ませることができます。再読み込みが終了すると、ファイルハンドラは、ストライピングオプションを除き、読み込んだ最新のオプション設定にしたがって動作します。ストライピングオプションは無視します。ライブラリルーチン CBL_CFGREAD_EXTFH の詳細は、CBL_CFGREAD_EXTFH を参照してください。

ファイルハンドラ構成ファイルを使用して、個々のファイルまたはすべてのファイルについて、ファイルハンドラパラメータを変更することができます。すべてのファイルに適用する設定は、次に示すタグの下に一覧表示されます。

[XFH-DEFAULT]

また、個々のファイルに適用する設定は、次のような個々のファイル名の下に一覧表示されます。

[TEST.DAT]

すべてのファイルに対する設定より、個々のファイルに対する設定の方が優先されます。


注: ファイルハンドラ構成ファイルの [タグ] の下で名前=ペアが重複している場合は、最初のエントリのみが使用されます。


6.2 構成オプション

次の表は、ファイルハンドラ構成ファイルで設定できるパラメータのリストです。

パラメータ 説明
BASENAME タグで指定したファイル名をパス名なしで表すことができるようにするかどうかを指定します。
COMMITFLUSH FILESHARE を使用していないプログラムのコンテキストで、COMMIT 文や ROLLBACK 文により、レコードロックを解放するだけでなく、すべてのファイル更新をディスクに書き出すかどうかを指定します。
CONCATNAME '+' 文字を含むファイル名を、通常のファイル名とファイル連結文字のどちらで解釈されるようにするかを指定します。
CONVERTDBSPACE 行順ファイルを読み取るときに、2 バイトの文字集合 (DBCS) の空白文字を ASCII 空白文字に変換できるようにします。
CONVERTEUCKATAKANA 行順ファイルを読み取るときに、EUC シングル幅 2 バイト文字を、等価のダブル幅のカタカナに変換できるようにします。
CONVERTSTATUS 呼び出すプログラムの名前を指定し、ファイルハンドラが処理を完了した後で、返された状態値をエミュレーション用にマップします。
DATACOMPRESS データ圧縮を有効化するかどうかと圧縮の種類を指定します。
DATAFILE OPEN 文に渡されたファイル名を別の名前にマップします。
EXPANDPOSITIONING WRITE AFTER POSITIONING 文 (OS/VS COBOL 互換) を使用するときに、レコードにキャリッジ制御情報を書き込むかどうかを指定します。
EXPANDTAB 行順ファイルまたは行送りファイルで READ 操作中に検出されたタブコードを同じ数の空白文字に拡張するかどうかを指定します。
FASTREAD 索引ファイルを読み取るときに、ファイルハンドラで、データの完全性を保証するための追加確認を実行するかどうかを指定します。
FHREDIR FILESHARE を使用してリモートサーバでのファイル処理を可能にするかどうかを指定します。
FILEMAXSIZE1 呼び出しのロック時に使用するオフセットを維持するために、必要なバイト数を指定します。
FILEPOINTERSIZE 形式 8 の索引ファイルについて、ファイルポインタを格納するために使用するバイト数を指定します。
IDXDATBUF 索引ファイルのデータ部分にアクセスするときに使用するバッファのサイズを指定します。
IDXFORMAT 索引ファイルを作成するときに使用する形式を指定します。
IDXNAMETYPE データファイルと、索引ファイル (存在する場合) の両方のファイル名の形式を指定します。
IGNORELOCK 入力用に開いたファイルを読み取るときに、ロックを無視するかどうかを指定します。
INDEXCOUNT 索引ファイルについてキャッシュする索引ノードの数を指定します。
INDEXFILE 分離した .idx ファイルがある索引ファイルについて、ファイルの索引部分の名前を別の名前にマップします。
INSERTNULL 行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行する場合、印刷不可能な文字の前に NULL 文字 (x"00") を挿入するかどうかを指定します。また、READ 操作中にこれらの NULL 文字を削除するかどうかも指定します。
INSERTTAB 行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行する場合、連続した空白文字をタブコードに置き換えるかどうかを指定します。
KEYCHECK アプリケーションで定義されたキー定義と開いている索引ファイルのキー定義が一致することをファイルハンドラで確認するかどうかを指定します。
KEYCOMPRESS 使用中のキー圧縮の種類を指定します。
LOADONTOHEAP ファイルを開くときに、ファイルをメモリにロードするかどうかを指定します。
LOCKTYPE 使用中のレコードロックの種類を指定します。
LOG ファイルの破壊や自動リカバリといったファイルに関する異常な状態について、後で検証するためにログファイルに記録するかどうかを指定します。
LOGFILENAME LOG オプションがアクティブなときに、ログファイルの名前を指定します。
LSRECDELIM 行順ファイルでレコード区切り文字として使用する文字を指定します。
MAINFRAMEPRINT WRITE AFTER ADVANCING または WRITE BEFORE ADVANCING パラメータを使用しているファイルについて、メインフレームのプリンタ形式 (filetype(11)) を使用するかどうかを指定します。
NAMEOPTIONS OPEN 文に渡す名前に、角かっこ ([ ]) で囲まれたファイルハンドラ指令を含めてよいかどうかを指定します。
NFSFILELOCK UNIX NFS ファイルシステムのレコードロックとファイルロックをアプリケーションで検出できるようにします。
NODESIZE 索引ファイルに使用する索引ノードのサイズを指定します。
NOSEQCHECK 索引ファイルでキーの順番確認を有効化します。
OPENINPUTSHARED 入力用に開いたファイルに LOCK MODE 句を指定していない場合に、このファイルを他のユーザと共有可能にするかどうかを指定します。
OSVSREWRITE 出力用に開いた順ファイルに対して WRITE 文を使用可能にするかどうかを指定します。WRITE 文を使用可能にした場合、これらの WRITE 文は、REWRITE 文と全く同じように動作します。
READSEMA ファイル修正以外の目的で入出力操作を実行する場合に、システムに共有ファイルのセマフォを獲得させるかどうかを指定します。
RELDATBUF 相対ファイルにアクセスするときに使用するバッファのサイズを指定します。
RELRECDELIM 固定長形式の相対ファイルでレコード区切り文字として使用する文字を指定します。
RETRYLOCK ある操作がロックされたレコードに対してアクセスを試行したときに、この操作を再試行するかどうかを指定します。
RETRYOPEN ある操作がロックされたファイルに対してアクセスを試行したときに、この操作を再試行するかどうかを指定します。
RETRYTIME RETRYLOCK パラメータまたは RETRYOPEN パラメータに設定された整数が、試行回数と秒数のどちらを表すかを指定します。
RUNITLOCKDETECT 同じ実行ユニットで実行された別の OPEN 文によりレコードがロックされている場合に、これを検知できるようにするかどうかを指定します。
SEARCHONCREATE ファイルハンドラが、作成中のファイルと同じ名前をもつファイルを探すため、複数ディレクトリパス上の特定のディレクトリを検索するかどうかを指定します。
SEQDATBUF ファイルにアクセスするときに使用するバッファのサイズを指定します。
SKIPLOCK 順読み取り中にロックされたレコードが検出された場合に、現在のレコード ポインタまでジャンプするかどうかを指定します。
SPACEFILL 行順ファイルや行送りファイルに READ 操作を実行する場合、読み取ったデータ以外のレコード領域を空白文字で埋めるかどうかを指定します。
STARTUNLOCK START 操作で、単一レコードのロックが指定されている (WITH LOCK ON MULTIPLE RECORDS 指定が設定されていない) ファイルの既存のロックを解除するかどうかを指定します。
STRIPSPACE 行順ファイルや行送りファイルに WRITE 操作または REWRITE 操作を実行する場合、後続の空白文字を削除するかどうかを指定します。
SUPPRESSADV レコード順ファイルの場合、WRITE 文の ADVANCING 句を無視するかどうかを指定します。
TRACE Xfhtrace を有効化するどうかを指定します。
TRACEFILEEXTEND トレースファイルが存在する場合、そのトレースファイルの最後にトレース情報を書き込むかどうかを決定します。
TRACEFILENAME TRACE オプションがアクティブなときに、生成されるトレースファイルの名前を指定します。
WRITELINE 印刷時の改行動作を指定します。
WRITETHRU ファイルの修正をすぐにディスクに書き出すかどうかを指定します。修正を COBOL システムまたはオペレーティングシステムのどちらかによって内部でバッファに記録し、後でディスクに書き出すこともできます。
警告:FILEMAXSIZE オプションでは、ファイルのオフセットを保存するために内部で使用されるバイト数を指定します。 これは、内部のロック機構にも影響します。 同じファイルを共有するすべてのプログラムで同じ FILEMAXSIZE 設定を使用して、セマフォとレコードロックが適切に処理されるようにし、共有ファイルでのファイルの破損を防ぐ必要があります。

FILEMAXSIZE オプションのデフォルト値は 4 です。この場合には、ファイルのアドレス指定は、Micro Focus システムの初期のバージョンと互換する 32 ビット値に制限されます。FILEMAXSIZE オプションを 8 に設定することもできます。この値を設定すると、NTFS ファイルにアクセスするときに、Windows プラットフォームでのファイルのアドレス指定に最大 64 ビット値を使用できますが、基になるレコードロック機構が変更されてしまいます。

次の場合は、FILEMAXSIZE の値を 8 に設定しないでください。

64 ビットおよび32 ビットのファイルシステムの詳細については、付録の『 ファイルシステム 』を参照してください。

これらの各オプションの有効な設定値とデフォルト値の詳細については、ヘルプトピック  『構成ファイルオプション』を参照してください。

6.3 構成可能な動作

ファイルハンドラ構成ファイルで構成できるファイルハンドラの動作は、次のとおりです。この項では、この動作について詳しく説明します。

6.3.1 大容量ファイルの作成

ファイルハンドラでは、固有の大容量ファイル (2 ギガバイトを超えるファイル) を作成できます。大容量ファイルを作成してアクセスするためには、FILEMAXSIZE 構成オプションを設定する必要があります。このオプションは、順ファイル、行順ファイル、相対ファイルおよび索引ファイルで機能します。大容量索引ファイルの作成に関する詳細については、『大容量索引ファイルの作成』の項を参照してください。すべての構成オプションと同じように、FILEMAXSIZE はすべてのファイルに対しても、個々のファイルに対しても設定できます。


注: 大容量ファイルとして作成されたファイルは、固有の大容量ファイルをサポートしないシステムでは共有できません。また、大容量ファイルに対して別の FILEMAXSIZE ファイル設定を使用しているアプリケーション間では、大容量ファイルを共有できません。


大容量索引ファイルの作成

デフォルトでは、ファイルハンドラは、最大 2 ギガバイトのファイルを処理できます。 ただし、2 ギガバイトより大きい索引ファイルを作成する必要がある場合は、ファイルハンドラ構成ファイルで IDXFORMAT パラメータを 8 に設定し、IDXFORMAT"8" ファイルを作成します。 通常、索引ファイルは .idx ファイルと .dat ファイルに分かれているのに対して、このファイルは単一のファイルとして構成され、最大 32 テラバイトのサイズにすることができます。

多くのオペレーティングシステムでは、ファイルサイズに制限があります (例えば、Windows 95では 2 ギガバイト)。 これらのシステムで大容量ファイルを作成できるようにするには、ストライピングオプションを使用します。ストライピングにより、大容量論理ファイルが必要な数の物理的なファイルに分割されます (最大数 256)。

FILEPOINTERSIZE オプションでは、ファイルポインタのサイズを構成できます。ファイルの大きさが 256 テラバイトを超えない場合は、このオプションを 6 に設定することをお奨めします。

6.3.2 ファイルのストライピング

ファイルストライピングオプションを使用すると、最大 512 ギガバイトの論理ファイルを作成することができます。これらの論理ファイルは、最大 256 個の物理ファイルにより構成されます。

これらの大容量の論理ファイルは複数の物理ファイルで構成されるため、ファイルストライピングをシステム全体に行うと、オペレーティングシステムでファイルハンドルが足りなくなる可能性があります。そのため、ファイルストライピングをシステム全体に行うことはできません。ストライピングするファイルを選択する必要があります。

ファイルをストライピングするには、ファイルハンドラ構成ファイルでファイルに STRIPING=ON パラメータを設定します。

ストライピングされたファイルのヘッダー

ストライピングされたファイルでは、個々のストライプのヘッダーの長さは、128 バイトになります。ヘッダーには、次のフォームの ASCII 文字列が含まれます。

Stripe number nnn of file: filename

この nnn は、ストライプ番号を含む3 桁の番号で、filename は関連ファイルの名前になります。

文字列は、128 バイトのヘッダーの最後まで空白で埋められます。

オプション

ストライピングオプションでは、大文字小文字を区別しません。


注:


STRIPING=[ON/OFF]

ファイルをストライピングするかどうかを指定します。デフォルトの設定は OFF です。

STRIPENAMETYPE=[0/1]

このオプションでは、ストライプに名前を付けるためのファイル命名規則を指定します。デフォルトの設定は 0 です。

StripeNameType を 0 に設定すると、ストライプファイルは基本ファイルと同じ名前になりますが、ファイル拡張子の前にある基本名にストライプ番号が追加されます。例えば、ファイル、 test.dat に 3 個のストライプがある場合は、基本ファイルとそのストライプを次のように表記します。

test.dat - 基本ファイル
test01.dat - ストライプ番号 1
test02.dat - ストライプ番号 2
test03.dat - ストライプ番号 3

基本名が長く、そのままではストライプファイル番号を入れることができない場合は、基本名の右端から文字が削除されます。例えば、ファイル、 testfile.dat に 3 個のストライプがある場合は、ファイルとそのストライプが次のように表記されます。

testfile.dat - 基本ファイル
testfi01.dat - ストライプ番号 1
testfi02.dat - ストライプ番号 2
testfi03.dat - ストライプ番号 3

StripeNameType を 1 に設定すると、ストライプファイル名は基本ファイルと同じ名前になりますが、ファイル名の拡張子の後にストライプ番号が追加されます。基本ファイル名はストライプ、 0 に変更されることに注意してください。例えば、ファイル、 test.dat に 3 個のストライプがある場合は、基本ファイルとそのストライプが次のように表記されます。

test.dat.00
test.dat.01
test.dat.02

MAXSTRIPESIZE=n

個々のストライプの最大サイズをバイト数で指定します。n のデフォルト値は 1 ギガバイト (1,073,741,824 バイト) です。最小値は 65,536 バイトです。最大値は現在のところ 2 ギガバイト (2,147,483,648 バイト) です。

MAXSTRIPEFILES=n

基本ファイル以外のストライプファイル数を指定します。デフォルトでは、17 ファイルが作成されます。つまり、基本ファイルと 16 個のストライプです。n の最小値は 1 で、最大値は 255 です。

MAXSTRIPEDIGITS=n

ストライプに名前を付けるときに、基本ファイルの名前に追加する桁数を指定します。例えば、2 と指定すると、test01.dat となり、5 と指定すると test00001.dat のようになります。5 と指定した場合にオペレーティングシステムでファイル名が制限されていると、tes0001.dat となることがあります。n のデフォルト値は 2 です。最小値は 1 で、最大値は 5 です。

STRIPE-X=path[,n]

ストライプファイルのパスとサイズを指定します。x はストライプ番号、path はストライプがある場所、n はストライプのサイズを示します。n を省略すると、ストライプのサイズは前のストライプと同じになります。

STRIPE-X オプションを一度設定すると、もう一度 STRIPE-X オプションで変更するまで、すべてのストライプに新しいパスとサイズが適用されます。STRIPE- の後に続く数字はストライプ番号で、0 は基本ファイルを表します。基本ファイル以外のストライプには、0 という文字を指定しないでください。

ファイルのストライピングを指定する方法について、次に例を示します。

例 1

ファイル test.dat に、同じサイズの 2 つのストライプを作成すると仮定します。

[test.dat]
Striping=on
Stripe-1=dir2
Stripe-2=dir3

この例では、 test.dat を現在のディレクトリに、test01.dat を dir2 に、test02.dat を dir3 に格納します。

例 2

ファイル test.dat に 5 つのストライプを作成すると仮定します。

[test.dat]
Striping=on
Stripe-0=dir1
Stripe-4=dir2

この例では、test.dattest01.dattest02.dat、およびtest03.datを dir1 に、test04.dattest05.dat を dir2 に格納します。

例 3

ファイル test.dat に 3 個のストライプを作成すると仮定します。

[test.dat]
Striping=on
Stripe-0=dir1,100000000
Stripe-1=dir2,200000000

この例では、test.dat のファイルサイズを 100,000,000 バイトに設定して dir1 に格納し、test01.dat のファイルサイズを 200,000,000 バイトに設定して dir2 に格納します。

6.3.3 データ圧縮

レコード順ファイルまたは索引ファイルでは、データを圧縮し、ディスク領域を節約することができます。

固定長形式の順ファイルにデータ圧縮を指定すると、可変長形式の順ファイルに変換されます。この操作は、REWRITE 文を使用しない限り、プログラムに影響しません。圧縮された順ファイルで圧縮の結果として長さが変更されたレコードに REWRITE 文を実行すると失敗します。

ファイルハンドラ構成ファイルの DATACOMPRESS パラメータを使用すると、ファイルのデータ圧縮を指定することができます。また、プログラムのコンパイル時に、DATACOMPRESS コンパイラ指令を使用してデータ圧縮を指定することもできます。

ファイルのデータ圧縮は、そのファイルに対する SELECT 文の処理時に最後に処理された DATACOMPRESS 指令で決定されます。そのため、プログラムで SELECT 文のすぐ前に次のような形式の行を記述すると、個々のファイルのデータ圧縮を指定することができます。

$SET DATACOMPRESS

別のファイルを処理する前に必ず、 $SET NODATACOMPRESS を解除してください。

6.3.4 キー圧縮

キーを圧縮すると、索引ファイルのキーを圧縮し、ディスク領域を節約できます。キー圧縮には、次の 4 種類があります。

キー圧縮は、ファイルハンドラ構成ファイルの KEYCOMPRESS パラメータで、圧縮の種類を示す次の整数を使用して指定します。

1 重複キーの圧縮
2 先頭文字の圧縮
4 後続空白文字の圧縮
8 後続ヌル文字の圧縮

これらの数字をいくつかまとめて追加すると、圧縮の種類を組み合わせて使用できます (ただし、相互排他的な後続ヌル文字と後続空白文字は一緒に指定することができません)。

また、プログラムのコンパイル時に、KEYCOMPRESS コンパイラ指令を使用してキー圧縮を指定することもできます。

ファイルのキー圧縮は、そのファイルに対する SELECT 文の処理時に最後に処理された KEYCOMPRESS 指令で決定されます。そのため、プログラムで SELECT 文のすぐ前に次のような形式の行を記述すると、個々のファイルのデータ圧縮を指定することができます。

$SET KEYCOMPRESS"8"

他のファイルを処理する前に、$SET NOKEYCOMPRESS を指定すると、キー圧縮を解除することができます。

後続ヌル文字

キーに後続ヌル文字の圧縮を定義すると、キー値の後続ヌル文字はファイルに格納されません。

例えば、30 文字の長さの主キーまたは副キーの最初の 10 文字だけを使用し、残りがヌル文字であるレコードを書き込むとします。圧縮しない場合は、キーの 30 文字すべてが格納されるため、30 バイトが必要になります。後続ヌル文字の圧縮を行うと、11 バイトですみます (10 バイトを最初の 10 文字用に、1 バイトを後続ヌル文字用に使用する)。

後続空白文字

キーに後続空白文字の圧縮を定義すると、キー値の後続空白文字はファイルに格納されません。

例えば、30 文字の主キーまたは副キーで最初の10文字のみを使用し、残りが空白文字であるレコードを書き込むとします。圧縮をしない場合、キーの 30 文字すべてが格納されるため、30 バイトが必要になります。後続空白文字の圧縮を行うと、11 バイトだけですみます (10 バイトを 10 文字用に、1 バイトを後続空白文字用に使用する) 。

先頭文字

キーに先頭文字の圧縮を定義すると、前のキーの先頭文字と一致する先頭文字はすべてファイルに格納されません。

例えば、次のキー値を持つレコードを書き込むとします。

AXYZBBB BBCDEFG BBCXYZA BBCXYEF BEFGHIJ CABCDEF

先頭文字を圧縮すると、索引ファイルに実際に格納されるキーは、次のようになります。

AXYZBBB BBCDEFG XYZA EF EFGHIJ CABCDEF

カウントフィールドは、前のキーと同じ先頭文字の数を示します。

重複キー

副キーに重複キーの圧縮を定義すると、最初の重複キーのみがファイルに格納されます。

例えば、ABC という副キー値をもつレコードを書き込むとします。重複キーの圧縮を有効化し、同じキー値を持つ別のレコードを書き込んだ場合は、重複した値が物理的にファイルに格納されません。

6.4 ランタイムスイッチ

ファイルの処理に影響するランタイムスイッチは、次の 3 つです。

スイッチ
説明
L2 レコードターミネータスイッチ。行順ファイルのレコードターミネータを指定します。
N ヌルスイッチ。行順ファイルにヌル文字を挿入できます。
T タブスイッチ。 行順ファイルにタブ記号を挿入できます。

6.4.1 レコードターミネータスイッチ (L2)

行順ファイルの場合、ランタイムシステムでは、デフォルトで改行文字 (x"0A") がすべての環境のレコードターミネータとなります。ただし、DOS、Windows、および OS/2 ののほとんどのエディタでは、改行文字を後に伴うキャリッジ リターン文字 (x"0D0A") がレコードターミネータとなります。

V3.1 以前の COBOL システムでは、x"0A" が UNIX 用のレコード ターミネータとして扱われていましたが、DOS、Windows、および OS/2 では、x"0D" がターミネータとして扱われていました。

クロスプラットフォームアプリケーションを作成している場合や、COBOL の旧バージョンを使用して作成されたプログラムとの互換性が必要な場合は、使用している環境でレコードターミネータとして使用される文字をレコードターミネータスイッチで指定します。

-L2 (デフォルト) を指定すると、x"0A" がレコードターミネータとなります。

+L2 を指定すると、x"0D0A" がレコードターミネータとなります。

6.4.2 ヌルスイッチ (N)

ヌル スイッチを使用すると、行順ファイルで値が x"20" 未満のデータ文字の前にヌル文字 (x"00") を挿入できます。ファイルに ASCII 以外のデータを挿入する場合は、ヌルの挿入を有効化する必要があります。

デフォルトでは、ヌルスイッチを有効 (+N) に設定します。

-N で実行しているアプリケーションで作成されたファイルの場合は、このファイルを同じ方法を実行しているアプリケーションで読み返す必要があります。+N で実行しているアプリケーションで作成されたファイルについても同様です。例えば、制御文字をプリンタに直接送信しているプログラムがあり (プリンタを 132 文字モードに切り換える場合など) 、プリンタでその制御文字が認識されない場合は、-N スイッチが必要になります。

6.4.3 タブスイッチ (T)

タブスイッチはデフォルトで無効 (-T) に設定されています。タブスイッチは、行順ファイルの余分な空白をタブ文字 (x"09") に圧縮します。これによって、ファイル内に余分な空白がなくなります。

+T を設定してファイルを記述している場合は、ファイルの読み取り時に +T を使用する必要があります。-T を設定してファイルを記述している場合は、ファイルの読み取り時に -T を使用する必要があります。

6.5 ファイルバッファリング

ファイルバッファリングでは、ブロックがディスクに書き込まれるときに、ブロックが一杯になるまでバッファ (メモリのブロック) にレコードが書き込まれます。この方法を使用すると、ディスクへのアクセス回数が減り、その結果プログラムが高速化されます。

同様に、ディスクからレコードを読み取る場合も、ブロックがファイルからメモリバッファに読み取られ、レコードはバッファから抽出されます。

ファイルを閉じるときに、ディスクにまだ書き込まれていないデータが書き込まれます。データが書き込まれると、COBOL システムは、オペレーティングシステムに対しファイルを閉じるように指示します。

可変長の順ファイルはデフォルトでバッファに書き出されます。固定長の順ファイルは、環境変数 COBEXTFHBUF が設定されている場合に、バッファに書き出されます。

COBEXTFHBUF は、使用するバッファのサイズを次のように制御します。

COBEXTFHBUF=バッファサイズ
export COBEXTFHBUF

パラメータの内容は次のとおりです。

buffer-size バイト単位のバッファサイズ

C-ISAM ファイルで使用されるバッファサイズは変更できません。

6.5.1 索引のキャッシング

呼び出し可能ファイルハンドラでは、索引ファイルの索引部分に対する読み取りまたは書き込み時にグローバル バッファを使用して速度を上げます。このバッファのサイズは、デフォルトで 16K ですが、EXTFHBUF 環境変数を使用して変更することができます。すべての索引ファイルがこの同じバッファを共有します。

特に大容量の索引ファイル、または多数の副キーをもつファイルを作成または更新する際にパフォーマンスを向上させるには、各ファイルに、ファイル名マッピングの一部としてEXTFHBUF オプションを使用するか、FCD に適切なバイトを設定して、独自の索引バッファを割り当てます。FCD の詳細は、『ファイルハンドラ API』の章を参照してください。ファイルごとに 1 つのバッファを割り当てることができ、そのファイルのキー数の最大値までのすべてのキーがそのバッファを共有できます。

例えば、ファイル (test.dat) には次の 8 つのキーがあります。

ファイルのキー数よりも少ないバッファを割り当てる場合は、キーがバッファを共有する必要があります。

例えば、8 つのキーをもつファイルに 4 つのバッファを割り当てる場合は、次のようになります。

キー 1 と 5 はバッファ 1 を共有する。
キー 2 と 6 はバッファ 2 を共有する。
キー 3 と 7 はバッファ 3 を共有する。
キー 4 と 8 はバッファ 4 を共有する。

このように、バッファを使用するには、より多くのメモリを割り当てる必要があります。このメモリのサイズは、バッファ数 x バッファのサイズになります。


Copyright © 2006 Micro Focus (IP) Ltd. All rights reserved.