VSAM-KSDS


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 - Cluster 模块中提到的相同。

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 - 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
/*

如果您将在大型机服务器上执行上述 JCL。它应该以 MAXCC = 0 执行,并将删除 MY.VSAM.KSDSFILE VSAM 集群。