VSAM-クイックガイド
仮想ストレージアクセス方式(VSAM)は、カタログ構造を介してデータを編成および保守する、高性能のアクセス方式およびデータセット編成です。仮想ストレージの概念を利用し、パスワードを与えることでさまざまなレベルでデータセットを保護できます。VSAMは、物理シーケンシャルファイルなどのCOBOLプログラムで使用できます。VSAMは、レコードを保管するための論理データセットです。ファイルは、VSAMで順次ランダムに読み取ることができます。これは、シーケンシャルファイルなどの従来のファイルシステムの制限のいくつかを克服する、データを保存するための改善された方法です。
VSAMの特性
VSAMの特徴は次のとおりです。
VSAMは、パスワードを使用して不正アクセスからデータを保護します。
VSAMは、データセットへの高速アクセスを提供します。
VSAMには、パフォーマンスを最適化するためのオプションがあります。
VSAMを使用すると、バッチ環境とオンライン環境の両方でデータセットを共有できます。
VSAMは、データの保管においてより構造化および編成されています。
空き領域は、VSAMファイルで自動的に再利用されます。
VSAMの制限
VSAMの唯一の制限は、TAPEボリュームに保管できないことです。常にDASDスペースに保管されます。データを保存するには多数のシリンダーが必要ですが、費用効果が高くありません。
VSAMは次のコンポーネントで構成されています-
- VSAMクラスター
- コントロールエリア
- 制御間隔
VSAMクラスター
VSAMは、レコードを保管するための論理データセットであり、クラスターと呼ばれます。クラスターは、データセットのインデックス、シーケンスセット、およびデータ部分の関連付けです。VSAMクラスターが占めるスペースは、制御間隔と呼ばれる連続した領域に分割されます。制御間隔については、このモジュールの後半で説明します。
VSAMクラスターには2つの主要なコンポーネントがあります-
Index Componentインデックス部分が含まれています。インデックスレコードはインデックスコンポーネントに存在します。インデックスコンポーネントを使用すると、VSAMはデータコンポーネントからレコードを取得できます。
Data Componentデータ部分が含まれています。実際のデータレコードはデータコンポーネントに存在します。
制御間隔
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クラスターはで定義されています 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]))
CLUSTERレベルのパラメーターは、クラスター全体に適用されます。DATAまたはINDEXレベルのパラメーターは、データまたはインデックスコンポーネントにのみ適用されます。
次の表で、各パラメータについて詳しく説明します。
シニア番号 | 説明付きのパラメーター |
---|---|
1 | DEFINE CLUSTER [クラスターの定義]コマンドは、クラスターを定義し、クラスターとそのコンポーネントのパラメーター属性を指定するために使用されます。 |
2 | NAME NAMEは、クラスターを定義するVSAMファイルの名前を指定します。 |
3 | BLOCKS ブロックは、クラスターに割り当てられたブロックの数を指定します。 |
4 | VOLUMES ボリュームは、クラスターまたはコンポーネントを含む1つ以上のボリュームを指定します。 |
5 | INDEXED / NONINDEXED / NUMBERED / LINEAR このパラメーターは、作成するデータセットのタイプに応じて、INDEXED、NONINDEXED、またはNUMBEREDの3つの値を取ることができます。キーシーケンス(KSDS)ファイルの場合、INDEXEDオプションが使用されます。entry-sequenced(ESDS)ファイルの場合、NONINDEXEDオプションが使用されます。相対レコード(RRDS)ファイルの場合、NUMBEREDオプションが必要です。線形(LDS)ファイルの場合、LINEARオプションが必要です。このパラメーターのデフォルト値はINDEXEDです。今後のモジュールでは、KSDS、ESDS、RRDS、およびLDSについて詳しく説明します。 |
6 | RECSZ レコードサイズパラメータには、平均レコードサイズと最大レコードサイズの2つの値があります。平均はファイル内の論理レコードの平均の長さを指定し、最大はレコードの長さを示します。 |
7 | FREESPACE 空き領域は、データコンポーネントの制御間隔(CI)および制御領域(CA)用に予約する空き領域の割合を指定します。このパラメーターのデフォルト値はゼロパーセントです。 |
8 | CISZ CISZは、制御間隔サイズとして知られています。制御間隔のサイズを指定します。 |
9 | KEYS 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 カタログパラメータは、ファイルが定義されるカタログを示します。カタログについては、今後のモジュールで個別に説明します。 |
例
以下は、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))
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.KSDSFILEVSAMファイルを作成します。
クラスターの削除
VSAMファイルを削除するには、IDCAMSユーティリティーを使用してVSAMクラスターを削除する必要があります。DELETEコマンドは、VSAMクラスターのエントリーをカタログから削除し、オプションでファイルを削除して、オブジェクトが占有していたスペースを解放します。VSAMデータセットの有効期限が切れていない場合、そのデータセットは削除されません。このようなタイプのデータセットを削除するには、PURGEオプションを使用します。
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
上記の構文は、Deleteステートメントで使用できるパラメーターを示しています。次の表で、それぞれについて詳しく説明します。
シニア番号 | 説明付きのパラメーター |
---|---|
1 | ERASE / NOERASE ERASEオプションは、カタログ内のオブジェクトに指定されたERASE属性をオーバーライドするために指定されています。NOERASEオプションがデフォルトで使用されます。 |
2 | FORCE / NOFORCE FORCEオプションは、SPACEおよびUSERCATALOGが空でなくても、それらを削除するために指定されています。デフォルトでは、NOFORCEオプションが使用されます。 |
3 | PURGE / NOPURGE PURGEオプションは、データセットの有効期限が切れていない場合にVSAMデータセットを削除するために使用されます。NOPURGEオプションがデフォルトで使用されます。 |
4 | SCRATCH / NOSCRATCH SCRATCHオプションは、ボリュームの目次からオブジェクトに関連付けられたエントリを削除するために指定されます。これは主に、GDGなどの非vsamデータセットに使用されます。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
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.KSDSFILEVSAMファイルを削除します。
ESDSは、エントリシーケンスデータセットとして知られています。エントリシーケンスデータセットは、いくつかの機能が含まれているシーケンシャルファイル編成のように動作します。レコードに直接アクセスでき、安全のためにパスワードも使用できます。コーディングする必要がありますNONINDEXEDESDSデータセットのDEFINECLUSTERコマンド内。以下はESDSの主な機能です-
ESDSクラスターのレコードは、データセットに挿入された順序で保存されます。
レコードは、として知られている物理アドレスによって参照されます Relative Byte Address (RBA)。ESDSデータセットに80バイトのレコードがある場合、最初のレコードのRBAは0、2番目のレコードのRBAは80、3番目のレコードのRBAは160というようになります。
レコードは、として知られているRBAによって順次アクセスできます。 addressed access.
レコードは、挿入された順序で保持されます。最後に新しいレコードが挿入されます。
ESDSデータセットではレコードの削除はできません。ただし、非アクティブとしてマークすることができます。
ESDSデータセットのレコードは、固定長または可変長にすることができます。
ESDSは索引付けされていません。キーはESDSデータセットに存在しないため、重複するレコードが含まれている可能性があります。
ESDSは、他のファイルと同様にCOBOLプログラムで使用できます。JCLでファイル名を指定し、ESDSファイルを使用してプログラム内で処理できます。COBOLプログラムで、ファイル編成を次のように指定します。Sequential およびアクセスモードとして Sequential ESDSデータセットを使用します。
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))
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.ESDSFILEVSAMファイルを作成します。
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
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.ESDSFILEVSAMクラスターが削除されます。
KSDSは、キーシーケンスデータセットとして知られています。キーシーケンスデータセット(KSDS)は、ESDSやRRDSよりも複雑ですが、より便利で用途が広いです。コーディングする必要がありますINDEXEDKSDSデータセットのDEFINECLUSTERコマンド内。KSDSクラスターは次の2つのコンポーネントで構成されています-
Index− KSDSクラスターのインデックスコンポーネントには、クラスター内のレコードのキー値のリストと、データコンポーネント内の対応するレコードへのポインターが含まれています。インデックスコンポーネントは、KSDSレコードの物理アドレスを参照します。これにより、各レコードのキーがデータセット内のレコードの相対位置に関連付けられます。レコードが追加または削除されると、それに応じてこのインデックスが更新されます。
Data− KSDSクラスターのデータコンポーネントには、実際のデータが含まれています。KSDSクラスターのデータコンポーネントの各レコードには、同じ文字数のキーフィールドが含まれており、各レコードの同じ相対位置にあります。
以下はKSDSの主な機能です-
KSDSデータセット内のレコードは、常にキーフィールドでソートされたままになります。レコードは、キーごとに昇順で照合して保存されます。
レコードには順番にアクセスでき、直接アクセスも可能です。
レコードはキーを使用して識別されます。各レコードのキーは、レコード内の事前定義された位置にあるフィールドです。各キーは、KSDSデータセット内で一意である必要があります。したがって、レコードを複製することはできません。
新しいレコードが挿入されるとき、レコードの論理的な順序は、キーフィールドの照合順序によって異なります。
KSDSデータセットのレコードは、固定長または可変長にすることができます。
KSDSはで使用できます COBOL他のファイルと同じようにプログラム。JCLでファイル名を指定し、KSDSファイルを使用してプログラム内で処理できます。COBOLプログラムで、ファイル編成を次のように指定します。Indexed そして、あなたはどんなアクセスモードも使うことができます (Sequential, Random or Dynamic) 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)) -
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.KSDSFILEVSAMファイルを作成します。
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
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.KSDSFILEVSAMクラスターが削除されます。
RRDSは、相対レコードデータセットとして知られています。RRDSクラスターはESDSクラスターに似ています。唯一の違いは、RRDSレコードがによってアクセスされることですRelative Record Number (RRN)、コーディングする必要があります NUMBEREDDEFINECLUSTERコマンド内。以下はRRDSの主な機能です-
相対レコードデータセットには、によって識別されるレコードがあります Relative Record Number (RRN)、これは最初のレコードに関連するシーケンス番号です。
RRDSを使用すると、レコード1、レコード2などの番号でレコードにアクセスできます。これはランダムアクセスを提供し、アプリケーションプログラムが目的のレコード番号を取得する方法を持っていることを前提としています。
RRDSデータセット内のレコードには、目的のレコードの相対レコード番号を指定することにより、相対レコード番号順に順番に、または直接アクセスできます。
RRDSデータセットのレコードは、固定長のスロットに保存されます。各レコードはそのスロットの番号によって参照されます。番号は1からデータセット内のレコードの最大数までさまざまです。
RRDSのレコードは、空のスロットに新しいレコードを挿入することで書き込むことができます。
レコードをRRDSクラスターから削除して、空のスロットを残すことができます。
固定長レコードまたはRRDSデータセットを使用できるコンテキスト上の意味を持つレコード番号を使用するアプリケーション。
RRDSはで使用できます COBOL他のファイルと同じようにプログラム。JCLでファイル名を指定し、KSDSファイルを使用してプログラム内で処理できます。COBOLプログラムで、ファイル編成を次のように指定します。RELATIVE そして、あなたはどんなアクセスモードも使うことができます (Sequential, Random or Dynamic) RRDSデータセットを使用します。
RRDSファイル構造
スペースは、RRDSファイル構造で固定長のスロットに分割されます。スロットは完全に空いているか、完全にいっぱいになっている可能性があります。したがって、新しいレコードを空のスロットに追加したり、既存のレコードを埋められたスロットから削除したりできます。相対レコード番号を指定することで、任意のレコードに直接アクセスできます。次の例は、データファイルの基本構造を示しています-
データコンポーネント
相対レコード番号 | レコードフィールド1 | レコードフィールド2 |
---|---|---|
1 | チュートリアル | ポイント |
2 | モタシム | M。 |
3 | ニシャント | マリク |
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))
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.RRDSFILEVSAMファイルを作成します。
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
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.RRDSFILEVSAMクラスターが削除されます。
LDSは線形データセットとして知られています。線形データセットは、従来のオペレーティングシステムファイルで使用されるバイトストリームデータセットの唯一の形式です。線形データセットはめったに使用されません。以下はLDSの主な特徴です-
線形データセットには、CIに制御情報が埋め込まれていないため、RDFとCIDFは含まれていません。
線形データセットの仮想ストレージでバイトアドレス可能な文字列としてアクセスできるデータ。
線形データセットの制御間隔サイズは4Kバイトです。
LDSは、IDCAMSの使用やカタログ内のVSAM固有の情報など、いくつかのVSAM機能を備えた一種の非vsamファイルです。
DB2は現在、線形データセットの最大のユーザーです。
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))
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.LDSFILEVSAMファイルを作成します。
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
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.LDSFILEVSAMクラスターが削除されます。
VSAMコマンドは、VSAMデータセットに対して特定の操作を実行するために使用されます。以下は最も有用なVSAMコマンドです-
- Alter
- Repro
- Listcat
- Examine
- Verify
変更
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)]
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、フリースペース、ボリューム、およびキーが変更されます。
再現
REPROコマンドは、VSAMデータセットにデータをロードするために使用されます。また、ある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)
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、すべてのレコードをMY.VSAM.KSDSFILEからMY.VSAM1.KSDSFILEVSAMファイルにコピーします。
リストキャット
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
/*
メインフレームサーバーで上記の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)
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、スプール内のIDCxxxxxメッセージの1つにあるVSAMデータセットに関するすべての問題が表示されます。
確認
検証コマンドは、エラー後に正しく閉じられなかったVSAMファイルをチェックおよび修正するために使用されます。このコマンドは、正しいEnd-Of-Dataレコードをファイルに追加します。
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)
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、VSAMデータセットのエラーを修正します。
代替インデックスは、プライマリインデックスに加えて、KSDS / ESDSデータセット用に作成される追加のインデックスです。代替インデックスは、複数のキーを使用してレコードへのアクセスを提供します。代替インデックスのキーは、一意でないキーにすることができ、重複する可能性があります。
代替インデックスの作成
次の手順を使用して、代替インデックスを作成します-
- 代替インデックスを定義する
- パスを定義する
- ビルインデックス
代替インデックスを定義する
代替インデックスは、を使用して定義されます DEFINE AIX コマンド。
DEFINE AIX -
(NAME(alternate-index-name) -
RELATE(vsam-file-name) -
CISZ(number) -
FREESPACE(CI-Percentage,CA-Percentage) -
KEYS(length offset) -
NONUNIQUEKEY / UNIQUEKEY -
UPGRADE / NOUPGRADE -
RECORDSIZE(average maximum)) -
DATA -
(NAME(vsam-file-name.data)) -
INDEX -
(NAME(vsam-file-name.index))
上記の構文は、代替インデックスの定義時に使用されるパラメーターを示しています。クラスターモジュールの定義でいくつかのパラメーターについてはすでに説明しました。新しいパラメーターのいくつかは、ここで説明する代替インデックスの定義に使用されます。
シニア番号 | 説明付きのパラメーター |
---|---|
1 | DEFINE AIX 「AIXの定義」コマンドは、代替索引を定義し、そのコンポーネントのパラメーター属性を指定するために使用されます。 |
2 | NAME NAMEは、代替インデックスの名前を指定します。 |
3 | RELATE RELATEは、代替索引が作成されるVSAMクラスターの名前を指定します。 |
4 | NONUNIQUEKEY / UNIQUEKEY UNIQUEKEYは、代替インデックスが一意であることを指定し、NONUNIQUEKEYは、重複が存在する可能性があることを指定します。 |
5 | UPGRADE / NOUPGRADE UPGRADEは、ベースクラスターが変更された場合に代替インデックスを変更する必要があることを指定し、NOUPGRADEは、ベースクラスターが変更された場合に代替インデックスをそのままにしておく必要があることを指定します。 |
例
以下は、JCLで代替インデックスを定義する方法を示す基本的な例です。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE AIX (NAME(MY.VSAM.KSDSAIX) -
RELATE(MY.VSAM.KSDSFILE) -
CISZ(4096) -
FREESPACE(20,20) -
KEYS(20,7) -
NONUNIQUEKEY -
UPGRADE -
RECORDSIZE(80,80)) -
DATA(NAME(MY.VSAM.KSDSAIX.DATA)) -
INDEX(NAME(MY.VSAM.KSDSAIX.INDEX))
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、MY.VSAM.KSDSAIX代替インデックスが作成されます。
パスを定義する
パスの定義は、代替インデックスをベースクラスターに関連付けるために使用されます。パスを定義するときに、パスの名前と、このパスが関連する代替インデックスを指定します。
DEFINE PATH -
NAME(alternate-index-path-name) -
PATHENTRY(alternate-index-name))
上記の構文には2つのパラメーターがあります。NAMEは代替インデックスパス名を指定するために使用され、PATHENTRYは代替インデックス名を指定するために使用されます。
例
以下は、JCLでパスを定義するための基本的な例です。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE PATH -
NAME(MY.VSAM.KSDSAIX.PATH) -
PATHENTRY(MY.VSAM.KSDSAIX))
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、代替インデックスからベースクラスターへのパスを作成します。
ビルインデックス
BLDINDEXコマンドは、代替索引を作成するために使用されます。BLDINDEXは、VSAM索引付きデータ・セット(または基本クラスター)内のすべてのレコードを読み取り、代替索引を作成するために必要なデータを抽出します。
BLDINDEX -
INDATASET(vsam-cluster-name) -
OUTDATASET(alternate-index-name))
上記の構文には2つのパラメーターがあります。INDATASETはVSAMクラスター名を指定するために使用され、OUTDATASETは代替索引名を指定するために使用されます。
例
以下は、JCLでインデックスを作成するための基本的な例です。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
BLDINDEX -
INDATASET(MY.VSAM.KSDSFILE) -
OUTDATASET(MY.VSAM.KSDSAIX))
/*
メインフレームサーバーで上記のJCLを実行する場合。MAXCC = 0で実行する必要があり、インデックスを作成します。
カタログは、データセットが存在するユニットとボリュームを維持します。カタログは、データセットの取得に使用されます。非VSAMデータセットは、JCLのDispositionParameterを使用してカタログ項目を作成します。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データセットを操作しているときに、異常終了が発生する場合があります。以下は、問題の解決に役立つ一般的なファイルステータスコードとその説明です。
コード | 説明 |
---|---|
00 | 操作は正常に完了しました |
02 | 一意でない代替インデックスの重複キーが見つかりました |
0404 | 固定長レコードが無効です |
05 | OPENファイルの実行中にファイルが存在しない |
10 | ファイルの終わりが検出されました |
14 | ファイル境界外の相対レコードを読み取ろうとしました |
20 | VSAMKSDSまたはRRDSの無効なキー |
21 | REWRITEでWRITEの実行中またはキーの変更中にシーケンスエラーが発生しました |
22 | プライマリ重複キーが見つかりました |
23 | レコードが見つからないか、ファイルが見つかりません |
24 | ファイルの境界の外側のキー |
30 | 永続的なI / Oエラー |
34 | ファイル境界の外側を記録する |
35 | OPENファイルの実行中にファイルが存在しない |
37 | 間違ったモードでファイルを開く |
38 | ロックされたファイルを開こうとしました |
39 | ファイル属性が競合しているため、OPENが失敗しました |
41 | すでに開いているファイルを開こうとしました |
42 | 開いていないファイルを閉じようとしました |
43 | 最初にレコードを読み取らずに再書き込みを試みました |
44 | 異なる長さのレコードを書き直そうとしました |
46 | ファイルの終わりを超えて読み取ろうとしました |
47 | IOまたはINPUTが開かれていないファイルから読み取ろうとしました |
48 | IOまたはOUTPUTが開かれていないファイルに書き込もうとしました |
49 | IOが開かれていないファイルに対してDELETEまたはREWRITEを試みました |
91 | パスワードまたは認証に失敗しました |
92 | 論理エラー |
93 | リソースは利用できません |
94 | シーケンシャルレコードが利用できないか、同時OPENエラー |
95 | ファイル情報が無効または不完全です |
96 | ファイルのDDステートメントがありません |
97 | OPENが成功し、ファイルの整合性が検証されました |
98 | ファイルがロックされています-OPENに失敗しました |
99 | レコードがロックされています-レコードへのアクセスに失敗しました |