可変長スパンドレコード

スパンド・レコードは、物理レコード長を超えて書き込めるようにした可変長レコードです。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形式に変換してコピーすることも可能です。

  • VBS形式のデータセットをVB形式に変換してコピーする

現在のMVSシステムで使われる3390ディスクや3380ディスクでは、トラックの長さが56664バイトもしくは47476バイトと、データ管理がサポートする最大長である32760バイトを大きく上回っています。したがって、トラックの長さを超える論理レコードを作るためにスパンド・レコードを選択する必要性は基本的になくなりました。

しかし、初期のMVSの頃に使われていたディスクのトラック長は、約8K、13K、19Kといった小さなものでした。そのため、ある程度大きなサイズの論理レコードを持たせるためには、物理レコードを超えて書き込めるようにするしくみが必要で、スパンド・レコードは非常に便利なものでした。データセットのレコード長を、使用するディスクの物理的特性に制約されずに、アプリケーションの仕様で決めることができたのです。また、違うタイプのDASDにデータセットを移すような場合の柔軟性も増しました。

現在では、トラック長の異なるディスク装置を組み合わせて運用することも少なく、スパンド・レコードを選択するのは、ディスク・スペースの節約か古いプログラムとの互換性が主な理由でしょう。

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