DFSMSの保証スペース

数千シリンダーを超えるような大きなデータセットを作成する場合、複数のボリュームに分散して割り当てることができます。マルチボリューム・データセットなどと呼ばれ、古くから利用されてきました。

上記のサンプルJCLは、データセットを最大3つのボリュームに分散して作成するものです。最初に割り振られるスペースは、ボリュームDATA01に3000シリンダーです。DATA01に3000シリンダーを満たす空きスペースがなければ、最初の割り振りに失敗します。最初の割り振りに成功した後、3000シリンダーを使い切るとOSは同じボリュームDATA01に1000シリンダー分の2次量で追加の割り振りを試みます。ボリュームDATA01に空きがなければDATA02、そこも空きがなければDATA03と順に最大3ボリュームにまたがってスペースが割り振られていきます。

これが基本的なデータセット・スペースの拡張メカニズムですが、使う側から見ると問題がないわけではありません。確実にスペースが割り振られるのは最初の3000シリンダーだけです。例え2次量と追加ボリュームを指定してデータセット・スペースが複数のボリュームにまたがってもかまわないことを明示していても、2次スペース量の拡張時に指定されたボリュームに空きがなければ追加の割り振りはできません。その結果スペース不足でジョブはABENDしてしまいます。
このような問題を回避するためDFSMSには保証スペース(Guaranteed Space)という機能があります。SMSのストレージクラスにGuaranteed Space=Yesの属性を与えれば、割り振り候補となる全てのボリュームに1次量を割り振ります。

保証スペースの機能を利用すると、データセットは指定された数(上記例では3個)のボリュームに1次量である3000シリンダーが割り振られ、最初に作成した時点で3000シリンダー×3ボリュームで9000シリンダーのスペース量が確保されます。2次量が指定されていれば最初のボリュームの1次スペースが一杯になると同じボリューム内で可能なだけの2次スペース量拡張が行われ、それをすべて使い切ってから2番目のボリュームのすでに割り振り済みの1次スペースが使われます。絶対に必要としたいスペース量を事前に割り振ることができるため、運用中にスペース不足でジョブがABENDすることを防げます。保証スペースは、指定した1次量を複数のボリュームに分散するのではありません(例えば1000cylを250cylずつ4ボリュームに割り振る)、また指定した1次量が最初のボリュームでまかないきれず不足分を次のボリュームに割り当てるものでもありません(例えば1000cylのうち、最初のボリュームに800cyl、2番目のボリュームに200cylを割り振る)。VOLパラメーターで指定されたすべてのボリュームにSPACEパラメーターで指定された1次量を割り振ります。したがって、その仕組みを考慮して1次量を指定します。例えば、全部で5000シリンダーが必要で、5つのボリュームが使えるなら1次量は1000cylとします。指定されたボリュームのうち、1つでも1次量を満たす空きスペースがなければデータセットは作成されません。

なお、ラージ・データセットを作成し、かつそのスペース割り振りを保証するには、保証スペース機能の他にも3390-9型以上の大容量ボリュームに単一エクステントのデータセットとして作成する方法もあります。一般のデータセットでは1つのボリュームに割り当てることができるエクステント(ボリューム内でデータセットに割り当てられる連続した領域)は最大65535トラックに制限されますが、拡張形式の順次データセットやVSAMデータセットには65535トラックを超える容量のデータセット・エクステントを割り当てることができます。拡張形式の順次データセットなら、30,000シリンダーという巨大なデータセットでも単一エクステントで割り振ることができます。

保証スペースやラージ・エクステントに関する詳細はマニュアル「z/OS DFSMS データ・セットの使用法」に解説されています。