IBM主机技术一本通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.21 JCL过程参数置换和RESTART语句

如果一个有多个作业步的作业在运行过程中出现了错误,导致作业运行失败,通常的做法是在恢复数据后重新执行整个作业,但如果需要恢复的数据量很大,这种做法就不可取了,尤其是重复执行已经成功的作业步,显得更是浪费。为了解决这个问题,JCL提供了一个RESTART命令用来指定从作业的某一个作业步开始执行。

下面的作业流有3个作业步,现在要重新执行最后一步,就可以使用第2行的RESTART语句。由于作业步STEP3是调用过程的,而该过程中有两个作业步,所以,我们必须指明从STEP3的哪个过程步开始执行,这样RESTART后面的参数变成了STEP3.DEL110S1,其中,STEP是作业流的作业步的名字,而DEL110S1则是过程中的作业步的名字。

        000001 //IBMUSERA  JOB ACCT#,IBMUSER,NOTIFY=IBMUSER,MSGLEVEL=(1,1)
        000002 //     RESTART=STEP3.DEL110S1
        000003 //MYLIB JCLLIB ORDER=(IBMUSER.TEST.PROC)
        000004 //*****************************************************************
        000005 //*          DEFINE QSAM FILE
        000006 //*****************************************************************
        000007 //DATA SET USERID=IBMUSER
        000008 //STEP1   EXEC IBMBR14
        000009 //DEL110S1.QSAM1 DD DISP=OLD
        000010 //DEL110S2.PDS1 DD DISP=OLD
        000011 //*
        000012 //STEP2   EXEC IBMBR14
        000013 //DEL110S1.QSAM1 DD DSN=&USERID..TEST.QSAM6,DISP=OLD
        000014 //DEL110S2.PDS1 DD DSN=&USERID..TEST.PDS6,DISP=OLD
        000015 //*
        000016 //STEP3   EXEC IBMBR14
        000017 //DEL110S1.QSAM1 DD DSN=&USERID..TEST.QSAM9,
        000018 //          DCB=(RECFM=FB,LRECL=133,DSORG=PS)
        000019 //DEL110S2.PDS1 DD DSN=&USERID..TEST.PDS9,
        000020 //          DISP=(NEW,CATLG,DELETE),
        000021 //          SPACE=(TRK,(1,1,5),RLSE),
        000022 //          DCB=(RECFM=FB,LRECL=133,DSORG=PO)
        000023 //

下面显示的是系统完成所有的置换后的完整作业流,其中,原过程中的所有USERID的地方都换成了IBMUSER,这是我们作业流第7 行的SET语句的功劳。由于我们是从STEP3 开始执行的,所以STEP1和STEP2的内容没有发生任何变化,但是,从下面置换后的JCL的第16行和18行来看,无论是LRECL和文件名都替换成功了。

  1 //IBMUSERA  JOB ACCT#,IBMUSER,NOTIFY=IBMUSER,MSGLEVEL=(1,1),
    //     RESTART=STEP3.DEL110S1
  2 //MYLIB JCLLIB ORDER=(IBMUSER.TEST.PROC)
    //*****************************************************************
    //*  DEFINE QSAM FILE
    //*****************************************************************
  3 //DATA SET USERID=IBMUSER
  4 //STEP1   EXEC IBMBR14
    XX*IBMBR14  PROC
    XX*****************************************************************
    XX*  DEFINE QSAM FILE
    XX*****************************************************************
  5 XXDEL110S1 EXEC PGM=IEFBR14
  6 //DEL110S1.QSAM1 DD DISP=OLD
    X/QSAM1   DD DSN=&USERID..TEST.QSAM1,
    X/    DISP=(NEW,CATLG,DELETE),
    X/    SPACE=(TRK,(1,1),RLSE),
    X/    DCB=(RECFM=FB,LRECL=80,DSORG=PS)
    XX*****************************************************************
    XX*  DEFINE PDS  FILE
    XX*****************************************************************
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.QSAM1,DISP=(NEW,CATLG,DELETE),
    SPACE=(TRK,(1,1),RLSE),
    DCB=(RECFM=FB,LRECL=80,DSORG=PS)
  7 XXDEL110S2 EXEC PGM=IEFBR14
  8 //DEL110S2.PDS1 DD DISP=OLD
    X/PDS1    DD DSN=&USERID..TEST.PDS1,
    X/    DISP=(NEW,CATLG,DELETE),
    X/    SPACE=(TRK,(1,1,5),RLSE),
    X/    DCB=(RECFM=FB,LRECL=80,DSORG=PO)
    XX*       PEND
    //*
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.PDS1,DISP=(NEW,CATLG,DELETE),
    SPACE=(TRK,(1,1,5),RLSE),
    DCB=(RECFM=FB,LRECL=80,DSORG=PO)
  9 //STEP2   EXEC IBMBR14
    XX*IBMBR14  PROC
    XX*****************************************************************
    XX*  DEFINE QSAM FILE
    XX*****************************************************************
  10 XXDEL110S1 EXEC PGM=IEFBR14
  11 //DEL110S1.QSAM1 DD DSN=&USERID..TEST.QSAM6,DISP=OLD
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.QSAM6,DISP=OLD
    X/QSAM1   DD DSN=&USERID..TEST.QSAM1,
    X/            DISP=(NEW,CATLG,DELETE),
    X/            SPACE=(TRK,(1,1),RLSE),
    X/            DCB=(RECFM=FB,LRECL=80,DSORG=PS)
    XX*****************************************************************
    XX*          DEFINE PDS  FILE
    XX*****************************************************************
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.QSAM1,DISP=(NEW,CATLG,DELETE),
    SPACE=(TRK,(1,1),RLSE),
    DCB=(RECFM=FB,LRECL=80,DSORG=PS)
  12 XXDEL110S2 EXEC PGM=IEFBR14
  13 //DEL110S2.PDS1 DD DSN=&USERID..TEST.PDS6,DISP=OLD
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.PDS6,DISP=OLD
    X/PDS1    DD DSN=&USERID..TEST.PDS1,
    X/            DISP=(NEW,CATLG,DELETE),
    X/            SPACE=(TRK,(1,1,5),RLSE),
    X/            DCB=(RECFM=FB,LRECL=80,DSORG=PO)
    XX*       PEND
    //*
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.PDS1,DISP=(NEW,CATLG,DELETE),
    SPACE=(TRK,(1,1,5),RLSE),
    DCB=(RECFM=FB,LRECL=80,DSORG=PO)
  14 //STEP3   EXEC IBMBR14
    XX*IBMBR14  PROC
    XX*****************************************************************
    XX*          DEFINE QSAM FILE
    XX*****************************************************************
  15 XXDEL110S1 EXEC PGM=IEFBR14
  16 //DEL110S1.QSAM1 DD DSN=&USERID..TEST.QSAM9,
    //          DCB=(RECFM=FB,LRECL=133,DSORG=PS)
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.QSAM9,DCB=(RECFM=FB,LRECL=133,
    DSORG=PS)
    X/QSAM1   DD DSN=&USERID..TEST.QSAM1,
    X/            DISP=(NEW,CATLG,DELETE),
    X/            SPACE=(TRK,(1,1),RLSE),
    X/            DCB=(RECFM=FB,LRECL=80,DSORG=PS)
    XX*****************************************************************
    XX*          DEFINE PDS  FILE
    XX*****************************************************************
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.QSAM1,DISP=(NEW,CATLG,DELETE),
    SPACE=(TRK,(1,1),RLSE),
    DCB=(RECFM=FB,LRECL=80,DSORG=PS)
  17 XXDEL110S2 EXEC PGM=IEFBR14
  18 //DEL110S2.PDS1 DD DSN=&USERID..TEST.PDS9,
    //          DISP=(NEW,CATLG,DELETE),
    //          SPACE=(TRK,(1,1,5),RLSE),
    //          DCB=(RECFM=FB,LRECL=133,DSORG=PO)
    IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.PDS9,DISP=(NEW,CATLG,DELETE),
    SPACE=(TRK,(1,1,5),RLSE),
    DCB=(RECFM=FB,LRECL=133,DSORG=PO)
    X/PDS1    DD DSN=&USERID..TEST.PDS1,
    X/           DISP=(NEW,CATLG,DELETE),
    X/           SPACE=(TRK,(1,1,5),RLSE),
    X/           DCB=(RECFM=FB,LRECL=80,DSORG=PO)
    XX*       PEND
          IEFC653I SUBSTITUTION JCL - DSN=IBMUSER.TEST.PDS1,DISP=(NEW,CATLG,DELETE),
          SPACE=(TRK,(1,1,5),RLSE),
      DCB=(RECFM=FB,LRECL=80,DSORG=PO)

下面显示的是系统执行完成后的报告信息,我们可以看到,只有STEP3的两个过程部执行了,STEP1和STEP2则没有执行,这就是RESTART语句的功能。

              J E S 2  J O B  L O G  --  S Y S T E M  7 4 9 0  --  N O D E  T S T M V S 0 1

        07.12.50 JOB00038---- THURSDAY,  15 JUL 2010----
        07.12.50 JOB00038  IRR010I  USERID IBMUSER  IS ASSIGNED TO THIS JOB.
        07.12.50 JOB00038  ICH70001I IBMUSER  LAST ACCESS AT 06:54:12 ON THURSDAY, JULY 15, 2010
        07.12.50 JOB00038  $HASP373 IBMUSERA STARTED - INIT 1   - CLASS A - SYS 7490
        07.12.50 JOB00038  IEF403I IBMUSERA - STARTED - TIME=07.12.50
        07.12.50 JOB00038 -IBMUSERA STEP3 DEL110S1  00 7.00 .00 .00 67 0 5 0 0 0
        07.12.50 JOB00038 -IBMUSERA STEP3 DEL110S2  00 7.00 .00 .00 63 0 0 0 0 0
        07.12.50 JOB00038  IEF404I IBMUSERA - ENDED - TIME=07.12.50
        07.12.50 JOB00038  -IBMUSERA ENDED.NAME-IBMUSER TOTAL CPU TIME=.00 TOTAL ELAPSED TIME=.00
        07.12.50 JOB00038  $HASP395 IBMUSERA ENDED
        ------ JES2 JOB STATISTICS ------
        -  15 JUL 2010 JOB EXECUTION DATE
        -          22 CARDS READ
        -         137 SYSOUT PRINT RECORDS
        -          0 SYSOUT PUNCH RECORDS
        -          11 SYSOUT SPOOL KBYTES
        -        0.00 MINUTES EXECUTION TIME