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)) 

示例

以下示例显示了如何在 JCL 中使用 IDCAMS 实用程序创建 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 集群

KSDS 集群使用 IDCAMS 实用程序删除。DELETE 命令从目录中删除 VSAM 集群的条目,并可选地删除文件,从而释放对象占用的空间。

DELETE data-set-name CLUSTER  
[ERASE / NOERASE] 
[FORCE / NOFORCE] 
[PURGE / NOPURGE] 
[SCRATCH / NOSCRATCH]

以上语法显示了在删除 KSDS 集群时可以使用哪些参数。参数说明与 VSAM - 集群模块中提到的相同。

示例

以下示例显示了如何在 JCL 中使用 IDCAMS 实用程序删除 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 集群。

广告