VSAM - KSDS

KSDS称为密钥序列数据集.密钥序列数据集(KSDS)比ESDS和RRDS更复杂,但更有用和通用.我们必须在DEFINE CLUSTER命令中为KSDS数据集编码 INDEXED . KSDS集群由以下两个组成部分组成 :

  • 索引 :  KSDS集群的索引组件包含集群中记录的键值列表,其中包含指向数据组件中相应记录的指针.索引组件是指KSDS记录的物理地址.这将每条记录的关键字与记录在数据集中的相对位置联系起来.添加或删除记录时,此索引会相应更新.
  • 数据 :  KSDS集群的数据组件包含实际数据. KSDS群集的数据组件中的每条记录都包含一个具有相同字符数的键字段,并且在每条记录中的相对位置相同.

以下是KSDS的主要特点 :

  • KSDS数据集内的记录始终按键排序 - 领域.记录按键按升序整理顺序存储.
  • 记录可以按顺序访问,也可以直接访问.
  • 使用密钥识别记录.每条记录的关键字是记录中预定义位置的字段.每个密钥在KSDS数据集中必须是唯一的.因此无法复制记录.
  • 插入新记录时,记录的逻辑顺序取决于关键字段的整理顺序.
  • KSDS数据集中的记录可以是固定长度或可变长度.
  • KSDS可以是用于 COBOL 程序,与任何其他文件一样.我们将在JCL中指定文件名,我们可以使用KSDS文件来处理程序内部.在COBOL程序中,将文件组织指定为索引,您可以使用任何访问模式(顺序,随机或动态)和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在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  -  Cluster模块中提到的相同.

示例

以下示例说明如何使用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集群.