![]() | ファイルの共有 | ファイルハンドラ API | ![]() |
ファイルハンドラの動作の一部は、構成することができます。これらの動作は、ファイルハンドラ構成ファイルに値を入力するか、ランタイムスイッチを設定するか、または環境変数を設定して変更します。
ファイルハンドラ構成ファイルのデフォルトのファイル名は extfh.cfg です。ただし、次のように EXTFH 環境変数を設定し、別のファイル名を使用することもできます。
set EXTFH=/mydir/test.cfg
上記のように記述すると、ファイル名は /mydir/test.cfg に設定されます。
構成ファイルの検索は次のとおりです。
プログラムの ライブラリルーチン CBL_CFGREAD_EXTFH に呼び出しをインクルードすることによって、プログラムの実行時にファイルハンドラに構成ファイルを再読み込ませることができます。再読み込みが終了すると、ファイルハンドラは、ストライピングオプションを除き、読み込んだ最新のオプション設定にしたがって動作します。ストライピングオプションは無視します。ライブラリルーチン CBL_CFGREAD_EXTFH の詳細は、CBL_CFGREAD_EXTFH を参照してください。
ファイルハンドラ構成ファイルを使用して、個々のファイルまたはすべてのファイルについて、ファイルハンドラパラメータを変更することができます。すべてのファイルに適用する設定は、次に示すタグの下に一覧表示されます。
[XFH-DEFAULT]
また、個々のファイルに適用する設定は、次のような個々のファイル名の下に一覧表示されます。
[TEST.DAT]
すべてのファイルに対する設定より、個々のファイルに対する設定の方が優先されます。
注: ファイルハンドラ構成ファイルの [タグ] の下で名前=値ペアが重複している場合は、最初のエントリのみが使用されます。
次の表は、ファイルハンドラ構成ファイルで設定できるパラメータのリストです。
| パラメータ | 説明 |
| 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 | 使用中のレコードロックの種類を指定します。 |
| LOG | ファイルの破壊や自動リカバリといったファイルに関する異常な状態について、後で検証するためにログファイルに記録するかどうかを指定します。 |
| LOGFILENAME | LOG オプションがアクティブなときに、ログファイルの名前を指定します。 |
| 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 を有効化するどうかを指定します。 |
| TRACEFILEEXTEND | トレースファイルが存在する場合、そのトレースファイルの最後にトレース情報を書き込むかどうかを決定します。 |
| TRACEFILENAME | TRACE オプションがアクティブなときに、生成されるトレースファイルの名前を指定します。 |
| WRITETHRU | ファイルの修正をすぐにディスクに書き出すかどうかを指定します。修正を COBOL システムまたはオペレーティングシステムのどちらかによって内部でバッファに記録し、後でディスクに書き出すこともできます。 |
次に、これらのパラメータについて詳しく説明します。
FILESHARE を使用していないプログラムのコンテキストで、COMMIT 文や ROLLBACK 文により、レコードロックを解放するだけでなく、すべてのファイル更新をディスクに書き出すかどうかを指定します。
このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。
COMMITFLUSH={ON|OFF}
デフォルト: OFF
CONVERTSTATUS パラメータは、呼び出すプログラムの名前を指定し、ファイルハンドラが処理を完了した後で、返された状態値をエミュレーション用にマップします。次の 3 つのプログラムが製品に組み込まれています。
rmstat プログラムは、 Ryan MacFarland COBOL によって返された状態値をエミュレートします。
hoststat プログラムは、IBM Mainframe COBOL コンパイラによって返された状態値をエミュレートします。
msstat プログラムは、Microsoft COBOL V2 によって返された状態値をエミュレートします。
注: NOANS85 または ANS85"SYNTAX" コンパイラ指示セットを使用してコンパイルする場合に使用できるのは、これらのプログラムのみです。
このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。
CONVERTSTATUS=program
デフォルト: none
DATACOMPRESS パラメータは、データ圧縮を有効化するかどうかと圧縮の種類を指定します。この指令は、レコード順ファイルと索引ファイルにのみ影響を与えます。
この値を 0 に設定すると、データ圧縮は実行されません。0 以外の数値は、圧縮の種類を示します。
DATACOMPRESS=integer
この integer には次の数値を指定できます。
| 0 | データ圧縮を実行しない。 |
| 1 | ランレングスエンコーデング。 |
| 3 | ダブルバイト (DBCS) 文字のランレングスエンコーデング。 |
デフォルト: 0
DATAFILE パラメータは、OPEN 文に渡されたファイル名を別の名前にマップします。この名前には、完全パス情報を含めることができます。
DATAFILE=name
デフォルト: none
WRITE AFTER POSITIONING 文 (OS/VS COBOL 互換) を使用するときに、レコード領域の最初の文字にキャリッジ制御情報を保持できます。EXPANDPOSITIONING パラメータは、書き出すレコードにこのキャリッジ制御情報を含めるかどうかを決定します。
EXPANDPOSITIONING={ON|OFF}
各パラメータの内容は次のとおりです。
| OFF | キャリッジ制御情報も含め、すべてのレコードを書き出します。 |
| ON | 最初の文字を使用してキャリッジ制御を判別してから、この文字を出力から削除します。 |
デフォルト: OFF
EXPANDTAB パラメータは、行順ファイルまたは行送りファイルで READ 操作中に検出されたタブコードを同じ数の空白文字に拡張するかどうかを指定します。
EXPANDTAB={ON|OFF}
各パラメータの内容は次のとおりです。
| OFF | タブコードは変更しません。 |
| ON | タブコードを同じ数の空白文字に拡張します。 |
デフォルト: ON
FASTREAD パラメータは、索引ファイルを読み取るときに、ファイルハンドラで、データの完全性を保証するための追加確認を実行するかどうかを指定します。
FASTREAD={ON|OFF}
固定長の、非圧縮索引ファイルで読み取りの効率化を図るには、FASTREAD を ON に設定します。
デフォルト: OFF
FHREDIR パラメータは、FILESHARE を使用してリモートサーバでのファイル処理を可能にするかどうかを指定します。
このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。
FHREDIR を ON に設定すると、ファイルハンドラは、オープン時に名前を確認して、ファイルをローカルで処理するかどうかを判断します。
FHREDIR={ON|OFF}
デフォルト: OFF
FILEMAXSIZE パラメータは、 呼び出しのロック時に使用するオフセットを維持するために、必要なバイト数を指定します。
FILEMAXSIZE={4|8}
この場合のパラメータの値は次のとおりです。
| 4 | ロックの互換性は維持しますが、個々のファイルサイズは 2 ギガバイトに制限されます。 |
| 8 | ファイルサイズは制限されません。 |
この COBOL システムと Micro Focus 製品の初期のバージョンを使用してファイルに同時にアクセスする必要がある場合は、FILEMAXSIZE=4 を使用します。
デフォルト: 4
形式 8 の索引ファイルについて、FILEPOINTERSIZE パラメータはファイルポインタを格納するために使用するバイト数を指定します。
FILEPOINTERSIZE={6|8}
この場合のパラメータの値は次のとおりです。
| 6 | 6 バイトを使用し、ファイルのサイズは最大 256 テラバイトです。 |
| 8 | 8 バイトを使用し、ファイルのサイズは 256 テラバイト以上にすることができます。 |
FILEPOINTERSIZE=8 オプションでは、ファイルポインタを格納するためにより多くの領域を使用します。その結果、ファイルサイズが多少増える場合があります。
デフォルト: 6
IDXDATBUF パラメータは、ファイルのデータ部分にアクセスするときに使用するバッファのサイズを指定します。
索引とデータが同じ物理ファイルに格納されているファイルでは、この指令は使用できません。
IDXDATBUF=integer
各パラメータの内容は次のとおりです。
| integer | 入力した値が、その値以上の、次の2の累乗数に丸められます。 |
バッファリングを使用しない場合は、integer を 0 に設定します。
ファイルの作成中は、ゼロ以外の値が有効です。ゼロ以外の値を指定しないと、パフォーマンスは向上せず、逆に低下する場合もあります。
デフォルト: 0
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={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
デフォルト: 1
IGNORELOCK パラメータは、入力用に開いたファイルを読み取るときに、ロックを無視するかどうかを指定します。
IGNORELOCK= {ON|OFF}
デフォルト: OFF
INDEXCOUNT パラメータは、索引ファイルについてキャッシュする索引ノードの数を指定します。
INDEXCOUNT=node-count
各パラメータの内容は次のとおりです。
| node-count | キャッシュされるノード数。4〜32の任意の値を指定できます。通常は、8〜16が適性値ですが、この値は索引キーの数とサイズによって異なります。 |
デフォルト 16
分離した .idx ファイルがある索引ファイルの場合は、ファイルの索引部分の名前を別の名前にマップします。この名前には、完全パス情報を含めることができます。
INDEXFILE=name
デフォルト none
行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行する場合、印刷不可能な文字の前に NULL 文字 (x"00") を挿入するかどうかを指定します。また、READ 操作中にこれらの NULL 文字を削除するかどうかも指定します。
INSERTNULL={ON|OFF}
各パラメータの内容は次のとおりです。
| OFF | 印刷不可能な文字の前には NULL 文字を挿入しません。READ 操作中に NULL 文字を削除しません。 |
| ON | 印刷不可能な文字の前に NULL 文字を挿入します。READ 操作中に NULL 文字を削除します。 |
デフォルト: ON。N ランタイムスイッチの設定は、デフォルト設定に影響する場合があります。
行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行する場合、連続した空白文字をタブコードに置き換えるかどうかを指定します。
INSERTTAB= {ON|OFF}
各パラメータの内容は次のとおりです。
| OFF | 連続した空白文字をタブコードに置き換えません。 |
| ON | 連続した空白文字をタブコードに置き換えます。 |
デフォルト: OFF。T ランタイムスイッチの設定はデフォルト設定に影響する場合があります。
KEYCHECK パラメータは、索引ファイルに属するすべてのキーがアプリケーションで定義されていることをファイルハンドラで確認するかどうかを指定します。
KEYCHECK={ON|OFF}
各パラメータの内容は次のとおりです。
| ON | すべてのキー定義を指定し、一致させる必要があります。一致しない場合は、3/9 エラーが返されます。 |
| OFF | キーの定義をまったく行わずにファイルを開きます。ファイル内のキーと一致しないキーがある場合は、そのキーを明示的に参照する入出力操作(KEY 句を含む READ または START など)はいずれも、3/9 エラーとなります。 |
デフォルト: ON
KEYCOMPRESS パラメータは、使用中のキー圧縮の種類を指定します。
KEYCOMPRESS=integer
パラメータの内容は次のとおりです。
| integer | 圧縮の種類を指定します。 |
integer は、次の値の 1 つをとることができます。
| 0 | キー圧縮を使用しません。 |
| 1 | 重複キー圧縮を使用します。 |
| 2 | 先行文字圧縮を使用します。 |
| 4 | 後続空白圧縮を使用します。 |
| 8 | 後続ヌル圧縮を使用します。 |
さまざまな種類の圧縮を組み合わせて使用するには、有効な数値を合計して使用ます。例えば、3 で重複キー圧縮と先行文字圧縮を指定します。
後続空白圧縮と後続ヌル圧縮は同時に指定できません。KEYCOMPRESS パラメータは、ファイルに属するすべての索引のキー圧縮に影響します。
デフォルト: 0
LOCKTYPE パラメータは、使用中のレコードロックの種類を指定します。
LOCKTYPE=integer
この場合のパラメータの値は次のとおりです。
| integer | 圧縮の種類を指定します。 |
integer は次の値の1つをとります。
| 0 | プログラムは、ロックされたレコードを読み取ることができますが、他の方法でレコードにアクセスすることはできません。この方法は、COBOL システムの標準の方法です。 |
| 1 | プログラムは、ロックされたレコードにまったくアクセスできません。この方法は、COBOL 以外の言語で使用されます。 |
| 2 | 開かれているファイルと同じベース名の新しいファイルを作成します。ただし、拡張子は .lck です。レコードロックはすべてこのファイルに記録されます。 |
デフォルト: 0
LOG が ON に設定されている場合、ファイルの破壊や自動リカバリといったファイルに関する異常な状態について、後で検証するためにログファイルに記録するかどうかを指定します。LOGFILENAME オプション参照。
LOG={ON|OFF}
この場合のパラメータの値は次のとおりです。
| ON | 個々のファイルを記録する、あるいは [XFH-DEFAULT] タグの下で指定されている場合はすべてのファイルを記録します。 |
| OFF | ファイルは記録しません。 |
デフォルト: OFF
LOG オプションがアクティブな場合、LOGFILENAME オプションはログファイルの名前を指定します。
このオプションはグローバル(大域)、つまり、[XFH-DEFAULT] タグでのみ設定可能です。個々のファイルに対してこのオプションを設定することはできません。
LOGFILENAME=filename
プログラム xfhprint を使用して、ログファイルのテキスト版を作成します。ログファイルを閲覧するには、次のように指定します。
xfhprint filename
デフォルト: XFHLOG
WRITE AFTER ADVANCING または WRITE BEFORE ADVANCING パラメータを使用しているファイルについて、メインフレームのプリンタ形式 (filetype(11)) を使用するかどうかを指定します。
MAINFRAMEPRINT=[ON|OFF]
デフォルト: OFF
NAMEOPTIONS パラメータは、OPEN 文に渡す名前に、角かっこ ([]) で囲まれたファイルハンドラ指令を含めてよいかどうかを指定します。例えば、次のようになります。
fil1[PRINTER]
このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。
NAMEOPTIONS=[ON|OFF]
OFF に設定すると、角かっことそのかっこで囲まれた文字は、ファイル名の一部とみなされます。
デフォルト: OFF
NFSFILELOCK パラメータは、UNIX NFS ファイルシステムのレコード ロックとファイル ロックをアプリケーションで検出できるようにします。
NFSFILELOCK={ON|OFF|HP}
各パラメータの内容は次のとおりです。
| OFF | Windows アプリケーションでは、UNIX NFSシステムのレコードロックとファイルロックは検出できません。 |
| ON | UNIX NFS ファイルシステムのレコードロックとファイルロックをプログラムで検出できます。 |
| HP | Hewlett-Packard システムにアクセスしている場合は、HP を指定します。 |
デフォルト: OFF
NODESIZE パラメータは、索引ファイルに使用する索引ノードのサイズを指定します。
NODESIZE={512|1024|4096}
キーの長さに合わせて、次の NODESIZE の最大値を使用します。
| キーのバイト数 | NODESIZE の最大値のバイト数 |
|---|---|
| 以下 50 | 512 |
| 51 〜 100 | 1024 |
| 101 〜 512 | 4096 |
| 513 〜 4080 | 16384 |
最大のキーが 1016 バイトを超える場合の、デフォルトのノードのサイズは 4096 です。
ほとんどの場合、適切なデフォルトのノードのサイズをファイルハンドラで扱えるようにする必要があります。ただし、ファイルのサイズが問題になる場合は、ノードのサイズを小さくすると索引ファイルのサイズも小さくなりますが、ツリーの階層が増えると、処理時間も長くなることに注意してください。
デフォルト: 1024
NOSEQCHECK パラメータは、索引ファイルでキーの順番確認を有効化します。
NOSEQCHECK={ON|OFF}
このパラメータを ON に設定すると、順アクセスモードで開かれている索引ファイルに任意の順序でレコードを書き込むことができます。ON に設定しない場合は、レコードを、主キーの昇順で書き込む必要があります。
このオプションは、K ランタイムスイッチの代わりになります。
注: プログラム自体で索引ファイルにレコードを書き込む順序は、NOSEQCHECK 構成オプションではなく、ACCESS SEQUENTIAL または ACCESS DYNAMIC 構文を使用して制御しすることを強くお奨めします。
デフォルト: OFF
OPENINPUTSHARED パラメータは、入力用に開いたファイルに LOCK MODE 句を指定していない場合、このファイルを他のユーザと共有可能にするかどうかを指定します。
OPENINPUTSHARED={ON|OFF}
各パラメータの内容は次のとおりです。
| OFF | システムは、ファイルに対し LOCK MODE IS MANUAL を指定しているかのように動作します。つまり、他のユーザはファイルに対し LOCK MODE を指定していれば、入出力用にファイルを開くことができます。 |
| ON | 他のユーザは、入力用にのみファイルを開くことができます。 |
デフォルト: OFF
OSVSREWRITE パラメータは、出力用に開いた順ファイルに対して WRITE 文を使用可能にするかどうかを指定します。WRITE 文を使用可能にした場合は、これらの WRITE 文が、REWRITE 文と全く同じように動作します。
このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT]のタグの下にあります。このパラメータを個々のファイルに対して設定することはできません。
OSVSREWRITE={ON|OFF}
デフォルト: OFF
READSEMA パラメータは、ファイル修正以外の目的で入出力操作を実行する場合に、システムに共有ファイルのセマフォを獲得させるかどうかを指定します。
READSEMA={ON|OFF}
各パラメータの内容は次のとおりです。
| ON | READ および START 操作を含む、すべてのファイル操作に対してセマフォを獲得させます。 |
| OFF | READ および START などの操作中は共有ファイルのセマフォを獲得させません。 |
ファイルを複数のユーザが読み込む場合は、このパラメータを ON に設定してスループットを拡大させます。
デフォルト: ON
RELDATBUF パラメータは、ファイルにアクセスするときに使用するバッファのサイズを指定します。
RELDATBUF=integer
パラメータの内容は次のとおりです。
| integer | 入力した値を、その値以上の次の2の累乗に丸めます。 |
0 を指定している場合は、バッファリングは使用できません。
ゼロ以外の値は、次の状況で有効です。
ただし、上記以外の場合にゼロ以外の値を設定してもパフォーマンスは向上せず、逆に低下する場合もあります。
デフォルト: 4096
RETRYLOCK パラメータは、ある操作がロックされたレコードに対してアクセスを試行したときに、この操作を再試行するかどうかを指定します。
RETRYLOCK={ON|OFF|NOSTATUS|integer}
各パラメータの内容は次のとおりです。
| OFF | 再試行しません。 |
| ON | ロックが検出されなくなるまで操作を再試行します。 |
| NOSTATUS | 状態フィールドが定義されていないファイルに対して操作を再試行します。 |
| integer | ロックされたレコードの状態が返されるまで操作を再試行する場合の試行回数または秒数を指定します。『RETRYTIME』パラメータの項も参照してください。 |
デフォルト: OFF
ある操作がロックされたファイルに対してアクセスを試行したときに、RETRYOPEN パラメータは、この操作を再試行するかどうかを指定します。
RETRYOPEN={ON|OFF|integer}
各パラメータの内容は次のとおりです。
| OFF | 再試行しません。 |
| ON | ロックが検出されなくなるまで操作を再試行します。 |
| integer | ロックされたレコードの状態が返されるまで操作を再試行する場合の試行回数または秒数を指定します。『RETRYTIME』パラメータも参照してください。 |
デフォルト: OFF
RETRYTIME パラメータは、RETRYLOCK パラメータまたは RETRYOPEN パラメータに設定された整数が、試行回数と秒数のどちらを表すかを指定します。
RETRYTIME={ON|OFF}
各パラメータの内容は次のとおりです。
| OFF | 整数は試行回数を示します。 |
| ON | 整数は秒数を示します。 |
デフォルト: OFF
RUNITLOCKDETECT パラメータは、同じ実行ユニットで実行された別の OPEN 文によりレコードがロックされている場合に、これを検知できるようにするかどうかを指定します。
RUNITLOCKDETECT が ON の場合でも、オペレーティングシステムによってサポートされている場合は、特定の実行ユニット内に設定されたロックが検出されます。
RUNITLOCKDETECT={ON|OFF}
デフォルト: OFF
SEQDATBUF パラメータは、ファイルにアクセスするときに使用するバッファのサイズを指定します。
SEQDATBUF=integer
パラメータの内容は次のとおりです。
| integer | 入力した値を、その値以上の次の 2 の累乗に丸めます。 |
デフォルト: 4096
SKIPLOCK パラメータは、順読み取り中にロックされたレコードが検出された場合に、現在のレコード ポインタまでジャンプするかどうかを指定します。
SKIPLOCK={ON|OFF}
デフォルト: OFF
SPACEFILL パラメータは、行順ファイルや行送りファイルに READ 操作を実行する場合に、読み取ったデータ以外のレコード領域を空白文字で埋めるかどうかを指定します。
SPACEFILL={ON|OFF}
デフォルト: ON
STRIPSPACE パラメータは、行順ファイルや行送りファイルに WRITE 操作または REWRITE 操作を実行する場合に、後続の空白文字を削除するかどうかを指定します。
STRIPSPACE={ON|OFF}
デフォルト: ON
レコード順ファイルの場合に、WRITE 文の ADVANCING 句を無視するかどうかを指定します。
SUPPRESSADV={ON|OFF}
デフォルト: OFF
ファイルハンドラトレースモジュール、 Xfhtrace を指定すると、COBOL ファイルで発生した問題を診断する場合に役立ちます。
Xfhtrace モジュールは、ファイルハンドラ操作をトレースして、トレース ファイルに対するすべての動作のログを記録します。
TRACE パラメータは、Xfhtrace を有効化するどうかを指定します。
TRACE={ON|OFF}
各パラメータの内容は次のとおりです。
| OFF | トレースファイルを生成しません。 |
| ON | トレースを、個々のファイル、または[XFH-DEFAULT] タグの下で指定する場合はすべてのファイルに設定します。 |
デフォルト: OFF
1 つ以上の個々の索引ファイルに対してトレースを有効または無効にすることができます。トレースをデフォルトで無効に設定し、問題が発生したファイルに対してのみトレースを有効にすると、トレースファイルのサイズを常に最小にしておくことができます。
[XFH-DEFAULT] の下のデフォルトとして TRACE=OFF を指定し、ファイルのタグの下で TRACE=ON を指定します。
[XFH-DEFAULT] の下でデフォルトとして TRACE=ON を指定し、ファイルのタグの下で TRACE=OFF を指定します。
トレースファイルが存在する場合、そのトレースファイルの最後にトレース情報を書き込むかどうかを指定します。このオプションは、TRACE が OFF に設定されている場合は無効です。
TRACEFILEEXTEND={ON|OFF}
各パラメータの内容は次のとおりです。
| OFF | トレースを書き込む前に、同じ名前のトレースファイルを削除します。 |
| ON | 同じ名前のトレースファイルを拡張します。 |
デフォルト: OFF
TRACEFILENAME パラメータは、TRACE オプションがアクティブなときに、作成するトレースファイルの名前を指定します。
このパラメータは、すべてのファイルに対してのみ設定できます。このパラメータは、[XFH-DEFAULT] タグの下にあります。このパラメータを個々のファイルに対して設定することはできません。
TRACEFILENAME=filename
デフォルト: XFHTRACE.XFH
WRITETHRU パラメータは、ファイルの修正をただちにディスクに書き出すかどうかを指定します。修正を COBOL システムまたはオペレーティングシステムのどちらかによって内部でバッファに記録し、後でディスクに書き出すこともできます。
このパラメータを ON に設定すると、セキュリティを向上させることができますが、パフォーマンスは大幅に低下します。
WRITETHRU={ON|OFF}
| OFF | 修正を後で書き出します。 |
| ON | ファイルを更新する各操作が完了する前にすべての修正を必ずディスクに書き出します。 |
デフォルト: OFF
ファイルハンドラ構成ファイルで構成できるファイルハンドラの動作は、次のとおりです。この項では、この動作について詳しく説明します。
ファイルハンドラでは、固有の大容量ファイル (2 ギガバイトを超えるファイル) を作成できます。大容量ファイルを作成してアクセスするためには、FILEMAXSIZE 構成オプションを設定する必要があります。このオプションは、順ファイル、行順ファイル、相対ファイルおよび索引ファイルで機能します。大容量索引ファイルの作成に関する詳細については、『大容量索引ファイルの作成』の項を参照してください。すべての構成オプションと同じように、FILEMAXSIZE はすべてのファイルに対しても、個々のファイルに対しても設定できます。
注: 大容量ファイルとして作成されたファイルは、固有の大容量ファイルをサポートしないシステムでは共有できません。また、大容量ファイルに対して別の FILEMAXSIZE ファイル設定を使用しているアプリケーション間では、大容量ファイルを共有できません。
デフォルトでは、ファイルハンドラは、最大 2 ギガバイトのファイルを処理できます。 ただし、2 ギガバイトより大きい索引ファイルを作成する必要がある場合は、ファイルハンドラ構成ファイルで IDXFORMAT パラメータを 8 に設定し、IDXFORMAT"8" ファイルを作成します。 通常、索引ファイルは .idx ファイルと .dat ファイルに分かれているのに対して、このファイルは単一のファイルとして構成され、最大 32 テラバイトのサイズにすることができます。
多くのオペレーティングシステムでは、ファイルサイズに制限があります (例えば、Windows 95では 2 ギガバイト)。 これらのシステムで大容量ファイルを作成できるようにするには、ストライピングオプションを使用します。ストライピングにより、大容量論理ファイルが必要な数の物理的なファイルに分割されます (最大数 256)。
FILEPOINTERSIZE オプションでは、ファイルポインタのサイズを構成できます。ファイルの大きさが 256 テラバイトを超えない場合は、このオプションを 6 に設定することをお奨めします。
ファイルストライピングオプションを使用すると、最大 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.dat、test01.dat、test02.dat、およびtest03.datを dir1 に、test04.dat と test05.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 に格納します。
レコード順ファイルまたは索引ファイルでは、データを圧縮し、ディスク領域を節約することができます。
固定長形式の順ファイルにデータ圧縮を指定すると、可変長形式の順ファイルに変換されます。この操作は、REWRITE 文を使用しない限り、プログラムに影響しません。圧縮された順ファイルで圧縮の結果として長さが変更されたレコードに REWRITE 文を実行すると失敗します。
ファイルハンドラ構成ファイルの DATACOMPRESS パラメータを使用すると、ファイルのデータ圧縮を指定することができます。また、プログラムのコンパイル時に、DATACOMPRESS コンパイラ指令を使用してデータ圧縮を指定することもできます。
ファイルのデータ圧縮は、そのファイルに対する SELECT 文の処理時に最後に処理された DATACOMPRESS 指令で決定されます。そのため、プログラムで SELECT 文のすぐ前に次のような形式の行を記述すると、個々のファイルのデータ圧縮を指定することができます。
$SET DATACOMPRESS
別のファイルを処理する前に必ず、 $SET NODATACOMPRESS を解除してください。
キーを圧縮すると、索引ファイルのキーを圧縮し、ディスク領域を節約できます。キー圧縮には、次の 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 という副キー値をもつレコードを書き込むとします。重複キーの圧縮を有効化し、同じキー値を持つ別のレコードを書き込んだ場合は、重複した値が物理的にファイルに格納されません。
ファイルの処理に影響するランタイムスイッチは、次の 3 つです。
| スイッチ |
説明 |
|---|---|
| L2 | レコードターミネータスイッチ。行順ファイルのレコードターミネータを指定します。 |
| N | ヌルスイッチ。行順ファイルにヌル文字を挿入できます。 |
| T | タブスイッチ。 行順ファイルにタブ記号を挿入できます。 |
行順ファイルの場合、ランタイムシステムでは、デフォルトで改行文字 (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" がレコードターミネータとなります。
ヌル スイッチを使用すると、行順ファイルで値が x"20" 未満のデータ文字の前にヌル文字 (x"00") を挿入できます。ファイルに ASCII 以外のデータを挿入する場合は、ヌルの挿入を有効化する必要があります。
デフォルトでは、ヌルスイッチを有効 (+N) に設定します。
-N で実行しているアプリケーションで作成されたファイルの場合は、このファイルを同じ方法を実行しているアプリケーションで読み返す必要があります。+N で実行しているアプリケーションで作成されたファイルについても同様です。例えば、制御文字をプリンタに直接送信しているプログラムがあり (プリンタを 132 文字モードに切り換える場合など) 、プリンタでその制御文字が認識されない場合は、-N スイッチが必要になります。
タブスイッチはデフォルトで無効 (-T) に設定されています。タブスイッチは、行順ファイルの余分な空白をタブ文字 (x"09") に圧縮します。これによって、ファイル内に余分な空白がなくなります。
+T を設定してファイルを記述している場合は、ファイルの読み取り時に +T を使用する必要があります。-T を設定してファイルを記述している場合は、ファイルの読み取り時に -T を使用する必要があります。
ファイルバッファリングでは、ブロックがディスクに書き込まれるときに、ブロックが一杯になるまでバッファ (メモリのブロック) にレコードが書き込まれます。この方法を使用すると、ディスクへのアクセス回数が減り、その結果プログラムが高速化されます。
同様に、ディスクからレコードを読み取る場合も、ブロックがファイルからメモリバッファに読み取られ、レコードはバッファから抽出されます。
ファイルを閉じるときに、ディスクにまだ書き込まれていないデータが書き込まれます。データが書き込まれると、COBOL システムは、オペレーティングシステムに対しファイルを閉じるように指示します。
可変長の順ファイルはデフォルトでバッファに書き出されます。固定長の順ファイルは、環境変数 COBEXTFHBUF が設定されている場合に、バッファに書き出されます。
COBEXTFHBUF は、使用するバッファのサイズを次のように制御します。
COBEXTFHBUF=バッファサイズ export COBEXTFHBUF
パラメータの内容は次のとおりです。
buffer-size |
バイト単位のバッファサイズ |
C-ISAM ファイルで使用されるバッファサイズは変更できません。
呼び出し可能ファイルハンドラでは、索引ファイルの索引部分に対する読み取りまたは書き込み時にグローバル バッファを使用して速度を上げます。このバッファのサイズは、デフォルトで 16K ですが、EXTFHBUF 環境変数を使用して変更することができます。すべての索引ファイルがこの同じバッファを共有します。
特に大容量の索引ファイル、または多数の副キーをもつファイルを作成または更新する際にパフォーマンスを向上させるには、各ファイルに、ファイル名マッピングの一部としてEXTFHBUF オプションを使用するか、FCD に適切なバイトを設定して、独自の索引バッファを割り当てます。FCD の詳細は、『ファイルハンドラ API』の章を参照してください。ファイルごとに 1 つのバッファを割り当てることができ、そのファイルのキー数の最大値までのすべてのキーがそのバッファを共有できます。
例えば、ファイル (test.dat) には次の 8 つのキーがあります。
test.dat=test.dat (EXTFHBUF 16 1)
FCD の 16 をオフセット 96 に移動して、 1 をオフセット 97 に移動します。
test.dat=test.dat (EXTFHBUF 16 8)
FCD の 16 をオフセット 96 に移動して、8 をオフセット 97 に移動します。
ファイルのキー数よりも少ないバッファを割り当てる場合は、キーがバッファを共有する必要があります。
例えば、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 | ![]() |