PDSデータセットとは?
PDSデータセット(区分データセット)とは?
区分編成データセットはMVSにおけるライブラリーファイルのことです。PDS(Partitioned DataSet)あるいはPO(Partitioned Organization)データセット(ファイル)などと呼ばれます。
JCLやプログラム・モジュール、パラメーターなど、プロジェクトなどにおいて使用されるさまざまなデータや、プログラムを構成する複数のモジュールなどは、それぞれが独立したファイルとして作成されますが、1つ1つを独立した順次データセットとして作るのでは、ファイルの数は膨大になり、それらの管理も非常に煩雑になります。
そこで同じグループに属する1つ1つの異なる内容のファイルを、1つの器に格納してまとめ上げることができるように区分データセットというライブラリーファイルが用意されています。区分データセットでは「器」がデータセットそのもので、器の中に格納される1つ1つのファイルがメンバーとなります。さらに器の中のどの場所にどのメンバーがいるかを記したディレクトリと呼ばれるINDEX情報を持っています。
ライブラリーということで、区分データセットは主にプログラム・モジュール(ソースコード、オブジェクトモジュール、ロードモジュールなど)、JCLやプロシージャー、CLIST、パラメーター・データなどを格納するために使われます。例えばOS自身のロードモジュールを格納しているSYS1.LINKLIB、SYS1.LPALIB、OSを起動するためのさまざまなパラメーターを格納しているSYS1.PARMLIBなどがあります。アプリケーションにおいても、業務データの格納にはデータベースやVSAMあるいは順次データセットなどが使われますが、アプリケーションのプログラムそのものや、アプリケーションを実行するためのJCLなどは大半が区分データセットに格納されます。ライブラリーといってもすべてのプログラムを1つの区分データセットでまかなうことはなく、最低でもOSとユーザープログラムは別のデータセットで運用されます。メーカーやISVから提供される各種のミドルウェア類もそれぞれ独立した区分データセットで管理されます。アプリケーションであっても業務プログラムの種類やバージョンなどでそれぞれ専用の区分データセットを使って管理するのが一般的です。
なおロードモジュールは区分データセットにしか格納できません。区分データセットのディレクトリエントリー(INDEXエントリー)にはメンバーそのものの内容に加え、ユーザー独自の追加データを持つことができます。ロードモジュールの場合はモジュール・データをローディングするために必要なメモリーの大きさや、モジュール種類(RENT属性か否か、APF許可コードなど)など、OSがメモリーにモジュールを読み込んで管理するための制御情報が書き込まれているためです。ロードモジュール以外でも、例えばISPFエディターではソースやJCLメンバーの最終更新日や更新者のIDなどを追加情報としてディレクトリエントリーに書き込みます。ただしロードモジュールと異なり、ISPFエディターでは追加の情報があってもなくてもかまわないオプションデータです。
区分データセットも順次データセット同様にOS/360当時から使われている基本的な(古典的な)データセット編成の1つです。ディスク上の物理的な構造がそのままプログラム上にも展開され使われます。数十年の長きに渡り現在でも主力データセットとして使われていますが、最初に格納する最大メンバー数を見積もっておく必要があり、それを超えるとデータセット自体に空き容量があっても新しいメンバーが追加できないことや、メンバーの書き換えや追加を繰り返すたびにデータセット内の空きスペースが断片化し、やがてはメンバー書き換えや追加ができなくなること、またそのような状態を解消し(フラグメンテーションの解消)再びメンバー書き換えや追加を行えるようにするために「圧縮」という操作が必要になること、などが運用上のウィークポイントとしてありました。
圧縮操作はデータセット内のすべてのメンバーの格納位置をずらす場合もあり、もし失敗すればデータセット内のすべてのメンバーをパァにしてしまうこともあり得るため、圧縮処理中は他のジョブから書き込みはもちろん、読み込みであってもできないように排他制御を掛けることが普通です。したがって業務用の区分データセットを常駐プログラムなどでアロケーションしていると、それらのソフトウェアを一旦止めることになったり、業務を止められないため夜間にバッチで定期的に圧縮したり、が行われていました。
そういった区分データセットの弱点をなくし運用を止めなくてもいいようにするためさまざまなライブラリー管理システムがソフトウェア製品として提供されました。例えばMVS用では「LIBRARIAN」「PANVALET」という製品が日本でも有名です。元々は別会社の別製品でしたがどちらもCA社に買収されて現在ではCA-XXXXXXXXとして提供されています。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」で解説しています。