前ページへ構成 セキュリティ次ページへ

第 4 章 データベースの一貫性

この章では、次のような、データベースの一貫性を確保するための Fileshare の機能をすべて説明します。


注:Mainframe Express では、Fileshare がサポートされるのは Mainframe Express のコンポーネントで使用する場合のみです。Fileshare を使用するアプリケーションについての情報の一部は、Mainframe Express ユーザには適用されません。


4.1 トランザクション処理

トランザクション処理を行うと、データファイルを更新する一連の処理を、トランザクションと呼ばれる作業の 1 論理単位にグループ化することができます。 トランザクションの一部として変更する場合、次のように処理されます。

トランザクションでは、複数の Fileshare サーバで、複数のデータファイルを、複数回更新できます。

次の操作後に、SELECT 文と WITH ROLLBACK 句を定義したファイルで最初に更新操作 (WRITE、REWRITE、DELETE) を実行すると、トランザクションが開始します。

また、トランザクションは、次の場合に終了します。


注:


データの一貫性を最高レベルで確保するために、トランザクション処理の前に、次の操作を行うようにしてください。

レコードロックは、トランザクションで更新するすべてのレコードについて暗黙的に使用します。 例えば、プログラムが入力を要求しても、ユーザが応答しない場合のように、トランザクションが一時的に中断された場合に、レコードロックがファイルに長時間残ることがあります。 このとき、別の Fileshare クライアントがロックされたレコードにアクセスしようとしており、なおかつ指定した時間が経過すると、Fileshare サーバはトランザクションを中止 (ロールバックし) します。 このような場合を、トランザクションが Fileshare サーバによりタイムアウトされたといいます。詳細は、『自動レコードロックのタイムアウト』 を参照してください。


注:トランザクションで実行する更新回数を最小限に抑えると、取得するレコードロックの数もまた最小に抑えられます。レコードロックの数を減らすと、データを共有する Fileshare クライアントの間のレコードロックの競合回数が減り、トランザクション後の COMMIT 文や ROLLBACK 文の実行速度が向上します。


4.1.1 自動レコードロックのタイムアウト

ファイルを共有するマルチユーザ環境では、プログラムはレコードロックを使用して個々のレコードへの同時アクセスを制御します。 さらに、Fileshare では、トランザクションの中で更新するレコードについてレコードロックを自動的に取得します。 しかし、使用中のレコードロック数が多いほど、同時にアクセスできるデータが少なくなります。 そのため、1 つのプログラムが一度に確保するレコードロック数を最小限にすることが重要です。

ある Fileshare クライアントがレコードでロックを取得した後で (明示的に指定したため、またはトランザクションの中でレコードを更新したために) 、別の Fileshare クライアントがロックされたレコードを読み込もうとした場合は、 Fileshare サーバが、レコードロックを確保している Fileshare クライアントによる最後の Fileshare サーバへの要求の送信後の経過時間を調べます。この経過時間に応じて、次の処理が行われます。

デフォルトのタイムアウト時間は、60 秒です。Fileshare サーバの構成ファイルで /t オプションを使用すると、この値を変更することができます。値、 0 を指定すると自動レコードロックのタイムアウトを無効にし、レコードロックの解除は、アプリケーションプログラムのみで制御します。

タイムアウトしたプログラムは、次の入出力操作時に、エラー 9/125 を受け取ります。 このエラーメッセージは、警告メッセージとして扱い、エラーが返された操作を繰り返す必要があります。Fileshare サーバは、アクティブなトランザクションをロールバックし、タイムアウトしたプログラムで確保されているすべてのレコードロックを解除します。

4.1.2 トランザクション処理 - Fileshare クライアント

トランザクション処理を行う各データファイルに対して、COBOL プログラムの SELECT 文を使用してデータファイルを定義するときに、WITH ROLLBACK 句を指定します。

select test-file assign to "test.dat"
   organization indexed
   record key prime-key
   lock mode manual with rollback
   ...

このコード例では、データファイル test.dat でトランザクション処理を行うように指定しています。

トランザクションによる更新を固定化するには、プログラムで COMMIT 文を使用します。 データファイルからトランザクションによる更新箇所を削除するには、ROLLBACK 文を使用します。

COMMIT 文と ROLLBACK 文は、トランザクションに関係するすべてのデータファイルに対して作用します。そのため、1 つのデータファイルのファイル状態だけでは、COMMIT 文や ROLLBACK 文の実行結果を確認することはできません。COMMIT 文や ROLLBACK 文の実行結果をチェックするには、ファイルハンドラリダイレクタモジュールを呼び出す必要があります。ファイルハンドラリダイレクタモジュールモジュールで呼び出すエントリポイントは、fs_statusです。この呼び出し形式は、次のとおりです。

call "fs_status" returning t-status
end-call

ここで、t-status の定義は、次のとおりです。

01 t-status pic x(2) comp-x.

t-status で 0 以外の値が返される場合、COMMIT 操作または ROLLBACK 操作が失敗したことを示します。

1   SELECT test-file ASSIGN TO "test.dat"
2      LOCK MODE MANUAL WITH ROLLBACK
3   ...
4   OPEN I-O test-file
5   ...
6   move 1 to prime-key
7   WRITE test-file-record
8   ...
9   COMMIT
10   call "fs_status"
11      returning t-status
12   end-call
13   if t-status < > 0
14      display "警告 - COMMIT 操作に失敗しました。"
15   end-if
16   move 2 to prime-key
17   WRITE test-file-record
18   ...
19   ROLLBACK
20   call "fs_status"
21      returning t-status
22   end-call
23   if t-status < > 0
24      display "警告 - ROLLBACK 操作に失敗しました。"
25   end-if
26   WRITE test-file-record
27   ...

この例の各行について説明します。

1 - 2 行め

SELECT test-file ASSIGN TO "test.dat"
   LOCK MODE MANUAL WITH ROLLBACK

これらの行では、このデータファイルのトランザクション処理を指定します。

7 行め

WRITE test-file-record

この行では、新しいトランザクションを開始させます。

9 行め

COMMIT

この行では、test-file の更新を固定化し、トランザクションを終了します。

10 - 15 行め

call "fs_status"
   returning t-status
end-call
if t-status < > 0
   display "警告 - COMMIT 操作が失敗しました。"
end-if

この行では、COMMIT 操作の状態を確認します。

17 行め

WRITE test-file-record

この行では、新しいトランザクションが開始します。

19 行め

ROLLBACK

この行では、test-file への更新を削除し、トランザクションを終了します。

20 - 25 行め

call "fs_status"
   returning t-status
end-call
if t-status < > 0
   display "警告 - ROLLBACK 操作が失敗しました。"
end-if

これらの行では、ROLLBACK 操作の状態を確認します。

26 行め

WRITE test-file-record

この行では、新しいトランザクションを開始させます。

トランザクション処理を可能にするために、Fileshare クライアントの構成を変更する必要はありません。

4.1.3 トランザクション処理 - Fileshare サーバ

トランザクション処理を可能にするために、Fileshare サーバの構成を変更する必要はありません。しかし、ロールフォワードリカバリユーティリティを使用してデータファイルをリカバリする場合、リカバリプロセスの終了時にまだ完了していないトランザクションがあれば、暗黙的にロールバックされます。詳細は、『ロールフォワードリカバリユーティリティ』 の項を参照してください。

4.2 ロールフォワードリカバリログ処理

次の状況で、システム障害が発生すると、データを損失することがあります。

ロールフォワードリカバリログ処理は、データファイルに対する更新をすべてログファイルに保存しておく、Fileshare の機能です。 システムに障害が発生してデータを損失した場合、ロールフォワードリカバリユーティリティとログファイルを使用して、元のデータファイルのバックアップコピーに、ログファイル中の更新データを再度適用します。 このリカバリ処理が終了すると、バックアップファイルにはシステム障害が発生した時点のデータが再現されています (処理が完了していないトランザクションはロールバックされます) 。

ロールフォワードリカバリログ処理を使用するために、Fileshare クライアントを変更する必要はありません。

4.2.1 ロールフォワードリカバリログ処理 - Fileshare サーバ

ファイル更新のログ処理を行うには、データベース参照ファイルを作成し、これに更新のログを記録するファイルの名前とログファイルの名前を記述する必要があります。 データベース参照ファイルの作成方法については、『データベース参照ファイルのメンテナンス』 を参照してください。

ログファイル名を作成する場合、拡張子は Fileshare サーバにより自動生成されるので、手動で拡張子を指定する必要はありません。 手動で拡張子を指定すると、次のメッセージが表示されます。

FS180-W 指定されたログファイル名に拡張子が含まれています。ログファイル名は "filename" に変更されました。

Filehsareサーバは、ログ処理中に複数のリカバリログファイルを作成します。 最初のリカバリログファイルは開始ログファイルと呼ばれ、後のログファイルは継続ログファイルと呼ばれます。Fileshare サーバは現在のログファイルをバックアップするたびに継続ログファイルを作成します。

現在のリカバリログファイルには、常に、L で始まる拡張子が指定されます。バックアップしたリカバリログファイルには、B という文字で始まる拡張子が付けられます。各拡張子では、これらの文字の後に 01 から始まるリカバリログファイル番号を示す 2 桁の数字が続きます。これらの自動生成された拡張子は、ログファイルへの書き込み順を示します。つまり、ロールフォワードリカバリを実行する場合に適用する順番も示します。たとえば、recover というログファイルを指定したとします。Fileshare サーバは、起動時に、recover.L01 というログファイルを作成し、このファイルに更新を記録します。リカバリログファイルをバックアップすると、Fileshare サーバは、現在のログファイル、 recover.B01 に別の名前を付けて保存し、recover.L02 という新しいファイルを作成します。これで、Fileshare サーバがシャットダウンした場合でも、2 つのリカバリログファイルがあることになります。recover.B01 は、開始ログファイル、recover.L02 は、継続ログファイルです。開始ログファイルは 1 つしかありませんが、継続ログファイルの数には制限はありません。

リカバリ操作を実行する場合は、ロールフォワードリカバリユーティリティが、最初に開始ログファイルを処理し、次に作成順にしたがって継続ログファイルを処理します。

データベース参照ファイルの項目を使用してデータファイルを更新すると、ログ処理を明示的に解除しない限り、ログが記録されます。

オペレーティングシステムによっては、キャッシュを使用するため、ログファイルに書き込まれた情報をすべてディスクに物理的に書き込めるわけではありません。 Fileshare サーバは、定期的にオペレーティングシステムを呼び出し、ログファイルの更新を書き込むように指示します。 デフォルトでは、ログファイルに 100 レコード分が書き込まれるたびに、ログファイルがフラッシュされます。 この間隔を変更するには、ログファイル名をデータベース参照ファイルに追加するときに /lc (ログカウント) オプションを使用します。ログカウントを 0 に設定すると、Fileshare サーバは、ディスクへ更新をフラッシュするためにオペレーティングシステムを呼び出すことはありません。その代わり、今度はオペレーティングシステムがディスクへのログファイルのフラッシュを制御します。

COMMIT 操作が行われるたびに、ログファイルの更新もフラッシュされます。

システム障害の発生時にトランザクションが未処理の場合は、ロールフォワードリカバリユーティリティは、ファイルがリカバリすると、トランザクションを暗黙的にロールバックします。

ロールフォワードリカバリログ処理は、性能に重大な影響を与えます。そのため、この機能が必要でないファイルについては、データベース参照ファイルで /o l オプションを使用して、ログを解除することができます。または、データベース参照ファイルからこれらのファイル項目をまとめて削除することもできます。

理想的なリカバリログの使用方法は、次のとおりです。

  1. データファイルをバックアップするたびに (できれば毎日)、Fileshare サーバをシャットダウンします。 ロールフォワードリカバリログファイルには、Fileshare サーバの起動時以降の、データベースファイルに対するすべての更新情報を含めます。

  2. データファイルをバックアップします。データファイルをバックアップすると、ログファイルは不要となるため (最新バックアップ以降の更新に関するログのみが必要なため)、削除することができます。

  3. Fileshare サーバを再起動します。新しいログファイルが作成され、そこに、その後のデータベースファイルに対する更新のログが記録されます。 システム障害のためにデータを損失した場合は、最新のデータベースバックアップを復元し、ロールフォワードリカバリユーティリティを使用して、ログファイルに記録された更新を再適用します。

注:データベース参照ファイルのバックアップ ディレクトリを指定すると、Fileshare サーバにより、この一連の操作を自動的に実行することができます。詳細は、『データベースの自動バックアップとロールフォワードリカバリ』 を参照してください。


更新ログを大量に記録すると、ログファイルが非常に大きくなることがあります。 ログファイルがあるディスクが一杯になると、ログファイルにレコードを書き込むことができなくなります。 この場合は、ログファイルに欠陥が生じ、Fileshare サーバにより強制終了されます。 ログファイルの空きディスク容量がディスクの総容量に対する特定の割合を下回ると、警告メッセージが表示されます。 この割合は、データベース参照ファイルの /p オプションにより設定できます。この警告が表示された場合は、Fileshare サーバを終了し、データファイルの新しいバックアップを作成してください。この処理により、 Fileshare サーバの再起動時に、古いログファイルを廃棄し、新しいログファイルで作業を続けることができます。

警告メッセージを無視し、ログファイルの容量が増大し続けた結果、使用可能な空きディスク容量が 200,000 バイト未満になると、Fileshare サーバは、処理を中断します。 このとき、Fileshare サーバは、エラーメッセージ FS030 を返し、古いログファイルをリモートでバックアップするか、手動で削除するまで、新しいログファイルでの操作を再開しません。

4.3 ロールフォワードリカバリユーティリティ

ロールフォワードリカバリユーティリティは、システム障害の発生後にデータファイルへの更新をリカバリする機能です。


注:ロールフォワードリカバリユーティリティは、更新内容がリカバリログファイルに記録されている場合に、データベースをリカバリするためにのみ使用することができます。詳細については、『ロールフォワードリカバリログ処理』 の項を参照してください。


ロールフォワードリカバリ処理を行う前に、次の点を確認します。

ロールフォワードリカバリユーティリティは、/r (リカバリ) オプションを使用して起動します。ロールフォワードリカバリユーティリティを起動する場合は、データベース参照ファイルを指定する必要があります。その例を次に示します。

fs /r dbase.ref [options]

この場合、dbase.ref は、ロールフォワードリカバリユーティリティで使用するデータベース参照ファイルの名前です。このファイル名は、Fileshare サーバが動作中に使用するデータベース参照ファイルと同じ名前でなければなりません。ロールフォワードリカバリユーティリティは、データベース参照ファイルを読み込み、ロールフォワードリカバリログファイルの場所と名前、および、リカバリするデータファイルの名前を判断します。


注:ロールフォワードリカバリユーティリティを起動する前に、データベース参照ファイルのメンテナンスユーティリティ (/e オプション) を使用して、データベース参照ファイルから不要な項目を消去すると、復元するデータファイルを選択することができます。


ロールフォワードリカバリユーティリティでは、次のオプションを指定することができます。

/dt date-time

このオプションでは、ロールフォワードリカバリユーティリティにより、指定した時間までに行われたデータファイルへの更新を復元するように指定します。 date-time の形式は、YYMMDDHHMMSS (年、月、日、時、分、秒)で、数字で指定します。このオプションを指定しない場合は、ロールフォワードリカバリユーティリティが、ロールフォワードリカバリログファイルに記録されているすべての更新を適用します。

fs /r dbase.ref /dt 931231235959

このコードでは、データベース参照ファイル dbase.ref を使用して、ロールフォワードリカバリユーティリティを起動します。この場合は、1993 年 12 月 31 日までに行われた更新のみがリカバリされます。

/v

このオプションでは、ロールフォワードリカバリユーティリティを使用して、検索中のリカバリログファイルに関する追加情報と格納されているディレクトリを表示します。

更新は複数のログファイルに記録することができます (詳細については、『ロールフォワードリカバリログ処理』 を参照してください)。ロールフォワードリカバリユーティリティは、ログファイルディレクトリで開始ログファイルを検索します。開始ログファイルが見つからない場合は、このログファイルディレクトリで開始ログファイルのバックアップ ファイルを検索します。ここでも開始ログファイルが見つからず、データベース参照ファイルで指定したバックアップディレクトリがある場合は、このバックアップディレクトリでも同じ手順で検索を繰り返します。ロールフォワードリカバリユーティリティが開始ログファイルを検出できた場合は、リカバリ手順が始まります。検出できない場合には、エラーが表示され、リカバリ手順は開始されません。

開始ログファイルの処理が完了すると、ロールフォワードリカバリユーティリティは継続ログファイルを検索します。 リカバリログファイルのバックアップを実行していない場合は、継続ログファイルが存在しないため、リカバリ処理は終了します。 ロールフォワードリカバリユーティリティは、継続ログファイルを、まずログファイルディレクトリで、次にログファイルバックアップ ディレクトリで検索します。 すべての更新がリカバリし、データファイルに適用されるまで、リカバリプロセスは、継続ログファイルを使用してリカバリ処理を続行します。

4.4 データベースシーケンス番号

データベースシーケンス番号を使用すると、データファイルのグループをリンクして、データファイルと、それに対応するログファイルの同期を取ることができます。

ログファイルに書き込まれたシーケンス番号は、シーケンス番号を指定した各データファイルの見出しに自動的に格納されます。Fileshare サーバを起動するたびに、Fileshare がこの番号を増やします。ロールフォワードリカバリユーティリティを機能させるには、すべてのデータファイルのシーケンス番号とログファイルのシーケンス番号が一致していなければなりません。データファイルのシーケンス番号が一致しないと、Fileshare サーバは次のメッセージを表示して停止します。

FS038-S ファイル <filename> で、一致するシーケンス番号が見つかりません。

この場合、考えられるエラーの原因は次のとおりです。

データベース参照ファイルに登録したデータファイルについてはすべて、デフォルトによりデータベースシーケンス番号の確認を行います。 シーケンス番号の確認機能を解除するには、データベース参照ファイルの /o s (シーケンス番号の省略) オプションを使用します。各ファイルでシーケンス番号の確認を行わない場合は、システム管理者に、Fileshare システムに正しいバージョンのファイルがインストールされていることを確認する必要があります。

シーケンス番号は、可変長のレコードファイル見出しを持つデータファイルにのみ使用することができます。次のファイル構成では、見出しを含まないため、シーケンス番号の確認はできません。

固定長レコードのデータファイルにシーケンス番号を適用する場合、可変長レコードのデータファイルとして再作成してください。ファイルを再作成するには、事前に COBOL プログラムでファイル定義を変更します。

固定長レコードのデータファイルを作成する場合のコード例

FD account-file.
01 account-file-record.
   03 account-file-prime pic x(4).

上記のファイルに対応する可変長レコードのデータファイルを作成する場合のコード例

FD account-file recording mode is variable.
01 account-file-record.
   03 account-file-prime pic x(4).

データベースシーケンス番号を利用するために、Fileshare クライアントの構成やプログラムを変更する必要はありません。

4.4.1 データベースシーケンス番号 - Fileshare サーバ

データベース参照ファイルに登録したデータファイルについては、デフォルトによりデータベースシーケンス番号の確認を行います。データベースシーケンス番号を確認する必要がないファイルについては、シーケンス番号を解除することができます。解除するには、データベース参照ファイルにあるこのデータファイルの項目に対して /o s (シーケンス番号の省略) オプションを適用します。

Windows
fs /d dbase.ref /l \logdir\log.dat
fs /d dbase.ref /f test1.dat
fs /d dbase.ref /f test2.dat /o l
fs /d dbase.ref /f test3.dat /o s

UNIX
fs -d dbase.ref -l /logdir/log.dat
fs -d dbase.ref -f test1.dat
fs -d dbase.ref -f test2.dat -o l
fs -d dbase.ref -f test3.dat -o s

このコマンドの内容は、次のとおりです。

4.5 データベースの自動バックアップとロールフォワードリカバリ

Fileshare でロールフォワードリカバリを目的とした更新ログ処理を理想的に行うには、次の方法を使用します。

  1. Fileshare サーバを定期的にシャットダウンします。

  2. すべてのデータベースファイルのバックアップを作成します。

  3. Fileshare サーバを再起動し、新しいリカバリログファイルを使用します。

詳細については、『ロールフォワードリカバリログ処理』 の項を参照してください。

/backup オプションを使用して、データベース参照ファイルのバックアップ<ディレクトリ名を指定すると、上記の操作を Fileshare で自動的に行うことができます。

fs /d dbase.ref /backup c:\backdir

例えば、上記のコマンドでは、c:\backdir をバックアップディレクトリとして指定するデータベース参照ファイル、 dbase.ref に項目を追加します。バックアップディレクトリに対しては、完全パスを指定することができます。完全パスを指定しない場合は、Fileshare サーバの現在のディレクトリに対する相対パスとして判断されます。

このようにしてバックアップディレクトリを設定すると、Fileshare サーバは、起動時に、データベース参照ファイルで指定したすべてのデータファイルを<ディレクトリ、 c:\backdir にコピーします。また、Fileshare サーバは、データベースファイルをバックアップしたために不要となったデータを格納するリカバリログファイルを検索して削除します。

Fileshare サーバの動作中は、ログ処理を設定したファイルに対するすべての更新が、通常どおりログファイルに記録されます。 次に Fileshare サーバを再起動したとき、再びデータベースファイルをバックアップし、ログファイルを削除します。 ただし、Fileshare サーバの以前のセッションが正常にシャットダウンされておらず、有効な終了レコードがログファイルに書き込まれていないこと (例えば、システムの故障などが原因の場合) を検出すると、Fileshare は、自動的にロールフォワードリカバリ機能を起動します。 この機能により、データベースファイルの以前のバックアップを自動的に復元し、ログファイルの記録にしたがって、すべての更新をリカバリします。 リカバリが正常に完了した場合は、Fileshare サーバが通常どおりに起動します。

バックアップディレクトリがデータベース参照ファイルで指定されていると、Fileshare サーバを起動する前に、手動でロールフォワードリカバリユーティリティを実行することができます。 ロールフォワードリカバリユーティリティは、リカバリ処理を開始する前に、以前のバックアップを自動復元します。


注:データベースの自動バックアップ機能の目的は、最新の Fileshare ログファイルに、前回データベースのバックアップが行われてから追加された更新だけを含め、データベース管理者が理想的な手順でロールフォワードリカバリを行えるようにすることです。データベースファイルを手動で追加または置換した場合は、Fileshare がこれを検出できず、間違ったバージョンのファイルをバックアップまたは復元する可能性があります。そのため、データの一貫性を維持できなくなります。データベースファイルは手動で置換しないようにしてください。Fileshare では、データベース全体をバックアップするためにサーバを終了する操作のみを行うようにしてください。


データベースの自動バックアップを設定するために、バックアップディレクトリを指定した場合、/o l オプションを使用して、データベース参照ファイルで宣言されたデータファイルに対するログ処理を解除することはできません。データベース参照ファイルで指定されている各ファイルのログ処理をアクティブにすると、Fileshare は、バックアップディレクトリからバックアップ バージョンをコピーしたときに、確実にすべての更新をリカバリできます。自動バックアップを必要としないファイルがある場合には、データベース参照ファイルからそれらのファイルを削除してください。

例えば、一晩でシステム全体のバックアップを行うなどのように、Fileshare ファイルをバックアップする必要がある場合は、Fileshare マネージャの API 関数を使用して Fileshare をシャットダウンし、すべてのデータベースファイルをバックアップしてから、新しいログファイルを作成して再起動します。 この処理が完了したら、Fileshare バックアップディレクトリの固定ハードコピーを作成することをお奨めします。詳細については、『高度な操作』 の章にある 『Fileshare マネージャ』 の項を参照してください。

fs /d dbase.ref /l logfile
fs /d dbase.ref /backup c:\backdir
fs /d dbase.ref /f c:\accounts\customer.dat
fs /d dbase.ref /f c:\finance\history.dat

このコマンドの内容は、次のとおりです。

Fileshare サーバは、起動時に、これらのデータファイルをディレクトリ c:\backdir に自動的にバックアップします。Fileshare サーバの動作中にログファイルがバックアップされた場合も、バックアップファイルは c:\backdir ディレクトリに格納されます。ロールフォワードリカバリユーティリティを起動すると、c:\backdir のバックアップファイルは元のディレクトリで復元され、ログファイルに記録された更新が再適用されます。

4.6 データベース参照ファイルのメンテナンス

データベース参照ファイルには、Fileshare サーバが使用する Fileshare の機能とこの機能を適用するファイルを判断するための情報が記述されています。この項では、この章ですでに説明した機能を利用するための、データベース参照ファイルの作成方法と更新方法について説明します。


注:


データベース参照ファイルのメンテナンスユーティリティは、/d (データベース) オプションを使用して起動します。次に例を示します。

fs /d dbase.ref [options]

このコマンドのパラメータは次のとおりです。

dbase.ref データベース参照ファイルの名前です。データベース参照ファイルが存在しない場合は、新規作成されます。
options データベース参照ファイルで実行する操作を指定します。データベース参照ファイルのメンテナンスユーティリティを起動するたびに、指定したデータベース参照ファイルに対してレコードの追加や削除を行います。

データベース参照ファイルには、次の 4 種類のレコードを追加することができます。

詳細については、後述します。

4.6.1 リカバリログファイルレコード

/l オプションを使用すると、リカバリログファイルの名前を指定できます。例えば、次のように指定します。

fs /d dbase.ref /l logfilename

データベース参照ファイルに記述できるのは、1 つのリカバリログファイルレコードのみです。

リカバリログファイルレコードには、次のような指定が可能です。

4.6.1.1 ディスク容量の警告 (/p)

/p オプションを使用すると、ログファイルを含むドライブの空き容量がなくなりそうな場合に Fileshare サーバが警告を表示する基準を指定できます。

fs /d dbase.ref /l logfilename /p nnn

この場合、nnn にはディスクの空き容量の割合を指定し、実際の空き容量がこの値を下回ると Fileshare サーバが警告メッセージを表示します。 デフォルト値は 5 です。つまり、Fileshare サーバは、ログファイルを含むドライブの空き容量が 5% 未満になったときに警告メッセージを表示します。

4.6.1.2 ログファイルのフラッシュ (/lc)

/lc オプションを使用すると、ログファイルをディスクにフラッシュする頻度を指定できます。

fs /d dbase.ref /l logfilename /lc nnn

この場合、nnn には、Fileshare サーバがオペレーティングシステムを呼び出してログファイルバッファをディスクにフラッシュするまでにログファイルに書き込むレコード数を指定します。 デフォルト値は 100 です。つまり、Fileshare サーバは、ログ ファイルに 100 レコード分を書き込むごとに、このログ ファイルをディスクにフラッシュします。 また、Fileshare サーバは COMMIT 操作を行うたびに、ログファイルを自動的にフラッシュします。

ログファイルが Fileshare サーバの動作しているマシンにない場合、またはオペレーティングシステムの制約により Fileshare でログファイルをフラッシュできない場合は、Fileshare サーバがログファイルをフラッシュできません。 この場合、/lc 1 オプションを設定すると、Fileshare サーバがログファイルを開くときにライトスルーを指定します。オペレーティングシステムがファイルに対してライトスルーをサポートしていると、ログファイルはディスクに書き込まれます。

4.6.1.3 ログファイルレコードの消去 (/e)

/e オプションを使用すると、リカバリログファイルレコードを消去することができます。

fs /d dbase.ref /l logfilename /e

これが、データベース参照ファイルを作成した後にレコードを削除する唯一の方法です。

4.6.1.4 例

fs /d dbase.ref /l \log\log.dat /p 10 /lc 200

この例では、ディレクトリ、 log のログファイルとして log.dat を指定します。データファイルに対するログ処理を明示的に解除している場合を除き、このデータベース参照ファイルで指定するすべてのデータファイルの更新内容は、このログファイルに記録されます。/p オプションでは、ログファイルが置かれているドライブの空き容量が 10% 未満になったときに、Fileshare サーバが警告メッセージを表示するように指定しています。 /lc オプションでは、ログファイルに 200 レコード分が書き込まれるたびに、Fileshare サーバがこのログファイルをディスクにフラッシュするように指定しています。

4.6.2 ファイル名レコード

/f オプションを使用すると、ファイル名レコードを指定できます。例えば、次のように指定します。

fs /d dbase.ref /f filename

このコマンドでは、データベース参照ファイルに含めるデータファイルを指定しています。

データベース参照ファイルで指定したすべてのファイルでは、ログ処理が可能で、ログ処理をサポートするファイル構成については、デフォルトでデータベースシーケンス番号が有効化されています。

ファイル名レコードについて、以下を指定することができます。

4.6.2.1 代替のファイル名 (/af)

/af オプションを使用すると、ファイル名レコードに代替のファイル名を指定することができます。

fs /d dbase.ref /f filename /af alternate-filename

こうすると、Fileshare サーバがデータファイル filename へのアクセス要求を受けるたびに、代わりに alternate-filename へアクセスします。

4.6.2.2 仮想ファイルハンドラ (/ap)

/ap オプションを使用すると、ファイル名レコードに仮想ファイルハンドラを指定することができます。

fs /d dbase.ref /f filename /ap program-name

この場合、program-nameには、データファイルですべての入出力要求を処理するために Fileshare サーバが呼び出す仮想ファイルハンドラを指定します。 『高度な操作』 の章の 『仮想ファイルハンドラ』 の項を参照してください。

/f に入力するファイル名 (/ap の項目に対応) の末尾にワイルドカードを記述し、ファイルのグループが指定された仮想ファイルハンドラに要求を渡すように指示することができます。

4.6.2.3 データとキーの圧縮 (/k)

/k オプションを使用すると、ファイル名レコードのデータとキーの圧縮を指定することができます。次に例を示します。

fs -d dbase.ref /f filename /k DnnnIx

この場合、nnn には、データ圧縮ルーチン番号を指定し、x には、キー圧縮番号を指定します。nnnx の有効値は、コンパイラ指令 DATACOMPRESS と KEYCOMPRESS に対して指定できる値と同じです。

4.6.2.4 ログ処理の解除 (/o l)

/o l オプションを使用すると、ファイルのログ処理を解除することができます。

fs /d dbase.ref /f filename /o l

この場合、filename は、ログ処理が解除されるファイルです。


注:バックアップディレクトリレコードを指定して、データベースの自動バックアップを有効化しても、ファイルに対するログ処理を解除することはできません。


4.6.2.5 データベースシーケンス番号の解除 (/o s)

/o s オプションを使用すると、ファイルに対するデータベースシーケンス番号を解除することができます。

fs /d dbase.ref /f filename /o s

この場合、ファイル、 filename はデータベースシーケンス番号が解除されるファイルです。

4.6.2.6 トランザクション処理の解除 (/o t)

/o t オプションを使用すると、ファイルのトランザクション処理を解除できます。

fs /d dbase.ref /f filename /o t

この場合、ファイル、 filename はトランザクション処理が解除されるファイルです。このデータファイルに対しては、SELECT 文の WITH ROLLBACK 句が無視されます。このオプションをデータベース参照ファイルに設定すると、プログラムで指定されているすべてのトランザクション処理を無効にします。

4.6.2.7 ファイル名レコードの消去

/e オプションを使用すると、ファイル名レコードを消去することができます。次に例を示します。

fs /d dbase.ref /f filename /e

このコマンドでは、データベース参照ファイルからレコードを消去します。これは、データベース参照ファイルが作成された後でレコードを削除する唯一の方法です。

4.6.2.8 例

fs /d dbase.ref /f \accounts\nomlgr.dat /k d001i7

この例では、ディレクトリ、 accounts のデータファイル、 nomlgr.dat が Fileshare サーバで作成されている場合に、データ圧縮とキー圧縮が実行されます。d001 オプションを指定すると、使用するデータ圧縮ルーチンは、DATACOMPRESS"1" コンパイラ指令でプログラムをコンパイルした場合と同じ処理を行います。i7 オプションを指定すると、使用するキー圧縮は、KEYCOMPRESS"7" コンパイラ指令でプログラムをコンパイルした場合と同じ処理を行います。これは、プログラムで指定されたすべてのデータ圧縮またはキー圧縮を無効にします。

fs /d dbase.ref /f \accounts\salesday.dat /o tl

この例では、ディレクトリ accounts のデータファイル salesday.dat に対してプログラムで指定されているトランザクション処理をすべて無視するように指定されています。また、このファイルに対するログ処理も解除されています。

fs /d dbase.ref /f \ref\clients.dat /af \oldref\oldclnts.dat /o s

この例では、ディレクトリ、ref のデータファイル、 clients.dat に対するすべての入出力要求が、ディレクトリ oldref のデータファイル oldclnts.dat にリダイレクトされるように指定されています。さらに、このファイルに対するデータベースシーケンス番号が解除されます。

fs /d dbase.ref /f \accounts\saleslgr.dat

この例では、ディレクトリ、accounts のデータファイル、 saleslgr.dat のログ処理とデータベースシーケンス番号を使用可能にします。デフォルトでは、ログ処理とデータベースシーケンス番号は、データベース参照ファイルにリストされているすべてのデータファイルに対して有効化されています。

fs /d dbase.ref /f \orders\week10.dat

この例では、ディレクトリ、 orders のデータファイル、 week10.dat に対して、ログ処理とデータベースシーケンス番号を使用可能にします。デフォルトでは、ログ処理とデータベースシーケンス番号は、データベース参照ファイルにリストされているすべてのデータファイルに対して有効化されています。

4.6.3 ファイル文字列レコード

/fs オプションを使用すると、ファイル文字列レコードを指定できます。次に例を示します。

fs /d dbase.ref /fs string1 /af string2

この場合、ファイル名が string1 で始まるすべてのデータファイルについて、string1 が文字列 string2 に置き換えられるように指定しています。

4.6.3.1 ファイル文字列レコードの消去

/e オプションを使用すると、ファイル文字列レコードを消去することができます。

fs /d dbase.ref /fs string /e

こうすると、データベース参照ファイルからレコードが消去されます。これは、データベース参照ファイルが作成された後でレコードを削除する唯一の方法です。

4.6.3.2 例

fs /d dbase.ref /fs c:\accounts\ /af c:\lastyear\accounts\

この例では、ファイル名の前にある文字列、 c:\accounts\ が文字列、 c:\lastyear\accounts\ に置き換えられるように指定しています。/fs オプションで指定した文字列は、Fileshare サーバの現在のディレクトリからの相対パスとして拡張されることはありません。

4.6.4 バックアップフォルダレコード

/backup オプションを使用すると、自動的にバックアップディレクトリが指定されます。次に例を示します。

fs /d dbase.ref /backup c:\backup

この場合、Fileshare サーバが、起動時に、データベース参照ファイルで指定したすべてのファイルをディレクトリ、 c:\backup に自動的にコピーするように指定されます。


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

前ページへ構成 セキュリティ次ページへ