PDSデータセット

PDSデータセット(区分データセット)は、区分編成データセットのことで、MVSにおけるライブラリー・ファイルです。PDS(Partitioned DataSet)あるいはPO(Partitioned Organization)データセット(ファイル)などと呼ばれます。

JCLやプログラム・モジュール、パラメーターなど、プロジェクトなどにおいて使用されるさまざまなデータや、プログラムを構成する複数のモジュールなどは、それぞれが独立したファイルとして作成されますが、1つ1つを独立した順次データセットとして作るのでは、ファイルの数は膨大になり、それらの管理も非常に煩雑になります。

そこで、同じグループに属する1つ1つの異なる内容のファイルを、1つの器に格納してまとめ上げることができるように、区分データセットというライブラリー・ファイルが用意されています。区分データセットでは「器」がデータセットそのもので、器の中に格納される1つ1つのファイルがメンバーとなります。さらに、器の中のどの場所にどのメンバーがいるかを記した、ディレクトリーと呼ばれるインデックス情報を持っています。

ライブラリーということで、区分データセットは、主にプログラム・モジュール(ソース・コード、オブジェクト・モジュール、ロード・モジュールなど)、JCLやプロシージャー、CLIST、パラメーター・データなどを格納するために使われます。例えば、OS自身のロード・モジュールを格納しているSYS1.LINKLIB、SYS1.LPALIB、OSを起動するためのさまざまなパラメーターを格納しているSYS1.PARMLIBなどがあります。アプリケーションにおいても、業務データの格納にはデータベースやVSAMあるいは順次データセットなどが使われますが、アプリケーションのプログラムそのものや、アプリケーションを実行するためのJCLなどは、大半が区分データセットに格納されます。ライブラリーと言っても、すべてのプログラムを1つの区分データセットでまかなうことはなく、最低でもOSとユーザー・プログラムは別のデータセットで運用されます。メーカーやISVから提供される各種のミドルウェア類も、それぞれ独立した区分データセットで管理されます。アプリケーションであっても業務プログラムの種類やバージョンなどで、それぞれ専用の区分データセットを使って管理するのが一般的です。

なお、ロードモジュールは区分データセットにしか格納できません。区分データセットのディレクトリー・エントリー(索引エントリー)には、メンバーそのものの内容に加え、ユーザー独自の追加データを持つことができます。ロード・モジュールの場合は、モジュール・データをローディングするために必要なメモリーの大きさや、モジュール属性(RENT属性か否か、APF許可コードなど)など、OSがメモリーにモジュールを読み込んで管理するための制御情報が、追加データとして書き込まれます。ロード・モジュール以外でも、例えば、ISPFエディターでは、ソース・プログラムやJCLメンバーの最終更新日や更新者のIDなどを、追加情報としてディレクトリー・エントリーに書き込みます。ただし、ロード・モジュールと異なり、ISPFエディターでは追加の情報は、あってもなくてもかまわないオプション・データです。

区分データセットも、順次データセット同様にOS/360当時から使われている基本的な(古典的な)データセット編成の1つです。ディスク上の物理的な構造が、そのままプログラム上にも展開され使われます。数十年の長きに渡り、現在でも主力データセットとして使われていますが、作成時に格納する最大メンバー数を見積もっておく必要があり、それを超えるとデータセット自体に空き容量があっても新しいメンバーが追加できないことや、メンバーの書き換えや追加を繰り返すたびにデータセット内の空きスペースが断片化し、やがてはメンバー書き換えや追加ができなくなること、また、そのような状態を解消し(フラグメンテーションの解消)再びメンバー書き換えや追加を行えるようにするために「圧縮」という操作が必要になること、などが運用上のウィークポイントとしてありました。

圧縮操作は、データセット内のすべてのメンバーの格納位置をずらす場合もあり、もし失敗すればデータセット内のすべてのメンバーをパァにしてしまうこともあり得るため、圧縮処理中は他のジョブからの書き込みはもちろん、読み込みであってもできないように排他制御を掛けることが普通です。したがって、業務用の区分データセットを常駐プログラムなどでアロケーションしていると、それらのソフトウェアを一旦止めることになったり、業務を止められないため夜間にバッチで定期的に圧縮したり、が行われていました。

そのような区分データセットの弱点をなくし、運用を止めなくてもいいようにするため、さまざまなライブラリー管理システムがソフトウェア製品として提供されました。例えば、MVS用では「LIBRARIAN」「PANVALET」という製品が日本でも有名です。元々は、別会社の別製品でしたが、どちらもCA社に買収されて、現在ではCA Librarian、CA Panvaletとして提供されています。LIBRARIANやPANVALETは、圧縮の要らない区分データセットのように使うこともできますが、書き換えたメンバーの修正箇所の履歴を残すこともできます。そのため、日本でも多くのユーザーがソース・プログラムやJCLの格納ライブラリーとして利用していました。LIBRARIANは、一時MSPにも移植されていたようですが、MSPにはGEMという富士通自身が提供するライブラリー管理製品があります。VOS3にも日立自身が提供するLIMEという製品があります。

以前はこれらのライブラリー管理製品が多くのユーザーで使われ、さまざまなISVソフトウェアでも、拡販のためLIBRARIANやPANVALETとインタフェースを持つようなことも多く、また、ライブラリー管理製品側でも、プログラムからは区分データセットとしてアクセス可能にする、サブシステム・インタフェースなどが追加されたりしていました。

しかし、その後MVS(MVS/ESA)では、DFSMSによって従来の区分データセットの欠点を解消した、新しい区分データセットとして、PDSE(拡張区分データセット)が使えるようになりました。PDSEでは、VSAMのように、データセットの物理的構造とプログラムから見た論理的構造が分かれています。物理的には、4KBの固定長順次データセットの構造ですが、プログラムには従来通りのディレクトリー+メンバーの構造を見せており、RECFMやLRECLも論理的な値です(VTOC上はアプリケーションから見たRECFMとLRECL、BLKSIZEとなるが、ディスク・トラック上には4KB固定長のデータ・ブロックで書かれている)。PDSEは、実体はPSデータセットですが、プログラムからは区分データセットに見える「仮想区分データセット」でもあります。PDSEでは、ディレクトリー部が自動的に拡張される、圧縮が不要(内部で必要に応じ自動的に行われる)、より高速なメンバー探索、複数のジョブでの同時更新(同じライブラリーに違うメンバーを同時に書き込むなど)ができる、などの特長を持っています。さすがに、メンバー書き換え時に変更点の履歴を残すような機能はないものの、圧縮不要で複数ジョブによる同時更新もできるので、ISVによるライブラリー管理ソフトに代わり、PDSEによる運用に移行したユーザーも多いようです。

区分データセットがどのような構造を持っているかは、z/OSのしくみ:基礎編「データセットの種類とアクセス方式」の区分データセットとBPAMで解説しています。