前ページへファイルの共有 ファイルハンドラ API次ページへ

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

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

6.1 構成ファイル

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

set EXTFH=/mydir/test.cfg

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

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

[XFH-DEFAULT]

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

[TEST.DAT]

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


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


6.2 構成オプション

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

パラメータ 説明
COMMITFLUSH FILESHARE を使用していないプログラムのコンテキストで、COMMIT 文や ROLLBACK 文により、レコードロックを解放するだけでなく、すべてのファイル更新をディスクに書き出すかどうかを指定します。
CONVERTSTATUS 呼び出すプログラムの名前を指定し、ファイルハンドラが処理を完了した後で、返された状態値をエミュレーション用にマップします。
DATACOMPRESS データ圧縮を有効化するかどうかと圧縮の種類を指定します。
DATAFILE OPEN 文に渡されたファイル名を別の名前にマップします。
EXPANDPOSITIONING WRITE AFTER POSITIONING 文 (OS/VS COBOL 互換) を使用するときに、レコードにキャリッジ制御情報を書き込むかどうかを指定します。
EXPANDTAB 行順ファイルまたは行送りファイルで READ 操作中に検出されたタブコードを同じ数の空白文字に拡張するかどうかを指定します。
FASTREAD 索引ファイルを読み取るときに、ファイルハンドラで、データの完全性を保証するための追加確認を実行するかどうかを指定します。
FHREDIR FILESHARE を使用してリモートサーバでのファイル処理を可能にするかどうかを指定します。
FILEMAXSIZE 呼び出しのロック時に使用するオフセットを維持するために、必要なバイト数を指定します。
FILEPOINTERSIZE 形式 8 の索引ファイルについて、ファイルポインタを格納するために使用するバイト数を指定します。
IDXDATBUF ファイルのデータ部分にアクセスするときに使用するバッファのサイズを指定します。
IDXFORMAT 索引ファイルを作成するときに使用する形式を指定します。
IDXNAMETYPE データファイルと、索引ファイル (存在する場合) の両方のファイル名の形式を指定します。
IGNORELOCK 入力用に開いたファイルを読み取るときに、ロックを無視するかどうかを指定します。
INDEXCOUNT 索引ファイルについてキャッシュする索引ノードの数を指定します。
INDEXFILE 分離した .idx ファイルがある索引ファイルについて、ファイルの索引部分の名前を別の名前にマップします。
INSERTNULL 行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行する場合、印刷不可能な文字の前に NULL 文字 (x"00") を挿入するかどうかを指定します。また、READ 操作中にこれらの NULL 文字を削除するかどうかも指定します。
INSERTTAB 行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行する場合、連続した空白文字をタブコードに置き換えるかどうかを指定します。
KEYCHECK アプリケーションで定義されたキー定義と開いている索引ファイルのキー定義が一致することをファイルハンドラで確認するかどうかを指定します。
KEYCOMPRESS 使用中のキー圧縮の種類を指定します。
LOCKTYPE 使用中のレコードロックの種類を指定します。
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 ファイルにアクセスするときに使用するバッファのサイズを指定します。
RETRYLOCK ある操作がロックされたレコードに対してアクセスを試行したときに、この操作を再試行するかどうかを指定します。
RETRYOPEN ある操作がロックされたファイルに対してアクセスを試行したときに、この操作を再試行するかどうかを指定します。
RETRYTIME RETRYLOCK パラメータまたは RETRYOPEN パラメータに設定された整数が、試行回数と秒数のどちらを表すかを指定します。
RUNITLOCKDETECT 同じ実行ユニットで実行された別の OPEN 文によりレコードがロックされている場合に、これを検知できるようにするかどうかを指定します。
SEQDATBUF ファイルにアクセスするときに使用するバッファのサイズを指定します。
SKIPLOCK 順読み取り中にロックされたレコードが検出された場合に、現在のレコード ポインタまでジャンプするかどうかを指定します。
SPACEFILL 行順ファイルや行送りファイルに READ 操作を実行する場合、読み取ったデータ以外のレコード領域を空白文字で埋めるかどうかを指定します。
STRIPSPACE 行順ファイルや行送りファイルに WRITE 操作または REWRITE 操作を実行する場合、後続の空白文字を削除するかどうかを指定します。
SUPPRESSADV レコード順ファイルの場合、WRITE 文の ADVANCING 句を無視するかどうかを指定します。
TRACE Xfhtrace を有効化するどうかを指定します。
TRACEFILENAME TRACE オプションがアクティブなときに、生成されるトレースファイルの名前を指定します。
WRITETHRU ファイルの修正をすぐにディスクに書き出すかどうかを指定します。修正を COBOL システムまたはオペレーティングシステムのどちらかによって内部でバッファに記録し、後でディスクに書き出すこともできます。

次に、これらのパラメータについて詳しく説明します。


COMMITFLUSH

FILESHARE を使用していないプログラムのコンテキストで、COMMIT 文や ROLLBACK 文により、レコードロックを解放するだけでなく、すべてのファイル更新をディスクに書き出すかどうかを指定します。

このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。

COMMITFLUSH={ON|OFF}

デフォルト:    OFF


CONVERTSTATUS

CONVERTSTATUS パラメータは、呼び出すプログラムの名前を指定し、ファイルハンドラが処理を完了した後で、返された状態値をエミュレーション用にマップします。次の 3 つのプログラムが製品に組み込まれています。


注: NOANS85 または ANS85"SYNTAX" コンパイラ指示セットを使用してコンパイルする場合に使用できるのは、これらのプログラムのみです。


このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。

CONVERTSTATUS=program

デフォルト:    none


DATACOMPRESS

DATACOMPRESS パラメータは、データ圧縮を有効化するかどうかと圧縮の種類を指定します。この指令は、レコード順ファイルと索引ファイルにのみ影響を与えます。

この値を 0 に設定すると、データ圧縮は実行されません。0 以外の数値は、圧縮の種類を示します。

DATACOMPRESS=integer

この integer には次の数値を指定できます。

0 データ圧縮を実行しない。
1 ランレングスエンコーデング。
3 ダブルバイト (DBCS) 文字のランレングスエンコーデング。

デフォルト:    0


DATAFILE

DATAFILE パラメータは、OPEN 文に渡されたファイル名を別の名前にマップします。この名前には、完全パス情報を含めることができます。

DATAFILE=name

デフォルト:    none


EXPANDPOSITIONING

WRITE AFTER POSITIONING 文 (OS/VS COBOL 互換) を使用するときに、レコード領域の最初の文字にキャリッジ制御情報を保持できます。EXPANDPOSITIONING パラメータは、書き出すレコードにこのキャリッジ制御情報を含めるかどうかを決定します。

EXPANDPOSITIONING={ON|OFF}

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

OFF キャリッジ制御情報も含め、すべてのレコードを書き出します。
ON 最初の文字を使用してキャリッジ制御を判別してから、この文字を出力から削除します。

デフォルト:    OFF


EXPANDTAB

EXPANDTAB パラメータは、行順ファイルまたは行送りファイルで READ 操作中に検出されたタブコードを同じ数の空白文字に拡張するかどうかを指定します。

EXPANDTAB={ON|OFF}

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

OFF タブコードは変更しません。
ON タブコードを同じ数の空白文字に拡張します。

デフォルト:    ON


FASTREAD

FASTREAD パラメータは、索引ファイルを読み取るときに、ファイルハンドラで、データの完全性を保証するための追加確認を実行するかどうかを指定します。

FASTREAD={ON|OFF}

固定長の、非圧縮索引ファイルで読み取りの効率化を図るには、FASTREAD を ON に設定します。

デフォルト:     OFF


FHREDIR

FHREDIR パラメータは、FILESHARE を使用してリモートサーバでのファイル処理を可能にするかどうかを指定します。

このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。

FHREDIR を ON に設定すると、ファイルハンドラは、オープン時に名前を確認して、ファイルをローカルで処理するかどうかを判断します。

FHREDIR={ON|OFF}

デフォルト:     OFF


FILEMAXSIZE

FILEMAXSIZE パラメータは、 呼び出しのロック時に使用するオフセットを維持するために、必要なバイト数を指定します。

FILEMAXSIZE={4|8}

この場合のパラメータの値は次のとおりです。

4 ロックの互換性は維持しますが、個々のファイルサイズは 2 ギガバイトに制限されます。
8 ファイルサイズは制限されません。

この COBOL システムと Micro Focus 製品の初期のバージョンを使用してファイルに同時にアクセスする必要がある場合は、FILEMAXSIZE=4 を使用します。

デフォルト:    4


FILEPOINTERSIZE

形式 8 の索引ファイルについて、FILEPOINTERSIZE パラメータはファイルポインタを格納するために使用するバイト数を指定します。

FILEPOINTERSIZE={6|8}

この場合のパラメータの値は次のとおりです。

6 6 バイトを使用し、ファイルのサイズは最大 256 テラバイトです。
8 8 バイトを使用し、ファイルのサイズは 256 テラバイト以上にすることができます。

FILEPOINTERSIZE=8 オプションでは、ファイルポインタを格納するためにより多くの領域を使用します。その結果、ファイルサイズが多少増える場合があります。

デフォルト:    6


IDXDATBUF

IDXDATBUF パラメータは、ファイルのデータ部分にアクセスするときに使用するバッファのサイズを指定します。

索引とデータが同じ物理ファイルに格納されているファイルでは、この指令は使用できません。

IDXDATBUF=integer

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

integer 入力した値が、その値以上の、次の2の累乗数に丸められます。

バッファリングを使用しない場合は、integer を 0 に設定します。

ファイルの作成中は、ゼロ以外の値が有効です。ゼロ以外の値を指定しないと、パフォーマンスは向上せず、逆に低下する場合もあります。

デフォルト:    0


IDXFORMAT

IDXFORMAT パラメータは、索引ファイルを作成するときに使用する形式を指定します。

IDXFORMAT=integer

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

integer ファイル形式を指定します。

integer には次の値のどれか 1 つを指定できます。

0 デフォルト形式。Server Express では、この値は固定長ファイルの場合は形式 1 (C-ISAM) および可変長ファイルの場合は形式 3 になります。
1 C-ISAM
3 Micro Focus のデフォルトの索引ファイル形式
4 高速の重複キー処理用に最適化された形式
5 予約値
6 予約値
8 大容量索引ファイル形式

デフォルト:    3


IDXNAMETYPE

IDXNAMETYPE パラメータは、データファイルと、索引ファイル (存在する場合) の両方のファイル名の形式を指定します。

IDXNAMETYPE={0|1|2}

索引ファイル (ある場合) の名前をデータファイルの名前から派生させる方法を指定するパラメータの値は、次のとおりです。

0 すべての拡張子を廃棄して、拡張子 .idx を追加する。
1 単純に拡張子 .idx を追加する。
2 拡張子 .dat を追加してデータファイル名を変更する以外は、1 と同じ。

例えば、ファイルハンドラに表示されるデータファイル名が abc.def の場合は、このオプションにより、上記に示した次のデータファイル名と索引ファイル 名が示されます。

0    abc.def および abc.idx
1    abc.def および abc.def.idx
2     abc.def.dat および abc.def.idx

デフォルト:    0


IGNORELOCK

IGNORELOCK パラメータは、入力用に開いたファイルを読み取るときに、ロックを無視するかどうかを指定します。

IGNORELOCK= {ON|OFF}

デフォルト:    OFF


INDEXCOUNT

INDEXCOUNT パラメータは、索引ファイルについてキャッシュする索引ノードの数を指定します。

INDEXCOUNT=node-count

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

node-count キャッシュされるノード数。4〜32の任意の値を指定できます。通常は、8〜16が適性値ですが、この値は索引キーの数とサイズによって異なります。

デフォルト    8


INDEXFILE

分離した .idx ファイルがある索引ファイルの場合は、ファイルの索引部分の名前を別の名前にマップします。この名前には、完全パス情報を含めることができます。

INDEXFILE=name

デフォルト    none


INSERTNULL

行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行する場合、印刷不可能な文字の前に NULL 文字 (x"00") を挿入するかどうかを指定します。また、READ 操作中にこれらの NULL 文字を削除するかどうかも指定します。

INSERTNULL={ON|OFF}

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

OFF 印刷不可能な文字の前には NULL 文字を挿入しません。READ 操作中に NULL 文字を削除しません。
ON 印刷不可能な文字の前に NULL 文字を挿入します。READ 操作中に NULL 文字を削除します。

デフォルト:    ON。N ランタイムスイッチの設定は、デフォルト設定に影響する場合があります。


INSERTTAB

行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行する場合、連続した空白文字をタブコードに置き換えるかどうかを指定します。

INSERTTAB= {ON|OFF}

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

OFF 連続した空白文字をタブコードに置き換えません。
ON 連続した空白文字をタブコードに置き換えます。

デフォルト:    OFF。T ランタイムスイッチの設定はデフォルト設定に影響する場合があります。


KEYCHECK

KEYCHECK パラメータは、索引ファイルに属するすべてのキーがアプリケーションで定義されていることをファイルハンドラで確認するかどうかを指定します。

KEYCHECK={ON|OFF}

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

ON すべてのキー定義を指定し、一致させる必要があります。一致しない場合は、3/9 エラーが返されます。
OFF キーの定義をまったく行わずにファイルを開きます。ファイル内のキーと一致しないキーがある場合は、そのキーを明示的に参照する入出力操作(KEY 句を含む READ または START など)はいずれも、3/9 エラーとなります。

デフォルト:    ON


KEYCOMPRESS

KEYCOMPRESS パラメータは、使用中のキー圧縮の種類を指定します。

KEYCOMPRESS=integer

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

integer 圧縮の種類を指定します。

integer は、次の値の 1 つをとることができます。

0 キー圧縮を使用しません。
1 重複キー圧縮を使用します。
2 先行文字圧縮を使用します。
4 後続空白圧縮を使用します。
8 後続ヌル圧縮を使用します。

さまざまな種類の圧縮を組み合わせて使用するには、有効な数値を合計して使用ます。例えば、3 で重複キー圧縮と先行文字圧縮を指定します。

後続空白圧縮と後続ヌル圧縮は同時に指定できません。KEYCOMPRESS パラメータは、ファイルに属するすべての索引のキー圧縮に影響します。

デフォルト:    0


LOCKTYPE

LOCKTYPE パラメータは、使用中のレコードロックの種類を指定します。

LOCKTYPE=integer

この場合のパラメータの値は次のとおりです。

integer 圧縮の種類を指定します。

integer は次の値の1つをとります。

0 プログラムは、ロックされたレコードを読み取ることができますが、他の方法でレコードにアクセスすることはできません。この方法は、COBOL システムの標準の方法です。
1 プログラムは、ロックされたレコードにまったくアクセスできません。この方法は、COBOL 以外の言語で使用されます。
2 開かれているファイルと同じベース名の新しいファイルを作成します。ただし、拡張子は .lck です。レコードロックはすべてこのファイルに記録されます。

デフォルト:    0


MAINFRAMEPRINT

WRITE AFTER ADVANCING または WRITE BEFORE ADVANCING パラメータを使用しているファイルについて、メインフレームのプリンタ形式 (filetype(11)) を使用するかどうかを指定します。

MAINFRAMEPRINT=[ON|OFF]

デフォルト:    OFF


NAMEOPTIONS

NAMEOPTIONS パラメータは、OPEN 文に渡す名前に、角かっこ ([]) で囲まれたファイルハンドラ指令を含めてよいかどうかを指定します。例えば、次のようになります。

fil1[PRINTER] 

このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。

NAMEOPTIONS=[ON|OFF]

OFF に設定すると、角かっことそのかっこで囲まれた文字は、ファイル名の一部とみなされます。

デフォルト:    OFF


NFSFILELOCK

NFSFILELOCK パラメータは、UNIX NFS ファイルシステムのレコード ロックとファイル ロックをアプリケーションで検出できるようにします。

NFSFILELOCK={ON|OFF|HP}

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

OFF Windows アプリケーションでは、UNIX NFSシステムのレコードロックとファイルロックは検出できません。
ON UNIX NFS ファイルシステムのレコードロックとファイルロックをプログラムで検出できます。
HP Hewlett-Packard システムにアクセスしている場合は、HP を指定します。

デフォルト:    OFF


NODESIZE

NODESIZE パラメータは、索引ファイルに使用する索引ノードのサイズを指定します。

NODESIZE={512|1024|4096} 

最大のキーが 1016 バイトを超える場合の、デフォルトのノードのサイズは 4096 です。

ほとんどの場合、適切なデフォルトのノードのサイズをファイルハンドラで扱えるようにする必要があります。ただし、ファイルのサイズが問題になる場合は、ノードのサイズを小さくすると索引ファイルのサイズも小さくなりますが、ツリーの階層が増えると、処理時間も長くなることに注意してください。

デフォルト:    1024


NOSEQCHECK

NOSEQCHECK パラメータは、索引ファイルでキーの順番確認を有効化します。

NOSEQCHECK={ON|OFF} 

このパラメータを ON に設定すると、順アクセスモードで開かれている索引ファイルに任意の順序でレコードを書き込むことができます。ON に設定しない場合は、レコードを、主キーの昇順で書き込む必要があります。

このオプションは、K ランタイムスイッチの代わりになります。


注: プログラム自体で索引ファイルにレコードを書き込む順序は、NOSEQCHECK 構成オプションではなく、ACCESS SEQUENTIAL または ACCESS DYNAMIC 構文を使用して制御しすることを強くお奨めします。


デフォルト:    OFF


OPENINPUTSHARED

OPENINPUTSHARED パラメータは、入力用に開いたファイルに LOCK MODE 句を指定していない場合、このファイルを他のユーザと共有可能にするかどうかを指定します。

OPENINPUTSHARED={ON|OFF}

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

OFF システムは、ファイルに対し LOCK MODE IS MANUAL を指定しているかのように動作します。つまり、他のユーザはファイルに対し LOCK MODE を指定していれば、入出力用にファイルを開くことができます。
ON 他のユーザは、入力用にのみファイルを開くことができます。

デフォルト:    OFF


OSVSREWRITE

OSVSREWRITE パラメータは、出力用に開いた順ファイルに対して WRITE 文を使用可能にするかどうかを指定します。WRITE 文を使用可能にした場合は、これらの WRITE 文が、REWRITE 文と全く同じように動作します。

このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。

OSVSREWRITE={ON|OFF}

デフォルト:    OFF


READSEMA

READSEMA パラメータは、ファイル修正以外の目的で入出力操作を実行する場合に、システムに共有ファイルのセマフォを獲得させるかどうかを指定します。

READSEMA={ON|OFF}

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

ON READ および START 操作を含む、すべてのファイル操作に対してセマフォを獲得させます。
OFF READ および START などの操作中は共有ファイルのセマフォを獲得させません。

ファイルを複数のユーザが読み込む場合は、このパラメータを ON に設定してスループットを拡大させます。

デフォルト:    ON


RELDATBUF

RELDATBUF パラメータは、ファイルにアクセスするときに使用するバッファのサイズを指定します。

RELDATBUF=integer

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

integer 入力した値を、その値以上の次の2の累乗に丸めます。

0 を指定している場合は、バッファリングは使用できません。

ゼロ以外の値は、次の状況で有効です。

ただし、上記以外の場合にゼロ以外の値を設定してもパフォーマンスは向上せず、逆に低下する場合もあります。

デフォルト:    4096


RETRYLOCK

RETRYLOCK パラメータは、ある操作がロックされたレコードに対してアクセスを試行したときに、この操作を再試行するかどうかを指定します。

RETRYLOCK={ON|OFF|NOSTATUS|integer}

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

OFF 再試行しません。
ON ロックが検出されなくなるまで操作を再試行します。
NOSTATUS 状態フィールドが定義されていないファイルに対して操作を再試行します。
integer ロックされたレコードの状態が返されるまで操作を再試行する場合の試行回数または秒数を指定します。『RETRYTIME』パラメータの項も参照してください。

デフォルト:     OFF


RETRYOPEN

ある操作がロックされたファイルに対してアクセスを試行したときに、RETRYOPEN パラメータは、この操作を再試行するかどうかを指定します。

RETRYOPEN={ON|OFF|integer}

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

OFF 再試行しません。
ON ロックが検出されなくなるまで操作を再試行します。
integer ロックされたレコードの状態が返されるまで操作を再試行する場合の試行回数または秒数を指定します。『RETRYTIME』パラメータも参照してください。

デフォルト:    OFF


RETRYTIME

RETRYTIME パラメータは、RETRYLOCK パラメータまたは RETRYOPEN パラメータに設定された整数が、試行回数と秒数のどちらを表すかを指定します。

RETRYTIME={ON|OFF}

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

OFF 整数は試行回数を示します。
ON 整数は秒数を示します。

デフォルト:     OFF


RUNITLOCKDETECT

RUNITLOCKDETECT パラメータは、同じ実行ユニットで実行された別の OPEN 文によりレコードがロックされている場合に、これを検知できるようにするかどうかを指定します。

RUNITLOCKDETECT が ON の場合でも、オペレーティングシステムによってサポートされている場合は、特定の実行ユニット内に設定されたロックが検出されます。

RUNITLOCKDETECT={ON|OFF}

デフォルト:    OFF


SEQDATBUF

SEQDATBUF パラメータは、ファイルにアクセスするときに使用するバッファのサイズを指定します。

SEQDATBUF=integer

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

integer 入力した値を、その値以上の次の 2 の累乗に丸めます。

デフォルト:    4096


SKIPLOCK

SKIPLOCK パラメータは、順読み取り中にロックされたレコードが検出された場合に、現在のレコード ポインタまでジャンプするかどうかを指定します。

SKIPLOCK={ON|OFF}

デフォルト:    OFF


SPACEFILL

SPACEFILL パラメータは、行順ファイルや行送りファイルに READ 操作を実行する場合に、読み取ったデータ以外のレコード領域を空白文字で埋めるかどうかを指定します。

SPACEFILL={ON|OFF}

デフォルト:    ON


STRIPSPACE

STRIPSPACE パラメータは、行順ファイルや行送りファイルに WRITE 操作または REWRITE 操作を実行する場合に、後続の空白文字を削除するかどうかを指定します。

STRIPSPACE={ON|OFF}

デフォルト:    ON


SUPPRESSADV

レコード順ファイルの場合に、WRITE 文の ADVANCING 句を無視するかどうかを指定します。

SUPPRESSADV={ON|OFF}

デフォルト:    OFF


TRACE

ファイルハンドラトレースモジュール、 Xfhtrace を指定すると、COBOL ファイルで発生した問題を診断する場合に役立ちます。

Xfhtrace モジュールは、ファイルハンドラ操作をトレースして、トレース ファイルに対するすべての動作のログを記録します。

TRACE パラメータは、Xfhtrace を有効化するどうかを指定します。

TRACE={ON|OFF}

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

OFF トレースファイルを生成しません。
ON トレースを、個々のファイル、または[XFH-DEFAULT] タグの下で指定する場合はすべてのファイルに設定します。

デフォルト:     OFF

個々のファイルの入出力のトレース

1 つ以上の個々の索引ファイルに対してトレースを有効または無効にすることができます。トレースをデフォルトで無効に設定し、問題が発生したファイルに対してのみトレースを有効にすると、トレースファイルのサイズを常に最小にしておくことができます。


TRACEFILE

TRACEFILE パラメータは、TRACE オプションがアクティブなときに、作成するトレースファイルの名前を指定します。

このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT] タグの下にあります。このパラメータを個々のファイルに対して設定することはできません。

TRACEFILE=filename

デフォルト:    XFHTRACE.XFH


WRITETHRU

WRITETHRU パラメータは、ファイルの修正をただちにディスクに書き出すかどうかを指定します。修正を COBOL システムまたはオペレーティングシステムのどちらかによって内部でバッファに記録し、後でディスクに書き出すこともできます。

このパラメータを ON に設定すると、セキュリティを向上させることができますが、パフォーマンスは大幅に低下します。

WRITETHRU={ON|OFF}
OFF 修正を後で書き出します。
ON ファイルを更新する各操作が完了する前にすべての修正を必ずディスクに書き出します。

デフォルト:    OFF


6.2.1 構成可能な動作

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

6.2.1.1 大容量ファイルの作成

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


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


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

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

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

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

6.2.1.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.2.1.3 データ圧縮

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

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

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

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

$SET DATACOMPRESS

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

6.2.1.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.3 ランタイムスイッチ

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

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

6.3.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.3.2 ヌルスイッチ (N)

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

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

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

6.3.3 タブスイッチ (T)

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

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

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

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

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

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

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

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

COBEXTFHBUF=バッファサイズ
export COBEXTFHBUF

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

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

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

6.4.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 © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名は国際法で保護されています。

前ページへファイルの共有 ファイルハンドラ API次ページへ