Rebuild

概要

リビルドは、コマンドプロンプトから呼び出すことができるファイル管理ユーティリティです。これを使用して次のことを行うことができます。

リビルドがファイルに対して実行する操作は、リビルドのコマンド行で指定するオプションによって異なります。

注:

コマンド行

リビルドのコマンド行の構文は、次のとおりです。

rebuild in-file [,out-file] [options]

in-fileout-file に指定するファイル名には、どちらも拡張子が必要です。out-filein-file の両方に、同じファイル名を指定することはできません。in-fileout-file の代わりに環境変数を使用してファイル名マッピングを実行することができます。

リビルドが実行する操作内容は、コマンド行で指定するオプションにより定義されます。

オプションファイル

リビルドのコマンド行で at 文字 (@) の次にファイル名を記述すると、そのファイルにリビルドコマンド行オプションが含まれていることを示します。

ファイルを使用してリビルドコマンド行オプションを用意する場合、ファイルは ASCII テキストファイルでなければなりません。

リビルドオプションファイルは、次の形式にします。

次に例を示します。

rebuild infile.dat, outfile.dat @conv.par

conv.par は、リビルドオプションを含む ASCII テキストファイルです。

情報のリダイレクト

リビルドユーティリティで表示されるすべての情報は、標準的なオペレーティングシステムのリダイレクトを使用して、テキストファイルにリダイレクトすることができます。

> 新規ファイルを作成します。
>> 既存のファイルを拡張します。

次に例を示します。

rebuild oldms001.dat,ms001.dat -k:1+20<N> -i >> rebuild.prt

この例では、リビルドからの出力を既存のファイル rebuild.prt にリダイレクトします。

警告:出力をリダイレクトする場合、-v オプションを使用しないでください。

リビルドオプション

リビルドにより実行される処理は、コマンド行で指定したオプションで定義されます。

UNIX システムの場合、リビルドオプションには、先頭にスラッシュ (/) 文字ではなくハイフン (-) 文字を付ける必要があります。

また、次のオプションも使用できます。

-c ファイル圧縮を指定します。
-d 索引ファイルのデータ領域から索引を再構築します。
-e 不正な重複キーを報告し、処理を続行します。重複キーが 1,000 件以上ある場合、使用されているファイル属性とファイル内のデータが競合しているとみなされるため、リビルドが中止されます。
-f 索引ファイルを検証します。
-i 処理しているファイルの情報を表示します。
-k 索引ファイルのキー構造を定義します。
-m 将来のために予約されています。
-n ファイルに関する情報を表示します (他の処理は実行されません)。
-o 入出力ファイルの構成を指定します。
-p IDXFORMAT "8" ファイルをかわりにリビルドします。
-q 将来のために予約されています。
-r 入出力ファイルのレコード構造を定義します。
-s 入力ファイルの形式を指定します。
-t 出力ファイルの形式を指定します。
-u 前回更新に失敗したファイルの回復を試みます。
-v ファイルの処理に伴って増加するレコードカウントを表示します。
-y ファイルサイズの矛盾を無視してリビルドを強制実行します。
-x 索引ファイルの再編成時にデータを書き込む順序を指定します。
-z ファイルアクセスに Fileshare サーバを使用するようにリビルドに指示します。
--q リビルドのバナーの表示を抑制します。
--v リビルドのバージョン番号を表示します。

オプションはコマンド行の任意の場所に指定できます。ただし、二重ハイフン (--) で始まるオプションは、一重ハイフン (-) で始まるオプションの前に配置する必要があります。オプションの形式には特に制約はありませんが、各オプションは空白文字で区切る必要があります。

-f または -v オプションのパラメータの前には、コロン (:) を使用する必要があります。 他のオプションの場合は、パラメータの前にコロンを置くかどうかは任意です。オプションのパラメータ間には空白文字は挿入しないでください。

オプションの詳細については、ヘルプトピック  『REBUILD コマンド行オプションの概要』を参照してください。

索引ファイルの再編成

ファイルを再編成するためのコマンド行の形式は次のとおりです。

rebuild in-file,out-file [-c]  [-d] [-i]
    [-k] [-n] [-p] [-s] [-v] [-x] 

索引ファイルは、レコードの追加、削除、変更などにより更新されるときに、索引構造体とデータ構造体に切り離されるため、処理効率が悪くなります。さらに、削除されたレコードに残された領域は常に再使用されるわけではないので、ファイルが必要以上に大きくなってしまいます。

多くの変更を行った場合、索引ファイルを再編成して、データと索引を順にリビルドし、空き領域を再利用できるようにすると便利です。この作業により、最適な性能とデータの完全性が保証されます。

ファイルを再編成する利点は他にもあります。たとえば、ファイルを順次処理する場合、ファイルを処理するためのアクセス時間は時間が経つにつれて増えます。これは、レコードが更新され、順序が変更されるためです。この状況でファイルを再編成すると、アクセス時間を短縮することができます。

3 つ目の理由は 重複キーチェインをリビルドすることです。 重複キーには重複オカレンスの数が追加され一意に識別されます。 重複キーが新たに追加されるとそのキーに、最後に追加されたキーのオカレンス値を 1 つインクリメントした数値が使用されます。 キーが削除されても、残りのキーのオカレンス値は変更されません。つまり、一部のキーをすでに削除した場合は、重複値の最大回数に到達する可能性があります。 このような状況では、ファイルを再編成することが得策です。 重複キーの詳細については、『ファイル編成』の章の『重複キー』の項を参照してください。

次に例を示します。

rebuild infile.dat,outfile.dat

この場合、リビルドでは索引ファイル (infile.idx) を使用してデータファイル (infile.dat) を読み込み、出力ファイル (outfile.dat) が作成されます。infile.dat の削除されたレコードは、出力ファイルに書き込まれません。

注:入力ファイルと出力ファイルに同じファイル名を使用することはできません。

破損した索引ファイルのリビルド

索引をリビルドするためのコマンド行の形式は次のとおりです。

rebuild in-file[,out-file] [-c] [-d] [-e]
    [-i] [-k] [-n] [-p] [-s] [-v]

out-file パラメータは指定を省略できますが、指定することをお奨めします。指定せずにリビルド操作が失敗した場合、元のファイルが失われるからです。

索引ファイルの破損理由はいくつかあります。次に例を示します。

COBOL プログラムが破損した索引ファイルを開くときに、ランタイムシステムがファイルの破損を検出すると、拡張ファイル状態コードを返します。

リビルドを使用すると、破損したファイルを自動的にリビルドすることができます。

注: リビルドを使用して既存のデータファイルから新しい索引ファイルを生成すると、ファイルは大きくなることがあります。 理由の 1 つは、元の索引ファイルに保持されているデータファイルの空き領域に関する情報が失われることです。そのため、空き領域は再使用できなくなります。 もう 1 つの理由は、-d オプションを指定した場合、索引レコードが通常の入出力操作で個別に作成され、部分的にのみ使用された索引ノードができることになるからです。この問題を解決するには、索引をリビルドした後でファイルを再編成する必要があります。

次の例では、リビルドは .idx ファイルを読み込んでキー情報を取得し、データファイル infile.dat を読み込んで新しい索引ファイルを作成します。

rebuild infile.dat

次の例では、リビルドは入力ファイルを読み込んでキー情報を取得し、物理的な順序でデータを処理し重複レコードを飛ばして、新しい索引ファイルを作成します。

rebuild infile.dat, outfile.dat -d -e

索引ファイルがない場合には、-k オプションを使用してキー構造体に関する情報を指定する必要があります。

ファイルの変換

ファイルを変換するためのコマンド行の形式は、次のとおりです。

rebuild in-file,out-file [-c] [-i] 
[-k] [-o] [-r] [-s] [-t] [-v]

REBUILDを指定することによって、ファイル構成と形式を変換できます。

次の例では、リビルドは C-ISAM ファイルをシステムで使用される形式に変換し、ファイルのデータ部分を圧縮します。

rebuild infile.dat,outfile.dat -s:c-isam -c:d1 -t:mf

索引ファイルの検証

索引ファイルを検証するためのコマンド行の形式は次のとおりです。

rebuild in-file -f 

リビルドでは、多くの検証を実行できます。また、すべての検証を実行するか、サブセットだけを実行するかを選択することができます。確認する内容が多いほど、検証処理にかかる時間は長くなります。

次の例では、リビルドはファイルの完全性をすべて検査します。

rebuild test.dat -f

Fileshare でのリビルド

Fileshare サーバに存在するファイルにリビルドを実行できますが、使用できるのは限られた範囲のリビルドオプションだけです。Fileshare でリビルドを実行するためのコマンド行の形式は、次のとおりです。

rebuild in-file[,out-file] -z:server-name {/l|/n}

説明

server-name Fileshare サーバの名前。 server-name のすべてのオカレンスが同一の Fileshare サーバを参照する必要があります。

-z リビルドオプションを使用せずに、Fileshare サーバを指定することもできます。 コマンド行の形式は、次のとおりです。

rebuild $$server-name\in-file [$$server-name\out-file] {/l|/n}

UNIX システムでは、server-name のプレフィックス $$ の代わりに \$\$ を使用します。

呼び出し可能リビルド

次のように指定すると、COBOL プログラムでリビルドを呼び出せます。

call "callrb" using commands status
        

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

commands リビルドコマンド行を格納する PIC X(600) 項目。リビルドはオフセット 599 から 0 へ向かってコマンド行を調べるため、この項目の長さは 600 バイトになります。
status 返されたファイル状態を格納する PIC XX の COMP X 項目。この項目は、リビルドの呼び出し結果を示します。

リビルドをプログラムで呼び出すと、-v オプションを指定しない限り、通常のメッセージは表示されません。-v オプションを設定すると、処理中のレコードの合計が表示されます。

エラーが発生した場合、またはリビルドが成功しなかった場合、RETURN-CODE にはゼロ以外の値が格納され、status には返されたファイル状態が格納されます。 リビルドを呼び出した後は、常に RETURN-CODE と status を確認する必要があります。

RETURN-CODE に格納される値を次に示します。

説明 
0 リビルドが正常に実行されたことを示します。
1 ファイルが見つからない、ファイル形式が無効である、などの入力ファイルにエラーが発生したことを示しています。状態パラメータを確認してください。
2 出力ファイルにエラーが発生したことを示します。状態パラメータを確認してください。
4ファイルが破損しています。
9 オプションが無効である、オプションの組合わせが無効である、などのエラーがパラメータリストに含まれていることを示します。

エラーが発生した場合は、同一のオプションを使用して同じファイルのコマンド行からリビルドを実行します。画面出力では、エラー原因についてより詳細な情報が表示されます。

注: -f オプション (索引ファイルの検証) を使用している場合には、ゼロ以外の RETURN-CODE はファイルが破損していることを示します。その場合は、より詳細な情報を取得するために、同一のオプションで同じファイルのコマンド行から再度リビルドを実行してください。

次の例は、COBOL プログラムによるリビルドの呼び出しを示します。

 01 parameters   pic x(600).
 01 status       pic xx comp-x.
   ...
     move "infile.dat,outfile.dat -s:lii -c:d1" to parameters
     call "callrb" using parameters,status
     end-call

リビルドメッセージ

リビルドは、索引ファイルのリビルド、変換、再編成を行うときに、エラー、情報、または警告メッセージを出力する場合があります。詳細については、ヘルプトピック 『エラーメッセージ』を参照してください。

リビルド例

ここでは、リビルドを使用した例を説明します。

rebuild infile.dat,outfile.dat -i

ファイルを再編成します。データは主レコードキーの順序で書き込まれ、再編成の完了時に処理情報が表示されます。

rebuild infile.dat,outfile.dat -x:3 

ファイルを再編成します。データは、3 番目の副キーの順序で書き込まれます。

rebuild infile.dat

索引ファイルをリビルドします (索引 (.idx) ファイルがまだ存在していて、そこに保持されたキー情報が破壊されていないことを前提とします)。

rebuild infile.dat -k:1+20 -i 

索引ファイルをリビルドします。索引 (.idx) ファイルは不要であり、存在していても無視されます。これは、指定されたキー定義を使用して完全に再作成されます (ファイル作成時に使用したキー定義に対応させる必要はありません)。リビルドが完了すると、処理情報が表示されます。

索引ファイルのない C-ISAM および Level 2 のファイルでは、-r および -s オプションを使用してレコード情報とファイル形式を指定します。

rebuild infile.dat,outfile.dat -s:c-isam -c:d1 -t:mf 

C-ISAM 形式の索引ファイルをシステムで使用される形式に変換し、ファイルのデータ部分を圧縮します。

rebuild infile.dat,outfile.dat --o:rel,ind -k:1+2:3+10d -c:i7 -r:f10 

キーを圧縮して固定長の相対ファイルの索引を生成します。

rebuild infile.dat,outfile.dat -s:lii -t:lii 

LEVEL II V2.5 COBOL 形式のファイルを再編成して、出力ファイルに LII 構造を保存します。同様の方法で、-s および -t を他の形式と組み合せることができます。

set data=/tmp.dat rebuild data -i

ファイル /tmp.dat を再編成して、情報を表示します。