VSAM、VSAMデータセット

By 神居 - Posted: 2011/05/12 Last updated: 2011/05/16 - One Comment

VSAM:Virtual Storage Access Method,仮想記憶アクセス方式

VSAMとは

VSAMとは、データをレコード単位に格納しプログラムで処理するためのデータセットへのアクセス方式です。OSの仮想記憶の機能や仕組みを前提として実装されたファイルシステムで、当初からあったSAM(順次アクセス方式)やDAM(直接アクセス方式)などと異なり、データセットの物理構造をプログラムが意識しなくてもいいように設計されました。
VSAMでアクセスされるレコードを格納した器がVSAMデータセットとなります。VSAMデータセットは他のデータセットと異なり、ディスク装置にしか置くことができません。テープにVSAMデータセットを作成するようなことはできないのです。バックアップをテープに置くことはできますが、この場合のバックアップ・データセットはVSAMではなく、VSAMデータセット内のレコードをアンロードして並べた順次データセットになります

VSAMでは、QSAMやBPAMなどの順次データセットや区分データセットと異なり、プログラムはディスク内のVSAMデータセットに直接アクセスするわけではありません。VSAMによって仮想記憶上に展開された[仮想のファイルの]レコードにアクセスすることになります。

補足:VSAMでもデータの実体はディスク上のデータセットですが、このデータセットにはVSAMによる内部フォーマットによってデータが整理されて格納されています。プログラムはVSAMデータセット内の物理データレコードをそのまま扱うのではなく、VSAMがプログラムで扱う論理レコードの形式に再構成して仮想記憶上に展開したデータがプログラムに渡されます。プログラムは定められたAPI(GETとかPUTなど)を出せばよくVSAM内部の動きなど意識する必要はありません。似たようなものとしてPDSEがあります。PDSEもディスク上の実体は4KB固定長レコードの順次データセットですが、プログラムからは区分編成データセットとしてアクセスできます。VSAMもPDSEも順次編成データセットや区分編成データセットのように、データセットの物理的なブロック構造がそのままプログラムに入ってくるわけではないと言う意味で、メモリー上の仮想のファイルにアクセスするようなもの、と表現しています。データセットがまるごとメモリーに読み込まれてディスクへのI/Oが行われないと言う意味ではありません。


VSAMのしくみ

VSAMのしくみ



VSAMの特長

VSAMもQSAM同様に、論理レコード単位にデータをやり取りすることができます。しかし順次アクセス以外にも直接アクセスやキーによるレコードの検索などもでき、順次アクセスであっても後ろへ戻ったり前へ飛ばしたりなど任意のレコードを直接示すこともできるようになっています。メモリー・イメージをそのまま格納するような目的のために、リニアー形式というレコード構造を持たない先頭から最後までが1つに繋がったフラットなスペースで構成するものもあります。

VSAMは、その仕組みや機能からアプリケーションプログラムのデータの格納用に幅広く使われてきました。キーによる検索やレコードのランダムアクセスなどは、VSAM以前にもISAMやBDAMといったアクセス方式で提供されていましたが、VSAMによってより簡単にデータファイルを構築できるようになり、1970年代から80年代にかけては業務データの格納ファイルの主力として使われました。その後データベース・システムが出現し、現在では業務データの格納にはDB2、IMS/DBなどのデータベース・システムが主に利用されています。しかしVSAMはこれらデータベース・システムの原型とも言えるもので、実際のデータベースの実装にVSAMが利用されたりもしました。今ではRDBMSが主流ですが、シンプルな構造でもよいものならばVSAMを直接使う方が簡単で軽かったりします。


VSAMデータセットの種類

VSAMにはアクセス方法に応じて4種類のデータセットがあります。KSDS、ESDS、RRDSいずれも固定長または可変長の論理レコードを作れます。


VSAMデータセットの処理

VSAMデータセットの作成や保守用にはAMSと呼ばれるアクセス方式サービスプログラムというユーティリティーが利用されています。また作成したVSAMデータセットに順次データセット内のレコードをローディングしたり、データが格納されているVSAMデータセットをバックアップしたりするのにも使われます。現在のz/OSでは、JCLのDDステートメントにもVSAM用のパラメーターが追加されているのでIEFBR14でもVSAMがアロケーションできたり、GENERでPSとVSAM間でコピーできたりしますが、VSAMとAMSユーティリティーは切っても切れない関係にあります。VSAMを扱うならAMSユーティリティーの基本的な機能や使い方はしっかり覚えることが大切です。
AMSユーティリティーについては、この記事を参照して下さい。

またVSAMには次のI/O機能が提供されています。(抜粋)

機能の名前はQSAMやBSAMなどと大差はありません。これらはアセンブラーマクロで直接VSAMのアクセスメソッドを呼び出す場合に使用します。COBOLなどでは言語のI/Oステートメントの記述によってアクセスできます。


サンプルコード

このサンプルは、次のような構造のレコードを持つKSDSデータセットから顧客番号をキーにしてレコードを検索し読み出すCOBOLプログラムです。

サンプルVSAMファイルのレコード構造

サンプルVSAMファイルのレコード構造


      *****************************************************************
      *  COBOL EXAMPLE PROGRAM(SEARCH VSAM KSDS DATASET)
      *****************************************************************
       IDENTIFICATION DIVISION.
       PROGRAM-ID.    CUSTOMER.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT MSTRFILE ASSIGN TO SYSMSTR
                           ORGANIZATION IS INDEXED  RECORD KEY IS PHONE
                           ACCESS IS DYNAMIC  FILE STATUS IS FS-CODE.
      *
       DATA DIVISION.
       FILE SECTION.
       FD  MSTRFILE
           RECORD 80.
       01  MSTRDATA.
           03 PHONE                     PIC X(10).
           03 NAME                      PIC X(20).
           03 ADDR                      PIC X(50).
       WORKING-STORAGE SECTION.
       01  FS-CODE                      PIC XX.
      *
       PROCEDURE DIVISION.
           OPEN INPUT MSTRFILE.
           DISPLAY "INPUT CUSTOMER PHONE NUMBER." UPON SYSOUT.
       LOOP.
           MOVE SPACE TO PHONE.
           ACCEPT PHONE FROM SYSIN.
           IF PHONE = SPACE THEN CLOSE MSTRFILE
                                 STOP RUN.
           READ MSTRFILE.
           IF FS-CODE = "00"
              THEN DISPLAY "NAME=", NAME,
                           "INFO=", ADDR UPON SYSOUT
              ELSE DISPLAY "RECORD NOT FOUND." UPON SYSOUT.
           GO TO LOOP.

レコードの先頭10バイトが検索キーです。COBOLなどでは言語仕様がアクセス方式を隠してしまうので、プログラミングではVSAMをアクセスしているという意識があまりありません。実際にVSAMを意識するのはデータセットを作成したりデータをローディングする作業においてでしょう。

Posted in キーワードから(何が知りたいですか) • • Top Of Page

One Response to “VSAM、VSAMデータセット”

Comment from 野良猫
Time 2011年5月14日 at 00:52

>VSAMによって仮想記憶上に展開された[仮想のファイルの]レコードにアクセスすることになります。

 仮想記憶にVSAMを本当に展開してますか?
 自分が今までVSAMを使用していた際にはそのように感じませんでした。
 仮想記憶に展開しているとしたらVSAMの数だけ仮想記憶への展開が必要で、その展開もいつの時点で展開するのでしょうか。
 OPEN時?それでは仮想記憶の容量が枯渇するのではないのでしょうか。

 VSAMも一般ファイル(SAM、PAM、ISAM、DAM)と同じくDASDベースでアクセスがされると自分は思っているのですが、どうでしょうか?