ファイルハンドラの構成

ファイルハンドラの動作の一部を構成できます。 これらの動作は、ファイルハンドラ構成ファイルに値を入力して変更します。

構成ファイル

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

set EXTFH=c:\mydir\test.cfg

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

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

[XFH-DEFAULT]

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

[TEST.DAT]

すべてのファイルに対する設定より、個々のファイルに対する設定の方が優先されます。 ファイル名だけを指定する場合には、解決済みファイル名(ファイルハンドラがファイル名マッピング処理を行った後に使用するファイル名)を使用する必要があります。 または、ファイル名の前にキーワード INTERNAL を追加して、そのファイル名が SELECT 句で使用した名前であることを表すことができます。これにより、設定はファイル名マッピング処理の終わりに特定されたファイルに適用されます。たとえば、ASSIGN モードが動的割り当ての場合に、次のように記述します。

[INTERNAL:$myfile\outfile.dat]
IDXFORMAT=8

この myfile は、そのフォルダがあるディレクトリの名前を保持する環境変数です。設定は、このディレクトリの outfile.dat に適用されます。

ASSIGN モードが外部割り当ての場合には、次のように記述します。

SELECT MYDATA ASSIGN TO EXTERNAL REALDATA

上記のように記述すると、次のように設定できます。

[INTERNAL:REALDATA]

この場合、後続のすべてのオプションが、論理名 "REALDATA" がマッピングされたファイルに適用されます。

次のように設定した場合は結果が異なります。

SELECT MYDATA ASSIGN TO '\directory\subdirectory\datadirectory\myfile'

上記のように記述すると、extfh.cfg で INTERNAL オプションを使用できません。 extfh.cfg 内では SELECT 文の定数値は、角かっこ ([ ]) で囲んで反復する必要があります。

ファイル名マッピングの詳細については、『ファイル名』の章にある『ファイル名のマッピング』の項を参照してください。

ファイル名には、パスと DD_マッピングを使用できますが、ワイルドカードや論理名は使用できません。 ファイルハンドラ構成オプション BASENAME=ON を設定した場合には、パスを指定せずにファイル名を指定できます。 ファイル名はプログラム内のマッピングされた名前と一致する必要があります。

構成オプション

次の表は、ファイルハンドラ構成ファイルで設定できるオプションのリストです。

パラメータ 説明
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 索引ファイルの名前を、個別の索引ファイルがある形式の名前にマップします。
INSERTNULL 行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行するときは、印刷不可能な文字の前にヌル文字 (x"00") を挿入するかどうかを指定します。 また、READ 操作中に、これらのヌル文字を削除するかどうかを指定します。
INSERTTAB 行順ファイルや行送りファイルに WRITE 操作、または REWRITE 操作を実行するときは、タブコードを連続した空白文字に置き換えるかどうかを指定します。
KEYCHECK アプリケーションで定義したキー定義と開こうとしている索引ファイルのキー定義が一致することをファイルハンドラで確認するかどうかを指定します。
KEYCOMPRESS 使用中のキー圧縮の種類を指定します。
LOADONTOHEAP ファイルを開くときに、ファイルをメモリにロードするかどうかを指定します。
LOCKTYPE 使用中のレコードロックの種類を指定します。
LOG ファイルの破損や自動ファイル回復などのファイルに関する異常な状況を、後で確認できるようにログファイルに記録するかどうかを指定します。
LOGFILENAME LOG オプションが有効なときに、ログファイルの名前を指定します。
LSRECDELIM 行順ファイルでレコード区切り文字として使用する文字を指定します。
MAINFRAMEPRINT WRITE AFTER ADVANCING または WRITE BEFORE ADVANCING を使用しているファイルについて、メインフレームのプリンタ形式 (filetype(11)) を使用するかどうかを指定します。
NAMEOPTIONS OPEN 文に渡す名前に、角かっこ ([ ]) で囲まれたファイルハンドラ指令を含めてよいかどうかを指定します。 このパラメータは、古い Micro Focus 製品との互換性を確保するために提供されています。Micro Focus Workbench V4.0 との互換性が必要な場合のみに使用してください。
NFSFILELOCK UNIX NFS ファイルシステムのレコードロックとファイルロックをアプリケーションで検出できるようにします。
NODESIZE 索引ファイルに使用する索引ノードのサイズを指定します。
NOSEQCHECK ACCESS SEQUENTIAL が指定された索引ファイルを出力または拡張用に開く場合に、書き込まれる各新規レコードの主キーが、以前のキーよりも大きいかどうかを確認するかどうかを指定します。
OPENINPUTSHARED 入力用に開いたファイルに LOCK MODE 句を指定していない場合に、このファイルを他のユーザと共有可能にするかどうかを指定します。
OSVSREWRITE 出力用に開いた順ファイルに対して 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 ファイルハンドラのトレースを有効にするかどうかを指定します。
TRACEFILEEXTEND 既存のトレースファイルがある場合に、トレース情報を現行のトレースファイルの末尾に追加するかどうかを指定します。
TRACEFILENAME TRACE オプションが有効なときに、作成するトレースファイルの名前を指定します。
WRITELINE メインフレームまたは PC の動作をレコードの書き込みに使用するかどうかを指定します。
WRITETHRU ファイルの修正をすぐにディスクに書き出すかどうかを指定します。 または、COBOL システムやオペレーティングシステムにより、変更を内部的にバッファに書き込み、後でディスクに書き出すこともできます。

脚注

1.

次の警告を参照してください。

警告:FILEMAXSIZE オプションでは、ファイルのオフセットを保存するために内部で使用されるバイト数を指定します。 これは、内部のロック機構にも影響します。 同じファイルを共有するすべてのプログラムで同じ FILEMAXSIZE 設定を使用して、セマフォとレコードロックが適切に処理されるようにし、共有ファイルでのファイルの破損を防ぐ必要があります。

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

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

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

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

構成ファイルの例については、ヘルプトピック 『構成ファイルの例』を参照してください。

構成可能な動作

ファイルハンドラ構成ファイルで構成できるファイルハンドラの動作は、次のとおりです。ここでは、オンラインヘルプよりも詳しく説明します。

大容量索引ファイル

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

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

ファイルのストライプ化

ファイルストライプ化オプションを使用すると、最大 512 GB の論理ファイルを作成できます。 これらの論理ファイルは、最大 256 の物理ファイルで構成することができます。

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

ファイルをストライプ化するには、ファイルハンドラ構成ファイルでストライプ化する各ファイルに STRIPING=ON オプションを設定します。

ストライプ化ファイルのヘッダー

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

ファイルのストライプ番号 nnn : filename
        

この nnn には、ストライプ番号を表す 3 桁の数値を指定します。filename は、関連付けられたファイルの名前です。

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

オプション

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

注:

STRIPING

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

構文:
STRIPING=[ON/OFF]
STRIPENAMETYPE

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

構文:
STRIPENAMETYPE=[0/1]
注釈:

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 ストライプ番号 1
test.dat.02 ストライプ番号 2
test.dat.03 ストライプ番号 3
MAXSTRIPESIZE

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

構文:
MAXSTRIPESIZE=n
        
MAXSTRIPEFILES

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

構文:
MAXSTRIPEFILES=n
        
MAXSTRIPEDIGITS

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

構文:
MAXSTRIPEDIGITS=n
        
STRIPE-X

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

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

構文:
STRIPE-X=path[,n]

ファイルのストライプ化を指定する方法をいくつか例を挙げて説明します。

例 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.dat test02.dattest03.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 に格納されます。

パフォーマンス

いくつかの手順を実行して、ファイルハンドラのパフォーマンスを向上できます。 これらのすべての手順で、さまざまな構成オプションを使用します。 これらの手順について次に詳しく説明します。

関連情報
はじめに
ファイル編成
ファイル名
ファイル状態
ファイルの共有
ファイルハンドラおよびソート API
データとキーの圧縮
ファイル操作のトレース