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 執行,並且將構建索引。

廣告