VSAM、VSAMデータセット » 「メインフレーム・コンピュータ」で遊ぼう
VSAM、VSAMデータセット » 「メインフレーム・コンピュータ」で遊ぼう
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もQSAM同様に、論理レコード単位にデータをやり取りすることができます。しかし順次アクセス以外にも直接アクセスやキーによるレコードの検索などもでき、順次アクセスであっても後ろへ戻ったり前へ飛ばしたりなど任意のレコードを直接示すこともできるようになっています。メモリー・イメージをそのまま格納するような目的のために、リニアー形式というレコード構造を持たない先頭から最後までが1つに繋がったフラットなスペースで構成するものもあります。
VSAMは、その仕組みや機能からアプリケーションプログラムのデータの格納用に幅広く使われてきました。キーによる検索やレコードのランダムアクセスなどは、VSAM以前にもISAMやBDAMといったアクセス方式で提供されていましたが、VSAMによってより簡単にデータファイルを構築できるようになり、1970年代から80年代にかけては業務データの格納ファイルの主力として使われました。その後データベース・システムが出現し、現在では業務データの格納にはDB2、IMS/DBなどのデータベース・システムが主に利用されています。しかしVSAMはこれらデータベース・システムの原型とも言えるもので、実際のデータベースの実装にVSAMが利用されたりもしました。今ではRDBMSが主流ですが、シンプルな構造でもよいものならばVSAMを直接使う方 が簡単で軽かったりします。
VSAMデータセットの種類
VSAMにはアクセス方法に応じて4種類のデータセットがあります。KSDS、ESDS、RRDSいずれも固定長または可変長の論理レコードを作れます。
PSPを使用してオンラインビデオを視聴する方法VSAMデータセットの処理
VSAMデータセットの作成や保守用にはAMSと呼ばれるアクセス方式サービスプログラムというユーティリティーが利用されています。また作成したVSAMデータセットに順次データセット内のレコードをローディングしたり、データが格納されているVSAMデータセットをバックアップしたりするのにも使われます。現在のz/OSでは、JCLのDDステートメントにもVSAM用のパラメーターが追加されているのでIEFBR14でもVSAMがアロケーションできたり、GENERでPSとVSAM間でコピーできたりしますが、VSAMとAMSユーティリティーは切っても切れない関係にあります。VSAMを扱うならAMSユーティリティーの基本的な機能や使い方はしっかり覚えることが大切です。
AMSユーティリティーについては、この記事を参照して下さい。
またVSAMには次のI/O機能が提供されています。(抜粋)
- OPEN
- CLOSE
- GET
- PUT
- ERASE
- POINT
データセットをオープンする。OSはメモリー内にアクセス用のバッファーを用意し、指定されたデータセットをアクセスするためのコントロールブロックとアクセス環境を作り上げる。
データセットをクローズする。
次のもしくは指定した論理レコードを取り出す。
次のもしくは指定した論理レコードを書き出す。
取り出した論理レコードを削除する。
次にアクセスするレコード位置を変更する。
機能の名前はQSAMやBSAMなどと大差はありません。これらはアセンブラーマクロで直接VSAMのアクセスメソッドを呼び出す場合に使用します。COBOLなどでは言語のI/Oステートメントの記述によってアクセスできます。
サンプルコード
このサンプルは、次のような構造のレコードを持つKSDSデータセットから顧客番号をキーにしてレコードを検索し読み出すCOBOLプログラムです。
***************************************************************** * 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を意識するのはデータセットを作成したりデータをローディングする作業においてでしょう。
0 コメント:
コメントを投稿