为 VSAM KSDS 定义备用索引

Defining Alternate Index for VSAM KSDS

我在为我的 VSAM KSDS 定义备用索引时遇到问题。它说

IDC3211I KEYWORD 'DATA' IS IMPROPER  

这是我的 VSAM KSDS 定义:

  DEFINE CLUSTER                            -    
       (NAME(IBMUSER.TEST.SAMPLE.KSDS)      -    
        VOLUMES(ZASYS1)                     -    
        TRACKS(15 15)                       -    
        INDEXED                             -    
        SHAREOPTIONS(1 3) UNIQUE            -    
        RECORDSIZE(100 100)                 -    
        KEYS(18 0)                          -    
      DATA(NAME(IBMUSER.TEST.SAMPLE.KSDS.DATA))- 
     INDEX(NAME(IBMUSER.TEST.SAMPLE.KSDS.INDEX)) 

这是我的备用索引定义:

  DEFINE AIX (NAME(IBMUSER.TEST.SAMPLE.AIX)- 
  RELATE(IBMUSER.TEST.SAMPLE.KSDS)       -   
  CISZ(4096)                             -   
  FREESPACE(20,20)                       -   
  KEYS(20,19)                            -   
  NONUNIQUEKEY                           -   
  UPGRADE                                -   
  RECORDSIZE(61,61)                    -     
  DATA(NAME(IBMUSER.TEST.SAMPLE.AIX.DATA))-  
  INDEX(NAME(IBMUSER.TEST.SAMPLE.AIX.INDEX)) 

我不明白为什么它说关键字 DATA 不正确。

有几个问题。第一个是命令中的语法问题。

  DEFINE CLUSTER                                   -                          
       (                                           -                          
        NAME(IBMUSER.TEST.SAMPLE.KSDS)             -                          
        TRACKS(15 15)                              -                          
        INDEXED                                    -                          
        VOLUMES(ZMSHR1)                            -                          
        SHAREOPTIONS(1 3) UNIQUE                   -                          
        RECORDSIZE(100 100)                        -                          
        KEYS(18 0)                                 -                          
      DATA(NAME(IBMUSER.TEST.SAMPLE.KSDS.DATA))    -                          
IDC3211I KEYWORD 'DATA' IS IMPROPER                                           
     INDEX(NAME(IBMUSER.TEST.SAMPLE.KSDS.INDEX))                              
IDC3202I ABOVE TEXT BYPASSED UNTIL NEXT COMMAND. CONDITION CODE IS 12         

这是因为在完成 CLUSTER 部分的 KEYS 子句后缺少右括号。添加如下所示的右括号将完成 DEFINE CLUSTER 部分。

  DEFINE CLUSTER                                   -
       (                                           -
        NAME(IBMUSER.TEST.SAMPLE.KSDS)             -
        TRACKS(15 15)                              -
        INDEXED                                    -
        VOLUMES(ZMSHR1)                            -
        SHAREOPTIONS(1 3) UNIQUE                   -
        RECORDSIZE(100 100)                        -
        KEYS(18 0)                                 -
       )                                           -
      DATA(NAME(IBMUSER.TEST.SAMPLE.KSDS.DATA))    -
     INDEX(NAME(IBMUSER.TEST.SAMPLE.KSDS.INDEX))
IDC0508I DATA ALLOCATION STATUS FOR VOLUME ZMSHR1 IS 0         
IDC0509I INDEX ALLOCATION STATUS FOR VOLUME ZMSHR1 IS 0        
IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 0      

更正该错误后,您将收到另一个错误,因为您需要 AIX 的 space 和卷规范。使用下面具有 AIX 所需参数的定义。

  DEFINE AIX                                       -
         (                                         -
          NAME(IBMUSER.TEST.SAMPLE.AIX)            -
          TRACKS(15 15)                            -
          VOLUMES(ZMSHR1)                          -
          RELATE(IBMUSER.TEST.SAMPLE.KSDS)         -
          CISZ(4096)                               -
          FREESPACE(20,20)                         - 
          KEYS(20,19)                              - 
          NONUNIQUEKEY                             - 
          UPGRADE                                  - 
          RECORDSIZE(61,61)                        - 
         )                                         - 
        DATA(NAME(IBMUSER.TEST.SAMPLE.AIX.DATA))   - 
       INDEX(NAME(IBMUSER.TEST.SAMPLE.AIX.INDEX))    

完成 JOB 以完成 CLUSTER 和 ALTERNATEINDEX 的创建。我将语句格式化为更具可读性:

//IDCAMS   JOB CLASS=A,NOTIFY=&SYSUID               
//STEP0010 EXEC PGM=IDCAMS                          
//SYSPRINT DD  SYSOUT=*                             
//SYSIN    DD  *                                    
  DELETE IBMUSER.TEST.SAMPLE.KSDS                   
  DELETE IBMUSER.TEST.SAMPLE.AIX                    
  SET MAXCC = 0                                     
                                                    
  DEFINE CLUSTER(                                   -
                 NAME(IBMUSER.TEST.SAMPLE.KSDS)     -
                 TRACKS(15 15)                      -
                 INDEXED                            -
                 VOLUMES(ZMSHR1)                    -
                 SHAREOPTIONS(1 3) UNIQUE           -
                 RECORDSIZE(100 100)                -
                 KEYS(18 0)                         -
         )                                          -
         DATA(                                      -
           NAME(IBMUSER.TEST.SAMPLE.KSDS.DATA)      -
         )                                          -
         INDEX(                                     -
               NAME(IBMUSER.TEST.SAMPLE.KSDS.INDEX) -
         )    
                                                                                                        
  DEFINE AIX(                                       -
             NAME(IBMUSER.TEST.SAMPLE.AIX)          -
             TRACKS(15 15)                          -
             VOLUMES(ZMSHR1)                        -
             RELATE(IBMUSER.TEST.SAMPLE.KSDS)       -
             CISZ(4096)                             -
             FREESPACE(20,20)                       -
             KEYS(20,19)                            -
             NONUNIQUEKEY                           -
             UPGRADE                                -
             RECORDSIZE(61,61)                      -
            )                                       -
         DATA(                                      -
              NAME(IBMUSER.TEST.SAMPLE.AIX.DATA))   -
             )                                      -
         INDEX(                                     -
               NAME(IBMUSER.TEST.SAMPLE.AIX.INDEX)  -
              )         
/*                                                  
//