Vsam-quick-guide

提供:Dev Guides
移動先:案内検索

VSAM-概要

Virtual Storage Access Method(VSAM)は、パフォーマンスの高いアクセス方法およびデータセット編成であり、カタログ構造を介してデータを編成および維持します。 仮想ストレージの概念を利用し、パスワードを与えることでさまざまなレベルでデータセットを保護できます。 VSAMは、物理順次ファイルなどのCOBOLプログラムで使用できます。 VSAMは、レコードを保存するための論理データセットです。 VSAMでは、ファイルを連続してランダムに読み取ることができます。 これは、シーケンシャルファイルのような従来のファイルシステムの制限のいくつかを克服するデータの保存方法の改善です。

VSAMの特性

VSAMの特徴は次のとおりです-

  • VSAMは、パスワードを使用して不正アクセスからデータを保護します。
  • VSAMは、データセットへの高速アクセスを提供します。
  • VSAMには、パフォーマンスを最適化するオプションがあります。
  • VSAMでは、バッチ環境とオンライン環境の両方でデータセットを共有できます。
  • VSAMは、データを格納する際により構造化および編成されています。
  • 空き領域は、VSAMファイルで自動的に再利用されます。

VSAMの制限

VSAMの唯一の制限は、TAPEボリュームに保存できないことです。 常にDASDスペースに保管されます。 データを保存するために多数のシリンダーが必要ですが、費用対効果が高くありません。

VSAM-コンポーネント

VSAMは次のコンポーネントで構成されています-

  • VSAMクラスター
  • コントロールエリア
  • 制御間隔

VSAMクラスター

VSAMは、レコードを保存するための論理データセットであり、クラスターと呼ばれます。 クラスターは、データセットのインデックス、シーケンスセット、およびデータ部分の関連付けです。 VSAMクラスターが占有するスペースは、制御インターバルと呼ばれる連続した領域に分割されます。 制御間隔については、このモジュールの後半で説明します。

VSAMクラスターには2つの主要なコンポーネントがあります-

  • *インデックスコンポーネント*にはインデックス部分が含まれます。 インデックスレコードは、インデックスコンポーネントに存在します。 インデックスコンポーネントを使用すると、VSAMはデータコンポーネントからレコードを取得できます。
  • *データコンポーネント*にはデータ部分が含まれます。 実際のデータレコードは、データコンポーネントに存在します。

制御間隔

VSAMの制御間隔(CI)は、非VSAMデータセットのブロックと同等です。 非VSAMメソッドでは、データの単位はブロックによって定義されます。 VSAMは、制御間隔と呼ばれる論理データ領域で動作します。

制御間隔は、ディスクとオペレーティングシステム間の転送の最小単位です。 レコードがストレージから直接取得されるたびに、レコードを含むCI全体がVSAM入出力バッファーに読み込まれます。 次に、目的のレコードがVSAMバッファーから作業域に転送されます。

制御間隔は-

  • 論理レコード
  • 制御情報フィールド
  • フリースペース

VSAMデータセットがロードされると、制御間隔が作成されます。 デフォルトの制御間隔サイズは4Kバイトで、最大32Kバイトまで拡張できます。

制御間隔の分析

制御間隔

以下は、上記のプログラムで使用される用語の説明です-

  • R1..R5 -制御間隔に保存されるレコード。
  • FS -FSは空き領域であり、データセットをさらに拡張するために使用できます。
  • RDF -RDFはレコード定義フィールドとして知られています。 RDFは3バイト長です。 レコードの長さを記述し、同じ長さの隣接するレコードの数を示します。
  • CIDF -CIDFは、制御間隔定義フィールドとして知られています。 CIDFは4バイト長で、制御間隔に関する情報が含まれています。

コントロールエリア

制御領域(CA)は、2つ以上の制御間隔をまとめることによって形成されます。 VSAMデータセットは、1つ以上のコントロールエリアで構成されます。 VSAMのサイズは、常にその制御域の倍数です。 VSAMファイルは、制御域の単位で拡張されます。

以下は、コントロールエリアの例です-

コントロールエリア

VSAM-クラスター

VSAMクラスターは JCL で定義されています。 JCLは IDCAMS ユーティリティを使用してクラスターを作成します。 IDCAMSは、アクセス方式サービス用にIBMが開発したユーティリティです。 主にVSAMデータセットを定義するために使用されます。

クラスターの定義

次の構文は、 Define Cluster、Data および Index の下にグループ化された主要なパラメーターを示しています。

.DEFINE CLUSTER (NAME(vsam-file-name)      -
BLOCKS(number)                             -
VOLUMES(volume-serial)                     -
[INDEXED/NONINDEXED/NUMBERED/LINEAR] -
RECSZ(average maximum)                     -
[FREESPACE(CI-Percentage,CA-Percentage)]   -
CISZ(number)                               -
[KEYS(length offset)]                      -
[READPW(password)]                         -
[FOR(days)|TO(date)]                       -
[UPDATEPW(password)]                       -
[REUSE/NOREUSE] )                        -
DATA                                       -
   (NAME(vsam-file-name.data))             -
INDEX                                      -
   (NAME(vsam-file-name.index))            -
CATALOG(catalog-name[/password]))

クラスターレベルのパラメーターはクラスター全体に適用されます。 DATAまたはINDEXレベルのパラメーターは、データまたはインデックスコンポーネントにのみ適用されます。

次の表で各パラメーターについて詳しく説明します-

Sr.No Parameters with Description
1

DEFINE CLUSTER

Define Clusterコマンドは、クラスターを定義し、クラスターとそのコンポーネントのパラメーター属性を指定するために使用されます。

2

NAME

NAMEは、クラスターを定義するVSAMファイルの名前を指定します。

3

BLOCKS

Blocksは、クラスターに割り当てられたブロックの数を指定します。

4

VOLUMES

ボリュームは、クラスターまたはコンポーネントを含む1つ以上のボリュームを指定します。

5

INDEXED/NONINDEXED/NUMBERED/LINEAR

このパラメーターは、作成するデータセットのタイプに応じて、INDEXED、NONINDEXED、またはNUMBEREDの3つの値を取ることができます。 キー順(KSDS)ファイルの場合、INDEXEDオプションが使用されます。 入力順(ESDS)ファイルの場合、NONINDEXEDオプションが使用されます。 relative-record(RRDS)ファイルの場合、NUMBEREDオプションが必要です。 Linear(LDS)ファイルの場合、LINEARオプションが必要です。 このパラメーターのデフォルト値はINDEXEDです。 KSDS、ESDS、RRDS、およびLDSの詳細については、今後のモジュールで説明します。

6

RECSZ

レコードサイズパラメータには、平均レコードサイズと最大レコードサイズの2つの値があります。 Averageはファイル内の論理レコードの平均長を指定し、Maximumはレコードの長さを示します。

7

FREESPACE

Freespaceは、データコンポーネントの制御インターバル(CI)および制御エリア(CA)のために確保する空きスペースの割合を指定します。 このパラメーターのデフォルト値はゼロパーセントです。

8

CISZ

CISZは、制御間隔サイズとして知られています。 制御間隔のサイズを指定します。

9

KEYS

キーパラメーターは、キーシーケンス(KSDS)ファイルでのみ定義されます。 最初の列からの主キーの長さとオフセットを指定します。 このパラメーターの値の範囲は1〜255バイトです。

10

READPW

READPWパラメーターの値は、読み取りレベルのパスワードを指定します。

11

FOR/TO

このパラメーターの値は、ファイルを保持するための日付と日数で時間を指定します。 このパラメーターのデフォルト値はゼロ日です。

12

UPDATEPW

UPDATEPWパラメーターの値は、更新レベルのパスワードを指定します。

13

REUSE/NOREUSE

REUSEパラメーターを使用すると、クラスターを削除および再定義せずに空の状態にリセットできるクラスターを定義できます。

14

DATA - NAME

クラスターのDATA部分には、ファイルの実際のデータを含むデータセット名が含まれています。

15

INDEX-NAME

クラスターのINDEX部分には、データ部分の対応するレコードの主キーとメモリポインターが含まれます。 キーシーケンスクラスタが使用されるときに定義されます。

16

CATALOG

Catalogパラメーターは、ファイルが定義されるカタログを示します。 カタログについては、今後のモジュールで個別に説明します。

以下は、JCLでクラスターを定義する方法を示す基本的な例です-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DEFINE CLUSTER (NAME(MY.VSAM.KSDSFILE)  -
   INDEXED                                 -
   RECSZ(80 80)                            -
   TRACKS(1,1)                             -
   KEYS(5  0)                              -
   CISZ(4096)                              -
   FREESPACE(3 3) )                        -
   DATA (NAME(MY.VSAM.KSDSFILE.DATA))      -
   INDEX (NAME(MY.VSAM.KSDSFILE.INDEX))
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行し、MY.VSAM.KSDSFILE VSAMファイルを作成します。

クラスターの削除

VSAMファイルを削除するには、IDCAMSユーティリティを使用してVSAMクラスターを削除する必要があります。 DELETEコマンドは、カタログからVSAMクラスターのエントリーを削除し、オプションでファイルを削除することにより、オブジェクトが占有するスペースを解放します。 VSAMデータセットの有効期限が切れていない場合、削除されません。 そのようなタイプのデータセットを削除するには、PURGEオプションを使用します。

DELETE data-set-name CLUSTER
[ERASE/NOERASE]
[FORCE/NOFORCE]
[PURGE/NOPURGE]
[SCRATCH/NOSCRATCH]

上記の構文は、Deleteステートメントで使用できるパラメーターを示しています。 私たちは次の表でそれらのそれぞれについて詳しく説明します-

Sr.No Parameters with Description
1

ERASE/NOERASE

ERASEオプションは、カタログ内のオブジェクトに指定されたERASE属性をオーバーライドするために指定されます。 NOERASEオプションはデフォルトで使用されます。

2

FORCE/NOFORCE

FORCEオプションを指定すると、SPACEおよびUSERCATALOGが空でなくても削除されます。 NOFORCEオプションはデフォルトで使用されます。

3

PURGE/NOPURGE

PURGEオプションは、データセットの有効期限が切れていない場合にVSAMデータセットを削除するために使用されます。 NOPURGEオプションはデフォルトで使用されます。

4

SCRATCH/NOSCRATCH

SCRATCHオプションを指定して、ボリュームの目次からオブジェクトの関連エントリを削除します。 主にGDGのような非VSSデータセットに使用されます。 NOSCRATCHオプションはデフォルトで使用されます。

以下は、JCLでクラスターを削除する方法を示す基本的な例です-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DELETE MY.VSAM.KSDSFILE CLUSTER
    PURGE
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行され、MY.VSAM.KSDSFILE VSAMファイルが削除されます。

VSAM-ESDS

ESDSは、エントリシーケンスデータセットとして知られています。 エントリ順のデータセットは、いくつかの機能が追加された順次ファイル編成のように動作します。 記録に直接アクセスでき、安全のためにパスワードも使用できます。 ESDSデータセットのDEFINE CLUSTERコマンド内に NONINDEXED をコーディングする必要があります。 ESDSの主要な機能は次のとおりです-

  • ESDSクラスターのレコードは、データセットに挿入された順序で保存されます。
  • レコードは* Relative Byte Address(RBA)*として知られる物理アドレスによって参照されます。 ESDSデータセットに80バイトのレコードがあり、最初のレコードのRBAが0、2番目のレコードのRBAが80、3番目のレコードのRBAが160などであるとします。
  • レコードは、*アドレス指定アクセス*と呼ばれるRBAによって順次アクセスできます。
  • レコードは、挿入された順に保持されます。 最後に新しいレコードが挿入されます。
  • ESDSデータセットでは、レコードの削除はできません。 ただし、非アクティブとしてマークできます。
  • ESDSデータセットのレコードは、固定長でも可変長でもかまいません。
  • ESDSはインデックス付けされていません。 キーはESDSデータセットに存在しないため、重複レコードが含まれる場合があります。
  • ESDSは、他のファイルと同様にCOBOLプログラムで使用できます。 JCLでファイル名を指定し、プログラム内での処理にESDSファイルを使用できます。 COBOLプログラムでは、ファイル構成を Sequential として指定し、アクセスモードをESDSデータセットを使用して Sequential として指定します。

ESDSクラスターの定義

次の構文は、ESDSクラスターの作成中に使用できるパラメーターを示しています。 パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

DEFINE CLUSTER (NAME(esds-file-name)     -
BLOCKS(number)                           -
VOLUMES(volume-serial)                   -
NONINDEXED                               -
RECSZ(average maximum)                   -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number)                             -
[READPW(password)]                       -
[FOR(days)|TO(date)]                     -
[UPDATEPW(password)]                     -
[REUSE/NOREUSE])                       -
DATA                                     -
   (NAME(esds-file-name.data))

次の例は、IDCAMSユーティリティを使用してJCLでESDSクラスターを作成する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DEFINE CLUSTER (NAME(MY.VSAM.ESDSFILE)  -
   NONINDEXED                              -
   RECSZ(80 80)                            -
   TRACKS(1,1)                             -
   CISZ(4096)                              -
   FREESPACE(3 3) )                        -
   DATA (NAME(MY.VSAM.ESDSFILE.DATA))
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行し、MY.VSAM.ESDSFILE VSAMファイルを作成します。

ESDSクラスターの削除

ESDSクラスターは、IDCAMSユーティリティを使用して削除されます。 DELETEコマンドは、カタログからVSAMクラスターのエントリーを削除し、オプションでファイルを削除することにより、オブジェクトが占有するスペースを解放します。

DELETE data-set-name CLUSTER
[ERASE/NOERASE]
[FORCE/NOFORCE]
[PURGE/NOPURGE]
[SCRATCH/NOSCRATCH]

上記の構文は、ESDSクラスターの削除中に使用できるパラメーターを示しています。 パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

次の例は、IDCAMSユーティリティを使用してJCLでESDSクラスターを削除する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DELETE MY.VSAM.ESDSFILE CLUSTER
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行し、MY.VSAM.ESDSFILE VSAMクラスターを削除します。

VSAM-KSDS

KSDSはキーシーケンスデータセットとして知られています。 キーシーケンスデータセット(KSDS)は、ESDSやRRDSよりも複雑ですが、より便利で多用途です。 KSDSデータセットのDEFINE CLUSTERコマンド内に INDEXED をコーディングする必要があります。 KSDSクラスタは、次の2つのコンポーネントで構成されています-

  • インデックス-KSDSクラスターのインデックスコンポーネントには、クラスター内のレコードのキー値のリストと、データコンポーネント内の対応するレコードへのポインターが含まれています。 インデックスコンポーネントは、KSDSレコードの物理アドレスを参照します。 これは、各レコードのキーを、データセット内のレコードの相対位置に関連付けます。 レコードが追加または削除されると、それに応じてこのインデックスが更新されます。
  • データ-KSDSクラスターのデータコンポーネントには、実際のデータが含まれています。 KSDSクラスターのデータコンポーネントの各レコードには、同じ文字数のキーフィールドが含まれ、各レコードの同じ相対位置にあります。

KSDSの主要な機能は次のとおりです-

  • KSDSデータセット内のレコードは、常にキーフィールドでソートされたままです。 レコードはキーごとに昇順、照合順に保存されます。
  • レコードは連続してアクセスでき、直接アクセスすることもできます。
  • レコードはキーを使用して識別されます。 各レコードのキーは、レコード内の事前定義された位置にあるフィールドです。 各キーは、KSDSデータセット内で一意である必要があります。 したがって、レコードの複製はできません。
  • 新しいレコードが挿入されると、レコードの論理的な順序はキーフィールドの照合順序に依存します。
  • KSDSデータセットのレコードは、固定長または可変長にすることができます。
  • KSDSは、他のファイルと同様に COBOL プログラムで使用できます。 JCLでファイル名を指定し、KSDSファイルを使用してプログラム内で処理できます。 COBOLプログラムでは、ファイル構成を*インデックス付き*として指定し、KSDSデータセットで任意のアクセスモード*(シーケンシャル、ランダム、またはダイナミック)*を使用できます。

KSDSファイル構造

特定のレコードを検索するために、一意のキー値を指定します。 キー値はインデックスコンポーネントで検索されます。 キーが見つかると、データコンポーネントを参照する対応するメモリアドレスが取得されます。 メモリコンポーネントから、データコンポーネントに保存されている実際のデータを取得できます。 次の例は、インデックスとデータファイルの基本構造を示しています-

KSDS構造

KSDSクラスターの定義

次の構文は、KSDSクラスターの作成中に使用できるパラメーターを示しています。

パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

DEFINE CLUSTER (NAME(ksds-file-name)     -
BLOCKS(number)                           -
VOLUMES(volume-serial)                   -
INDEXED                                  -
KEYS(length offset)                      -
RECSZ(average maximum)                   -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number)                             -
[READPW(password)]                       -
[FOR(days)|TO(date)]                     -
[UPDATEPW(password)]                     -
[REUSE/NOREUSE])                       -
DATA                                     -
   (NAME(ksds-file-name.data))           -
INDEX                                    -
   (NAME(ksds-file-name.index))

次の例は、IDCAMSユーティリティを使用してJCLでKSDSクラスターを作成する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DEFINE CLUSTER (NAME(MY.VSAM.KSDSFILE)  -
   INDEXED                                 -
   KEYS(6 1)                               -
   RECSZ(80 80)                            -
   TRACKS(1,1)                             -
   CISZ(4096)                              -
   FREESPACE(3 3) )                        -
   DATA (NAME(MY.VSAM.KSDSFILE.DATA))      -
   INDEX (NAME(MY.VSAM.KSDSFILE.INDEX))    -
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行し、MY.VSAM.KSDSFILE VSAMファイルを作成します。

KSDSクラスターの削除

KSDSクラスターは、IDCAMSユーティリティを使用して削除されます。 DELETEコマンドは、カタログからVSAMクラスターのエントリーを削除し、オプションでファイルを削除することにより、オブジェクトが占有するスペースを解放します。

DELETE data-set-name CLUSTER
[ERASE/NOERASE]
[FORCE/NOFORCE]
[PURGE/NOPURGE]
[SCRATCH/NOSCRATCH]

上記の構文は、KSDSクラスターの削除中に使用できるパラメーターを示しています。 パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

次の例は、IDCAMSユーティリティを使用してJCLでKSDSクラスターを削除する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DELETE MY.VSAM.KSDSFILE CLUSTER
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行され、MY.VSAM.KSDSFILE VSAMクラスターが削除されます。

VSAM-RRDS

RRDSは、相対レコードデータセットとして知られています。 RRDSクラスターはESDSクラスターに似ています。 唯一の違いは、RRDSレコードが*相対レコード番号(RRN)によってアクセスされることです。DEFINECLUSTERコマンド内で *NUMBERED をコーディングする必要があります。 RRDSの主要な機能は次のとおりです-

  • 相対レコードデータセットには、*相対レコード番号(RRN)*で識別されるレコードがあります。これは、最初のレコードに相対的なシーケンス番号です。
  • RRDSでは、レコード1、レコード2などのような番号でレコードにアクセスできます。 これはランダムアクセスを提供し、アプリケーションプログラムが目的のレコード番号を取得する方法を持っていることを前提としています。
  • RRDSデータセット内のレコードには、目的のレコードの相対レコード番号を指定することで、相対レコード番号順に、または直接アクセスできます。
  • RRDSデータセットのレコードは、固定長のスロットに保存されます。 各レコードは、そのスロットの番号によって参照されます。番号は、1からデータセット内のレコードの最大数までさまざまです。
  • RRDSのレコードは、空のスロットに新しいレコードを挿入することで書き込むことができます。
  • レコードはRRDSクラスターから削除できるため、空のスロットが残ります。
  • RRDSデータセットを使用できる固定長のレコードまたはコンテキストの意味を持つレコード番号を使用するアプリケーション。
  • RRDSは、他のファイルと同様に COBOL プログラムで使用できます。 JCLでファイル名を指定し、KSDSファイルを使用してプログラム内で処理できます。 COBOLプログラムでは、ファイル編成を RELATIVE として指定し、RRDSデータセットで任意のアクセスモード*(シーケンシャル、ランダム、またはダイナミック)*を使用できます。

RRDSファイル構造

スペースは、RRDSファイル構造の固定長スロットに分割されます。 スロットは、完全に空であるか、完全にいっぱいのいずれかです。 したがって、新しいレコードを空のスロットに追加したり、既存のレコードを空いているスロットから削除したりできます。 相対レコード番号を指定することで、どのレコードにも直接アクセスできます。 次の例は、データファイルの基本構造を示しています-

データコンポーネント

Relative Record Number Record Field 1 Record Field 2
1 Tutorial Point
2 Mohtashim M.
3 Nishant Malik

RRDSクラスターの定義

次の構文は、RRDSクラスターの作成中に使用できるパラメーターを示しています。

パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

DEFINE CLUSTER (NAME(rrds-file-name)     -
BLOCKS(number)                           -
VOLUMES(volume-serial)                   -
NUMBERED                                 -
RECSZ(average maximum)                   -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number)                             -
[READPW(password)]                       -
[FOR(days)|TO(date)]                     -
[UPDATEPW(password)]                     -
[REUSE/NOREUSE])                       -
DATA                                     -
   (NAME(rrds-file-name.data))

次の例は、IDCAMSユーティリティを使用してJCLでRRDSクラスターを作成する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DEFINE CLUSTER (NAME(MY.VSAM.RRDSFILE)  -
   NUMBERED                                -
   RECSZ(80 80)                            -
   TRACKS(1,1)                             -
   REUSE                                   -
   FREESPACE(3 3) )                        -
   DATA (NAME(MY.VSAM.RRDSFILE.DATA))
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行し、MY.VSAM.RRDSFILE VSAMファイルを作成します。

RRDSクラスターの削除

RRDSクラスターは、IDCAMSユーティリティを使用して削除されます。 DELETEコマンドは、カタログからVSAMクラスターのエントリーを削除し、オプションでファイルを削除することにより、オブジェクトが占有するスペースを解放します。

DELETE data-set-name CLUSTER
[ERASE/NOERASE]
[FORCE/NOFORCE]
[PURGE/NOPURGE]
[SCRATCH/NOSCRATCH]

上記の構文は、RRDSクラスターの削除中に使用できるパラメーターを示しています。 パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

次の例は、IDCAMSユーティリティを使用してJCLでRRDSクラスターを削除する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DELETE MY.VSAM.RRDSFILE CLUSTER
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行し、MY.VSAM.RRDSFILE VSAMクラスターを削除します。

VSAM-LDS

LDSは線形データセットとして知られています。 線形データセットは、従来のオペレーティングシステムファイルで使用されるバイトストリームデータセットの唯一の形式です。 線形データセットはほとんど使用されません。 LDSの主な機能は次のとおりです-

  • 線形データセットには、CIに制御情報が埋め込まれていないため、RDFおよびCIDFは含まれていません。
  • リニアデータセットの仮想ストレージ内のバイトアドレス可能な文字列としてアクセスできるデータ。
  • 線形データセットの制御間隔サイズは4Kバイトです。
  • LDSは、カタログ内のIDCAMSおよびVSAM固有の情報の使用など、VSAM機能を備えた一種の非vsamファイルです。
  • DB2は現在、Linear Data Setsの最大のユーザーです。
  • IDCAMSはLDSを定義するために使用されますが、Data-In-Virtual(DIV)マクロを使用してアクセスされます。 *線形データセットにはレコードの概念はありません。 すべてのLDSバイトはデータバイトです。

LDSクラスターの定義

次の構文は、LDSクラスターの作成中に使用できるパラメーターを示しています。 パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

DEFINE CLUSTER (NAME(lds-file-name)      -
BLOCKS(number)                           -
VOLUMES(volume-serial)                   -
LINEAR                                   -
CISZ(number)                             -
[READPW(password)]                       -
[FOR(days)|TO(date)]                     -
[UPDATEPW(password)]                     -
[REUSE/NOREUSE])                       -
DATA                                     -
   (NAME(lds-file-name.data))

次の例は、IDCAMSユーティリティを使用してJCLでLDSクラスターを作成する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT =*
//SYSIN    DD  *
   DEFINE CLUSTER (NAME(MY.VSAM.LDSFILE)   -
   LINEAR                                  -
   TRACKS(1,1)                             -
   CISZ(4096) )                            -
   DATA (NAME(MY.VSAM.LDSFILE.DATA))
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行され、MY.VSAM.LDSFILE VSAMファイルが作成されます。

LDSクラスターの削除

LDSクラスターは、IDCAMSユーティリティを使用して削除されます。 DELETEコマンドは、カタログからVSAMクラスターのエントリーを削除し、オプションでファイルを削除することにより、オブジェクトが占有するスペースを解放します。

DELETE data-set-name CLUSTER
[ERASE/NOERASE]
[FORCE/NOFORCE]
[PURGE/NOPURGE]
[SCRATCH/NOSCRATCH]

上記の構文は、LDSクラスターの削除中に使用できるパラメーターを示しています。 パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

次の例は、IDCAMSユーティリティを使用してJCLでLDSクラスターを削除する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DELETE MY.VSAM.LDSFILE CLUSTER
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行し、MY.VSAM.LDSFILE VSAMクラスターを削除します。

VSAM-コマンド

VSAMコマンドは、VSAMデータセットで特定の操作を実行するために使用されます。 以下は、最も便利なVSAMコマンドです-

  • 変更する
  • 再現
  • リストキャット
  • 調べる *確認する

変更する

ALTERコマンドは、VSAMファイル属性を変更するために使用されます。 VSAMクラスター定義で述べたVSAMファイルの属性を変更できます。 以下は、属性を変更するための構文です-

ALTER  file-cluster-name [password]
   [ADDVOLUMES(volume-serial)]
   [BUFFERSPACE(size)]
   [EMPTY/NOEMPTY]
   [ERASE/NOERASE]
   [FREESPACE(CI-percentage CA-percentage)]
   [KEYS(length offset)]
   [NEWNAME(new-name)]
   [RECORDSIZE(average maximum)]
   [REMOVEVOLUMES(volume-serial)]
   [SCRATCH/NOSCRATCH]
   [TO(date)/FOR(days)]
   [UPGRADE/NOUPGRADE]
   [CATALOG(catalog-name [password]]

上記の構文は、既存のVSAMクラスターで変更できるパラメーターを示しています。 パラメーターの説明は、VSAM-クラスターモジュールで説明したものと同じです。

次の例は、ALTERコマンドを使用して空き領域を増やし、ボリュームを追加し、キーを変更する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT =*
//SYSIN DD  *
   ALTER  MY.VSAM.KSDSFILE
   [ADDVOLUMES(2)]
   [FREESPACE(6 6)]
   [KEYS(10 2)]
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行する必要があり、Freespace、Volumes、Keysを変更します。

再現

REPROコマンドは、VSAMデータセットにデータをロードするために使用されます。 また、1つのVSAMデータセットから別のVSAMデータセットにデータをコピーするためにも使用されます。 このコマンドを使用して、シーケンシャルファイルからVSAMファイルにデータをコピーできます。 IDCAMSユーティリティはREPROコマンドを使用してデータセットをロードします。

REPRO INFILE(in-ddname)
   OUTFILE(out-ddname)

上記の構文では、in-ddnameはレコードを持っている入力データセットのDD名です。 out-ddnameは、入力データセットレコードがコピーされる出力データセットのDD名です。

次の例は、あるデータセットから別のVSAMデータセットにレコードをコピーする方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//IN  DD DSN = MY.VSAM.KSDSFILE,DISP = SHR
//OUT DD DSN = MY.VSAM1.KSDSFILE,DISP = SHR
//SYSPRINT DD  SYSOUT = *
//SYSIN DD  *
   REPRO INFILE(IN)
      OUTFILE(OUT)
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行され、MY.VSAM.KSDSFILEからMY.VSAM1.KSDSFILE VSAMファイルにすべてのレコードがコピーされます。

リストキャット

LISTCATコマンドは、VSAMデータセットのカタログの詳細を取得するために使用されます。 Listcatコマンドは、VSAMデータセットに関する次の情報を提供します-

  • SMS情報
  • RLS情報
  • ボリューム情報
  • 球体情報
  • 割り当て情報 *データセット属性
LISTCAT ENTRY(vsam-file-name) ALL

上記の構文では、vsam-file-nameはすべての情報が必要なVSAMデータセット名です。 ALLキーワードは、すべてのカタログの詳細を取得するために指定されます。

次の例は、VSAMデータセットに対してListcatコマンドを使用してすべての詳細を取得する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT =*
//SYSIN DD  *
   LISTCAT ENTRY(MY.VSAM.KSDSFILE)
   ALL
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行され、MY.VSAM.KSDSFILEデータセットに関するすべてのカタログ詳細が表示されます。

調べる

Examineコマンドは、キーシーケンスデータセットクラスターの構造的整合性を確認するために使用されます。 インデックスおよびデータコンポーネントをチェックし、問題が見つかった場合は、エラーメッセージがスプールに送信されます。 IDCxxxxxメッセージのいずれかを確認できます。

EXAMINE NAME(vsam-ksds-name) -
   INDEXTEST DATATEST -
   ERRORLIMIT(50)

上記の構文では、vsam-ksds-nameは、VSAMクラスターのインデックスとデータ部分を調べる必要があるVSAMデータセット名です。

次の例は、KSDSデータセットのインデックスとデータ部分が同期しているかどうかを確認する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN DD  *
   EXAMINE NAME(MY.VSAM.KSDSFILE) -
   INDEXTEST DATATEST -
   ERRORLIMIT(50)
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行する必要があり、スプールのIDCxxxxxメッセージの1つにVSAMデータセットに関するすべての問題が表示されます。

確認する

検証コマンドは、エラー後に適切に閉じられていないVSAMファイルをチェックおよび修正するために使用されます。 このコマンドは、正しいデータの終わりレコードをファイルに追加します。

VERIFY DS(vsam-file-name)

上記の構文では、vsam-file-nameはエラーをチェックする必要があるVSAMデータセット名です。

次の例は、VSAMデータセットのエラーをチェックして修正する方法を示しています-

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN DD  *
   VERIFY DS(MY.VSAM.KSDSFILE)
/*

Mainframesサーバーで上記のJCLを実行する場合。 MAXCC = 0で実行し、VSAMデータセットのエラーを修正します。

VSAM-カタログ

カタログは、データセットが存在するユニットとボリュームを維持します。 カタログは、データセットの取得に使用されます。 非VSAMデータセットは、JCLのディスポジションパラメータを使用してカタログエントリを作成します。 VSAMデータセットは、KSDSクラスターの形式で独自のカタログを維持します。 次の画像では、VSAMカタログのタイプを見ることができます-

カタログ

マスターカタログ

マスターカタログ自体は、VSAMの操作を監視および管理するファイルです。 それらは、システムデータセットとVSAMデータセットに関するエントリを含むシステム内の唯一のマスターカタログです。 VSAMおよび非VSAMデータセットにはマスターカタログにエントリがある場合がありますが、これは良い方法ではありません。 マスターカタログは、システム生成プロセス中に作成され、システムボリュームに存在します。 マスターカタログは、オペレーティングシステムのすべてのVSAMリソースを所有します。 VSAMで使用されるすべてのファイルは、マスターカタログによって制御されます。 マスターカタログは、次の操作を担当します-

  • ファイルのパスワード認証
  • セキュリティの強化
  • ファイルのVSAMアクセス
  • ファイルのスペース管理
  • ファイルの場所
  • ファイルで利用可能な空き領域

上記のファイル属性のいずれかが変更されると、それらはマスターカタログで自動的に更新されます。 マスターカタログは、IDCAMSプログラムを使用して定義されます。

ユーザーカタログ

ユーザーカタログの構造と概念は、マスターカタログと同じです。 マスターカタログの次の階層レベルに存在します。 ユーザーカタログはシステムでは必須ではありませんが、VSAMシステムのセキュリティを強化するために使用されます。 マスターカタログはVSAMファイルを指しますが、ユーザーカタログが存在する場合、マスターカタログはユーザーカタログを指します。 システム要件に応じて、ユーザーカタログの数は多くなります。 VSAM構造では、マスターカタログが削除された場合、ユーザーカタログには影響しません。 ユーザーカタログには、アプリケーション固有のデータセットに関するエントリが含まれています。 ユーザーカタログの情報はマスターカタログに保存されます。

データスペース

データスペースは、VSAM専用に割り当てられたダイレクトアクセスストレージデバイスの領域です。 VSAMクラスターを作成する前に、データスペースを作成する必要があります。 データスペースが占める領域は、ボリューム目次(VTOC)に記録されるため、スペースは、VSAMまたは非VSAMのいずれかのその他の用途への割り当てに使用できません。 VTOCには、スペースが占有する領域のエントリがあります。 VSAMは、ユーザーカタログエントリを保持するデータスペースを作成します。 VSAMはこのスペースを制御し、VSAMファイルの必要に応じてこのスペースを監視および維持します。

ユニークなクラスター

一意のクラスターは、その中に作成されたクラスターによって完全に使用される個別のデータスペースで構成されます。 直接アクセスストレージの未割り当て領域から一意のクラスターが作成されます。

サブ割り当てられたクラスター

サブ割り当てVSAMファイルは、他のサブ割り当てファイルとVSAMスペースを共有します。 これは、ファイルが既存のVSAMスペース内でサブ割り当てされることを指定します。 サブ割り当ては、VSAMスペースの管理と制御を容易にするために使用されます。

非VSAMデータセット

非VSAMデータセットは、テープストレージと直接アクセスストレージの両方にあります。 非VSAMデータセットには、マスターカタログとユーザーカタログの両方にエントリがある場合があります。 非VSAMデータセットのカタログ化の主な機能は、ユニットとボリュームのシリアル情報を保持することです。

VSAM-ファイルステータス

VSAMデータセットの操作中に、異常終了が発生する場合があります。 以下は、問題を解決するのに役立つ一般的なファイルステータスコードとその説明です。

Code Description
00 Operation completed successfully
02 Non-Unique Alternate Index duplicate key found
04 Invalid fixed length record
05 While performing OPEN File and file is not present
10 End of File encountered
14 Attempted to READ a relative record outside file boundary
20 Invalid Key for VSAM KSDS or RRDS
21 Sequence error while performing WRITE or changing key on REWRITE
22 Primary duplicate Key found
23 Record not found or File not found
24 Key outside boundary of file
30 Permanent I/O Error
34 Record outside file boundary
35 While performing OPEN File and file is not present
37 OPEN file with wrong mode
38 Tried to OPEN a Locked file
39 OPEN failed because of conflicting file attributes
41 Tried to OPEN a file that is already open
42 Tried to CLOSE a file that is not OPEN
43 Tried to REWRITE without READing a record first
44 Tried to REWRITE a record of a different length
46 Tried to READ beyond End-of-file
47 Tried to READ from a file that was not opened I-O or INPUT
48 Tried to WRITE to a file that was not opened I-O or OUTPUT
49 Tried to DELETE or REWRITE to a file that was not opened I-O
91 Password or authorization failed
92 Logic Error
93 Resources are not available
94 Sequential record unavailable or concurrent OPEN error
95 File Information invalid or incomplete
96 No DD statement for the file
97 OPEN successful and file integrity verified
98 File is Locked - OPEN failed
99 Record Locked - Record access failed

Vsam-interview-questions