Vsam-quick-guide
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クラスターの作成中に使用できるパラメーターを示しています。
パラメーターの説明は、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 |