📜  VSAM-KSDS

📅  最后修改于: 2020-11-22 17:20:54             🧑  作者: Mango


KSDS被称为密钥排序数据集。密钥排序的数据集(KSDS)比ESDS和RRDS更为复杂,但更加有用和通用。我们必须在KSDS数据集的DEFINE CLUSTER命令内编码INDEXED 。 KSDS集群包含以下两个组件-

  • 索引-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))    -
/*

如果要在大型机服务器上执行上述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群集。