VSAM - KSDS

KSDS 被称为密钥序列数据集。密钥序列数据集 (KSDS) 比 ESDS 和 RRDS 更复杂,但更有用且用途更广泛。我们必须在 KSDS 数据集的 DEFINE CLUSTER 命令中编写 INDEXED。KSDS 集群由以下两个组件组成 −

  • 索引 − KSDS 集群的索引组件包含集群中记录的键值列表,并带有指向数据组件中相应记录的指针。索引组件引用 KSDS 记录的物理地址。这将每个记录的键与记录在数据集中的相对位置相关联。添加或删除记录时,此索引会相应更新。

  • 数据 − KSDS 集群的数据组件包含实际数据。 KSDS 集群数据组件中的每个记录都包含一个具有相同字符数且在每个记录中出现在相同相对位置的关键字段。

以下是 KSDS − 的主要功能。

  • KSDS 数据集内的记录始终按关键字段排序。记录按升序存储,并按关键字排序。

  • 记录可以按顺序访问,也可以直接访问。

  • 使用关键字标识记录。每个记录的关键字是记录中预定义位置的字段。每个关键字在 KSDS 数据集中必须是唯一的。因此不可能出现记录重复的情况。

  • 插入新记录时,记录的逻辑顺序取决于关键字段的整理顺序。

  • KSDS 数据集中的记录可以是固定长度或可变长度。

  • KSDS 可以像任何其他文件一样在 COBOL 程序中使用。我们将在 JCL 中指定文件名,并且可以使用 KSDS 文件在程序内部进行处理。在 COBOL 程序中,将文件组织指定为 Indexed,您可以将任何访问模式 (顺序、随机或动态) 与 KSDS 数据集一起使用。

KSDS 文件结构

为了搜索特定记录,我们给出一个唯一的键值。在索引组件中搜索键值。一旦找到键,就会检索引用数据组件的相应内存地址。从内存地址中,我们可以获取存储在数据组件中的实际数据。以下示例显示了索引和数据文件的基本结构 −

KSDS Structure

定义 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 集群

使用 IDCAMS 实用程序删除 KSDS 集群。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.KSDSFILE VSAM 集群。