上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