Vsam-ksds

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

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クラスターが削除されます。