VSAM - 备用索引



备用索引是在 KSDS/ESDS 数据集的基础索引之外创建的附加索引。备用索引允许使用多个键来访问记录。备用索引的键可以是非唯一键,可以存在重复。

备用索引的创建

创建备用索引使用以下步骤:

  • 定义备用索引
  • 定义路径
  • 构建索引

定义备用索引

备用索引使用 **DEFINE AIX** 命令定义。

DEFINE AIX                              -
(NAME(alternate-index-name)             -
RELATE(vsam-file-name)                  -
CISZ(number)                            -
FREESPACE(CI-Percentage,CA-Percentage)  -
KEYS(length offset)                     -
NONUNIQUEKEY / UNIQUEKEY                -
UPGRADE / NOUPGRADE                     -
RECORDSIZE(average maximum))            -
DATA                                    -
   (NAME(vsam-file-name.data))          -
INDEX                                   -
   (NAME(vsam-file-name.index))

以上语法显示了定义备用索引时使用的参数。我们在“定义集群模块”中已经讨论了一些参数,在定义备用索引时使用了一些新的参数,我们将在本文中讨论这些参数:

序号 参数及描述
1

DEFINE AIX

Define AIX 命令用于定义备用索引并指定其组件的参数属性。

2

NAME

NAME 指定备用索引的名称。

3

RELATE

RELATE 指定为其创建备用索引的 VSAM 集群的名称。

4

NONUNIQUEKEY / UNIQUEKEY

UNIQUEKEY 指定备用索引是唯一的,NONUNIQUEKEY 指定可能存在重复。

5

UPGRADE / NOUPGRADE

UPGRADE 指定如果基本集群被修改则应修改备用索引,NOUPGRADE 指定如果基本集群被修改则应保留备用索引。

示例

以下是一个基本的示例,演示如何在 JCL 中定义备用索引:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   DEFINE AIX (NAME(MY.VSAM.KSDSAIX)      -
   RELATE(MY.VSAM.KSDSFILE)               -
   CISZ(4096)                             -
   FREESPACE(20,20)                       -
   KEYS(20,7)                             -
   NONUNIQUEKEY                           -
   UPGRADE                                -
   RECORDSIZE(80,80))                     -
   DATA(NAME(MY.VSAM.KSDSAIX.DATA))       -
   INDEX(NAME(MY.VSAM.KSDSAIX.INDEX))
/*

如果您在大型机服务器上执行上述 JCL,它应该以 MAXCC = 0 执行,并且将创建 MY.VSAM.KSDSAIX 备用索引。

定义路径

定义路径用于将备用索引与基本集群关联。在定义路径时,我们指定路径的名称以及与此路径相关的备用索引。

DEFINE PATH                        -
NAME(alternate-index-path-name)    -
PATHENTRY(alternate-index-name))

以上语法有两个参数。NAME 用于指定备用索引路径名称,PATHENTRY 用于指定备用索引名称。

示例

以下是在 JCL 中定义路径的基本示例:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
DEFINE PATH                          -
   NAME(MY.VSAM.KSDSAIX.PATH)    -
   PATHENTRY(MY.VSAM.KSDSAIX))
/*

如果您在大型机服务器上执行上述 JCL,它应该以 MAXCC = 0 执行,并且将在备用索引与基本集群之间创建路径。

构建索引

BLDINDEX 命令用于构建备用索引。BLDINDEX 读取 VSAM 索引数据集(或基本集群)中的所有记录,并提取构建备用索引所需的数据。

BLDINDEX                           -
INDATASET(vsam-cluster-name)       -
OUTDATASET(alternate-index-name))

以上语法有两个参数。INDATASET 用于指定 VSAM 集群名称,OUTDATASET 用于指定备用索引名称。

示例

以下是在 JCL 中构建索引的基本示例:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1  EXEC PGM = IDCAMS
//SYSPRINT DD  SYSOUT = *
//SYSIN    DD  *
   BLDINDEX                           -
   INDATASET(MY.VSAM.KSDSFILE)        -
   OUTDATASET(MY.VSAM.KSDSAIX))
/*

如果您在大型机服务器上执行上述 JCL,它应该以 MAXCC = 0 执行,并且将构建索引。

广告