世代ファイル
-
A−VXのファイルに世代ファイルというものがあります。
ここでは世代ファイルについて説明します。
A−VXの世代ファイルは、使っているところはそれなりに多用しているようですが、使っていないところは全然使っていないので、それほど重要ではないです。
- 1 世代ファイルとはどのようなものか
-
数世代からなるファイルで、磁気ディスク上にのみ作ることができます。
独自の種類のファイルというものではなく、順編成、相対編成、索引順編成ファイルに”世代”という属性を付けたものです。
普通に順編成ファイルや相対編成ファイルを作ると無世代のファイルとなります
1回オープンして書き込みを行うと、クローズ時に、世代が1個上がります。次にオープンする時には、次の世代ファイルをオープンすることになります。
さらにオープンした時に、オープンモードにより使用する世代ファイルが変わります。
入力モード、更新モード ・・・ 最新世代ファイル 出力モード ・・・ 最古世代ファイル
例えば、4世代のファイルを作ると、自動的に同じ名前のファイルが4つ磁気ディスク上に作られます。
この4つの同名ファイルは、世代番号が異なるだけで、同じサイズ、同じレコード長、同じ属性となります。
一般のアプリケーションは普通にファイルをオープンしたりクローズしたりできますが、この世代ファイルはオープンするファイル名は指定できますが、どの世代のファイルをオープンするかは指定できません(ファイルを保守するユーティリティなら可能)。1回書き込み&クローズする毎に、オープンできる世代ファイルが1つずつずれていきます。その上読み込みと書き込みで、対象となる世代ファイルが異なります。
- 2 ボリュームマップ上での見え方
-
簡易操作ユーティリティでボリュームマップを画面に出すと、世代ファイルは下の画面のようになります。
赤枠の中のファイルが世代ファイルです。世代ファイルは、GENの列に世代番号が表示されます。(逆に世代ファイルでない通常のファイルを無世代ファイルと呼ぶ。)
下のGENFILEは世代番号が1から4まであるので、4世代の世代ファイルです。
青枠の行が、世代管理ラベルを表示している部分です。
「LATEST G-NO」は最古世代ファイルの世代番号、「TOTAL G-NO」は世代総数を表します。
下のGENFILEの場合、最古世代ファイルは2番目で、4世代の世代ファイルであることを表しています。
最古世代ファイルは、書き込みオープンされる毎に+1され、最終番号のファイルまで達すると1番目のファイルに戻ります。世代総数は通常は変わりません。(アロケータなどで世代ファイルを増やせば別ですが。)
最新世代ファイルは、最古世代ファイルの次の番号のファイルとなります。(例えば最古世代ファイルが01ならば、最新世代ファイルは02)
- 3 世代ファイルの操作
-
文字だけだと複雑でよくわからないと思われるので、実際に例をあげて、ファイルに対してどのように読み書きが行われるのか示します。
例として、世代ファイルの中のデータを読み込み、別のデータを書き込みするアプリケーションを考えてみます。読み込みの前後、書き込みの前後にそれぞれオープン/クローズを行います。またファイルは4世代だとします。
ファイルを作成したばかりの時は、「LATEST G-NO」は1になっています。(最古世代ファイルは1番目のファイル。その次の番号のファイルが最新世代ファイルなので、最新世代ファイルは2番目のファイル)
初回は、ファイル中に何のデータも入っていないので、まず最初のデータを入れましょう。
ファイルをオープンして、マスターデータを書き込み、クローズします。
ファイルの書き込みは第2番目(最新世代ファイル)のファイルに書き込まれます。クローズすると、「LATEST G-NO」は2になります。(ここで最古世代ファイルが2番目のファイルとなり、最新世代ファイルが3番目のファイルとなる。)
いよいよ前述のアプリケーションを実行してみます。
まずファイルを「読み込み」モードでオープンして、データを読み込みます。その後ファイルクローズします。
読み込まれるデータは第2番目(最古世代ファイル)のファイルからとなります。書き込みは行っていないので、「LATEST G-NO」は2のままです。
今度はファイルを「書き込み」モードでオープンして、データを書き込みます。その後ファイルクローズします。
ここでの書き込みは第3番目(最新世代ファイル)のファイルに行われます。書き込みを行った後、ファイルクローズすると「LATEST G-NO」は3となります。(ここで最古世代ファイルが3番目、最新世代ファイルが4番目と変わる。)
もう一回アプリケーションを実行すると、今度は最古世代ファイルが3番目のファイルになるので、読み込みは3番目のファイル、書き込みは4番目のファイルになります。ファイルをクローズすると、最古世代ファイルは4番目のファイル(LATEST G-NO=4)となります。
さらにもう一回アプリケーションを起動すると、読み込みが4番目のファイル、書き込みは1番目のファイルとなり、ファイルクローズにより最古世代ファイルは1番目のファイルとなります。
こうして、順番に読み込み/書き込みが行われることになります。
この状態で、1回前に書き込んだデータは4番目のファイルに残っています。同様に2回前のデータは3番目、3回前のデータは2番目のファイルに残っています。 これは即ち、自動的に3回分のバックアップファイルが用意されるということになります。
これらの処理は、アプリケーション側で意識する必要はありません。世代ファイルに対して、オープン/クローズすることによって、システム側で自動的に行われます。また読み込みだけでは、世代が変わることはありません。
これを利用すると、例えば毎日業務終了時にデータを一気に書き込み、それをバックアップデータとして扱うことができます。
ただし1回書き込んでクローズすると1つファイルがずれるので、頻繁に書き込んでクローズするようなものには利用できません。書き込むときには、まとめて書き込むというような処理が必要です。
また更新モードだと最新世代ファイルのデータが更新されます。また追記もファイルの構造上できません。
- 4 ユーティリティの使用
-
複数の世代のファイルを作っても、以前の世代のファイルの中身を扱うことができなければ、利点はありません。
ユーティリティを使用した場合、「どの世代のファイル」をオープンするかを指定することができます。
簡易操作ユーティリティ(#ABC)やファイル変換ユーティリティ(#FLCNV)で、以前の世代のファイルの内容を参照したり、データをコピーしたりといったことができます。 例えば、2世代前のバックアップデータを別のファイルにコピーしたりといったことが可能です。
また最古世代ファイルを変更することもできます。
- ●作成方法●
-
下は簡易操作ユーティリティを使用した世代ファイルの作成例。
以下の条件の世代ファイルを作成します。
ファイル GENFILE 装置名 MSD002 ファイル編成 順編成 レコード長 80 ファイルサイズ 140 ブロック化係数 3 世代数 4
RUNコマンド入力行で、「#ABC;」と入力して[ENTER]キーを押します。
簡易操作ユーティリティ#ABCが起動されます。
実行したい機能を選びます。「1.ファイル情報の保守」を選択します。
ファイルを作成するので、「1.ファイルの保守」を選択します。
「1.ファイルの定義」を選択します。
そうすると、次にどの形式のファイルを作るかを聞いてきます。
今回は仮に順編成ファイルの世代ファイルを作るとして、「1」を選択します。
ファイルの定義画面になります。
装置は「MSD002」、ファイルは「GENFILE」と入力します。
レコード長は「80」バイト、領域サイズは「140」セクタにします。
世代ファイルを指定するにはファイル用オプションで「YES」を選択します。
ブロック化係数などは適当な値を設定します。このオプションの最後のパラメータである「総世代」が世代ファイルに関するパラメータです。今回の例では4世代ファイルなので、「4」と入力します。
最後の領域用オプションは、「NO」を選択します。
- ●最新世代ファイルの変更●
-
RUNコマンド入力行で、「#ABC;」と入力して[ENTER]キーを押します。
簡易操作ユーティリティ#ABCが起動されます。
実行したい機能を選びます。「1.ファイル情報の保守」を選択します。
ファイルの属性を変更するので、「3.ファイルの属性の変更」を選択します。
ファイルの属性の変更画面になります。
装置名MSD002上のGENFILEという名前の世代ファイルの最新世代ファイルを2にする場合。
- ●その他ユーティリティ●
-
世代ファイルをA−VXのユーティリティで扱う時には、一部の例外を除いて、どの世代ファイルを使用するか指定できるようになります。
・世代ファイルGENDILEのファイルダンプ表示の時のパラメータ指定例。相対世代番号入力が要求される。
・ファイル変換の例。相対世代番号2のGENFILEからDATA80へデータコピーを行なおうとしているところ。4行目のIGNで相対世代番号を指定している。
この時に注意するのは、指定する番号はボリュームマップで表示されるファイルの番号ではなくて、最新世代ファイルより何世代前のファイルを使用するか(相対世代番号:IGN)を指定するということです。