ファイルシステム:スパンドレコード

By 神居 - Posted: 2013/04/12 Last updated: 2013/04/12 - Leave a Comment
印刷用ページの表示 印刷用ページの表示

可変長スパンド・レコード

スパンド・レコードは、物理レコード長を超えて書き込めるようにした可変長レコードです。1つの論理レコードを複数のセグメントに分割し、各セグメントを複数のブロック(物理レコード)にまたがって記録することにより、物理レコード長に制約されない長い論理レコードを作ることができます。また32756バイトを超える長い論理レコードにすることも可能です。
(※32Kを超える長い論理レコードにする場合、プログラムはセグメント単位でレコードにアクセスすることになる。アセンブラー言語の場合、QSAMの位置付けモードによってセグメント単位でレコードにアクセスできる。セグメントを論理レコードに組み立てたり、論理レコードをセグメントに分割したりするのはプログラムの作業となる。移動モードやデータモードではセグメントのハンドリングはQSAMが行うが、扱える論理レコード長は32756(RDWを含む)バイトまでとなる。)


スパンド・レコードの構造

可変長レコードでは、データの先頭にレコードの長さを示す4バイトのRDWフィールドが付加されますが、スパンド・レコードはRDWではなくセグメントの長さと種類を示すSDWが付加されます。SDWも4バイトです。

スパンド・レコードの構造

スパンド・レコードの構造


スパンド・レコードでは、1つの論理レコードを複数の物理レコードにまたがって書き込むことができるだけでなく、1つの物理レコードに複数のセグメントを書き込むこともできます。そのため、論理レコード長が長くなり、最適なブロックサイズを超えるような場合は、スペース効率は非スパンド・レコードよりもよくなります。

スパンド・レコードと非スパンド・レコードのスペース効率

スパンド・レコードと非スパンド・レコードのスペース効率


3390ディスクでは、可変長レコードの場合の最適なブロックサイズは27998バイトです。これは1つのトラックに2つ書けるブロックサイズです。最大レコード長が27994以下の場合は、VBでもVBSでもさほどの違いはありません。しかし論理レコードの長さが、最適なブロックサイズを超える場合、VBでは1トラックに1つのブロックしか書き込めなくなるためスペース効率は途端に悪くなります。
VBSなら論理レコード長が27994を超えてもブロック長は最適サイズの27998のままで、またブロックの残りスペースに次のレコードが全部書き込めなくても、セグメントに分割して書き込めるだけ書き、残りを次のブロックに回します。そのため最後のブロックを除き、途中では最大ブロック長でトラックに書き込むため、常にトラックのデータ・スペースをフルに使い切るように処理されます。
なお、スパンド・レコードの処理には単純なVB形式のデータセットよりは追加のオーバーヘッドを必要とします。(例えばセグメント分割など)


スパンド・レコード・データセットの割り振り

スパンド・レコードのデータセットを割り振るには、DDステートメントでRECFM=VBSを指定します。LRECLは32756バイトまでの任意の値を指定します。32756バイトを超える論理レコードにしたい場合は、LRECL=Xと指定します。この場合、VTOCのDSCB1のLRECLフィールドにはx8000(32768)バイトで示されますが、実際のレコード長は任意です。

スパンド・レコードのデータセットは、スペース効率はよいのですが、アプリケーション・プログラムでの扱いやデータセットの運用上は、必ずしも使いやすいとは言えません。スパンド・レコードのデータセットは、ISPFでは表示・編集することはできませんし、COBOLでは、32760バイトまでのスパンド・レコードしかサポートされません。
しかし、アプリケーション・プログラムで直接スパンド・レコードを扱うことは少ないとしても、そのしくみについては知っておくと応用が拡がります。例えば、SMFレコードをダンプした際のアンロード・データセットは可変長のスパンド・レコード形式で出力されます。
(※デフォルトではLRECL=32767となるが、DCBパラメーターでLRECL=32760を選択することもできる。ただしレコード形式はVBSを変更できない。なお、IBMのコンポーネントによって書き出されるSMFレコードはレコード長が32756バイトを超えることはない。)
なお、VBS形式のデータセットはDFSORTによって、VB形式に変換してコピーすることも可能です。

現在のMVSシステムで使われる3390ディスクや3380ディスクでは、トラックの長さが56664バイトもしくは47476バイトと、データ管理がサポートする最大長である32760バイトを大きく上回っています。したがって、トラックの長さを超える論理レコードを作るためにスパンド・レコードを選択する必要性は基本的になくなりました。
しかし初期のMVSの頃に使われていたディスクのトラック長は、約8K、13K、19Kといった小さなものでした。そのため、ある程度大きなサイズの論理レコードを持たせるためには、物理レコードを超えて書き込めるようにするしくみが必要で、スパンド・レコードは非常に便利なものでした。
データセットのレコード長を、使用するディスクの物理的特性に制約されずに、アプリケーションの仕様で決めることができたのです。また、違うタイプのDASDにデータセットを移すような場合の柔軟性も増しました。
現在では、トラック長の異なるディスク装置を組み合わせて運用することも少なく、スパンド・レコードを選択するのは、ディスク・スペースの節約か古いプログラムとの互換性が主な理由でしょう。

VSAMデータセットでもスパンド・レコードはサポートされています。VSAMの場合は物理レコードではなく、CIサイズを超える論理レコードを使用する場合がスパンド・レコードとなります。スパンド・レコードの機能によって、最大CIサイズ(32KB)を超える長さの論理レコードを定義することができます。

Posted in .z/OS(MVS),MSP,VOS3のしくみ • • Top Of Page