06.データ管理
データセットとファイル
MVSではファイルを「データセット」と呼びます。Windowsでは一部のソフトウェアがファイルを「ドキュメント」と呼びます。しばしば同じ意味で使われますが、この場合のファイルとドキュメントは、データの集合をより人間の操作感覚に近いものとしてドキュメントと表現し、裏付けである記録媒体上(例えばハードディスク)での集合体をファイルとして扱う、として使い分けられたものだと考えることができます。MVSにおけるファイルとデータセットもしばしば同じ意味で使われますが、本来は使い分けられるもので、それを理解することは重要です。
Windowsでマイドキュメントを開いてみてください。その中にはいくつかのファイルが入っているはずです。Wordファイル、Excelファイルあるいは画像のファイル何でもいいのですが、名前が付けられファイルの大きさや種類が示されていますね。MVSにおけるデータセットはそこで表示されている1つ1つのファイルと同じです。つまりディスク上に記録されているデータの集合としての実体です。一方ファイルは実体ではなく論理的なデータの集合体として捉えたもので、プログラムで扱うデータの集合として考えることができます。
データセットに付ける名前がデータセット名です。データセット名は1つまたは複数の修飾子(Qualify)で構成されます。修飾子はセグメントとも呼ばれます。各々の修飾子は1から8文字で、そのうち先頭は英字(AからZ)または国別文字(#@$または\)でなければなりません。残りの7文字は、英字、数字(0から9)、国別文字、またはハイフン(-)のいずれかです。修飾子はピリオド(.)によって連結し、データセット名を構成します。データセット名はすべての修飾子およびピリオドを含めて44文字までを使用することができます。ただし磁気テープ上のデータセットには17文字までの名前しか付けられません。17文字以上の名前を付けた場合は後方の17文字で認識されます。
デバイスとボリューム
データセットはディスクやテープに記録され保存されます。ハードウェアとしてのディスク装置やテープ装置がデバイスです。これらのデバイスには記録媒体が取り付けられ、実際のデータが記録されます。MVSではこの記録媒体をボリュームと呼びます。ボリュームとはデータセットを格納する入れ物(器)と言っていいでしょう。デバイスとボリュームは必ずしも1対1になりません。特にテープ装置で考えるとわかりやすいです。(PCのCD-ROMも同じです。機械の方がデバイスで、記録するメディアとしてのCD-ROMがボリュームに相当します。)
デバイス
MVSではデバイス(装置)には番号が付けられユニットとして管理されます。すべての入出力デバイスが対象になり、番号は4桁の16進数で構成されています。これを装置番号(Unit Number)と呼びます。VOS3では装置番号の代わりにニーモニック名と呼ばれる3文字の識別名が使えます。テープ装置ならT00,T01、DASDならK01,K02などのようにです。
ボリューム
テープ装置では取り外し可能な記録媒体が使われます。リールとかカートリッジと呼ばれるものです。同じ装置に複数のテープが取り付けられる(交互にではあるが)ため、テープ上のデータセットは装置番号では正しく指し示すことができません。そこで装置に取り付けられるテープには名前を付けて識別できるようにしています。これがボリューム通し番号(ボリューム名)で、最大6文字までの英数字を使用することができます。
ボリュームの考え方はディスク装置でも同じです。ディスクの場合は取り外し可能媒体ではありませんが考え方として装置と記録媒体を分けていると言うことです。
ディスク・テープ共にボリュームには先頭にボリューム・ラベルがあり、ボリューム通し番号と所有者名などが書き込まれています。ボリューム通し番号は個々のボリュームに付けられる識別名です。初期の頃はテープも容量が小さく、1つのデータセットが何本ものボリュームにまたがって記録されることも多かったので、通し番号の言い方の方がより実態を表していたのですが、ディスクに関してはボリューム名の方が表現としてわかりやすいです。そのため正確にはボリューム通し番号(Volume Serial Number)ですが、現在ではボリューム名と呼ばれることが多いです。またVOLSERとも表記されます。
DASDでは、ボリューム・ラベルに加え、VTOC(Volume Table Of Contents:ボリューム目録)が置かれます。VTOCにはDASD内の各データセットがどのサイズでどの位置に置かれているか、どのような形式のレコードか、DASD内の空き容量や空き位置などの情報が格納されており、ボリュームのインデックスとして使われます。またデータセットは必ずしも連続した場所に置かれるとは限りません。DASD内の空き状態に応じて複数に分割されて配置される場合もあります。この場合のデータセットを構成する1つ1つの要素(連続した物理レコードの集合)をエクステントと呼びます。
磁気テープ・ボリュームは標準ラベル(SL)とラベルなし(NL)の2つの形式に分かれます。SLでは先頭にボリューム・ラベルを持ち、データセットの前後に見出し・終了のラベルが書かれ、テープ内で順番にデータセットが並んでいます。ラベルにはデータセットの名前、レコード形式、ブロック長およびレコード長なども記録されています。一方のNLテープでは一切のラベルがなく、単にデータセット内容が順番にならんでいるだけです。そのため取り扱いがやや面倒で、テープ内のデータセットのレコード形式やブロック長、レコード長があらかじめわかっていないとデータを読み込むことができません。またどのデータセットがテープ内で何番目に書き込まれているかもわかっていなければなりません。
マウント
記録媒体を装置に取り付けることをMVSではマウントと呼びます。デバイスはIPL時に認識されますが、ボリュームはマウントによってMVSに認識されます。ディスクのように装置と媒体が一体になっていてもマウントの手続きは必要で、いつマウントするかのタイミングの違いがあるだけです。通常ディスクはIPL時に自動的に行われ、テープはジョブによってボリュームが要求されたときに行われます。あらかじめ装置に媒体が取り付けられていなければ、MVSはオペレーターにボリュームの取り付けをメッセージによって通知します。
カタログ
カタログはデータセット名およびそれが作成された装置の種類とボリューム名(テープであればテープ内の順序番号も含む)を記録しておく機能です。カタログされたデータセットは、DD文にデータセット名とアクセス後の後始末方法だけを指定すればアクセスできます。ユーザーは個々のデータセットが格納されているボリューム名を覚えたり、管理したりする必要がなくなります。MVSはDD文にボリュームの指定がないとカタログを探索してデータセットの場所を求めます。
また、カタログはデータセットを名前で管理するという面も併せ持ちます。これによってデータセットをバックアップする際などに、ボリュームを意識することなく、特定の用途にグループ化されたデータセットを一度にまとめて処理することができます。例えば経理業務のマスターファイルがKEIRI.MASTER.xxxxxxxxのように命名されていれば、KEIRI.MASTERで始まるすべてのデータセットを1度の操作で容易にバックアップを行うことができます。この時バックアップの対象になるデータセットがどのボリュームに格納されているかを意識する必要はありません。またカタログを使用する場合は異なるボリュームであっても同じ名前のデータセットを作成することはできなくなります。そのため同名のデータセットが散在し、どれが最新のものか、どれが正しい内容のものかが不明になるなどと言ったことも起きません。またカタログ自体にセキュリティを掛ければ、規定の命名基準に合っていない名前のデータセットをむやみに作成することを防止することもできます。なおカタログを上手に使うためには使用するデータセット名を正しく階層化することが必要です。
アロケーション
ジョブ・ステップで使用するデータセットは、あらかじめJCLのDD文によって定義されます。MVSはジョブ・ステップの開始時に、定義されたデータセットを探し出し、利用できるように準備します。これがアロケーションで、データセットを資源としてジョブ・ステップに割り当てることです。プログラムから見た場合は、論理的なデータの集合であるファイルを、データの実体であるデータセットに関連付けることになります。
手順が多く面倒に見えますが、MVSではアロケーションの仕組みを採用することによってプログラマーとオペレーターの負担を減らし、スループットを向上させています。
例えば処理の結果をデータセットに出力する場合、対象のデータセットを新たに作成して書き出すのか、既存のデータセットに上書きするのか、追加するのか、同じ出力処理でも何通りもの状況が考えられます。
プログラマーは考え得るすべての状況に対応したロジックを組まねばなりません。データセットがすでに存在していたら上書きするのか最後尾に追加するかを、いずれか一方に固定した処理にするか、あるいはパラメーターなどで選択できるようにするかを考え実装しなければなりません。このようなことは本来アプリケーションとしてのビジネス・ロジックとは直接関係しません。
また運用する側から見ればプログラム側で機能が固定されてしまうと、プログラムに合わせた運用しかできず不便です。プログラムが常に既存のデータセットの先頭から上書きして書き出す仕様になっていれば、追加して書き出したいときには現在のデータセットをバックアップしておき、後でマージしなければなりません。新たなデータセットに書き出したいときには、プログラムの実行前にあらかじめ空のデータセットを作成しなければなりません。このような作業が発生すれば、その分ジョブの実行に手間取り、結果としてシステムのスループットは低下します。
プログラマーが楽をすればオペレーターの負担は増しますし、それを解決するにはプログラミングは制御的な処理で複雑になり負担も増えます。これだけのことを考えてもプログラマー、オペレーター双方に取って負担です。
MVSにおけるアロケーションは、このような問題からプログラマーとオペレーター双方の負担を減らし、柔軟な運用を可能にする仕組みなのです。
※アロケーションの機能はMVSではデータ管理ではなくジョブ管理に属します。便宜上ここで説明しましたが、実際にはデータセットの割り当ては、ジョブで使用する資源として管理されるため、ジョブ管理の仕事となっています。
Comment from shok
Time 2013年7月11日 at 07:14
英文はmnemonicと同じです。IT用語辞典では、ニーモニックとなっているようですが、社内の用語集ではニモニックです