JCL

JCL

l       COND=((8,EQ),(12,EQ),(16,LE)) job语句中是OR的关系,但是在step中却是AND的关系。

l       CONDjob中,则是判断当前step的返回值和指定值的关系, 而如果在step中,则是某一个step的返回值或者even或者only与指定值进行判断。在job中,如果判断结果为yes,则job结束,不再执行后面的step。在step中,如果回答为yes,则滑过当前step(不执行),转到下一个step

l       如果前面中有一个步骤abend了,则后面的步骤是不会被执行的,if a single step abends all other steps are bypassed if no COND statement is there

代替COND的办法是:ex.       

// IF (STEPA.RC GE 4) THEN

//jcl statements

// ELSE

//jcl statements

// ENDIF

l       DD statement的使用场合:1:指定/创建数据集;//step dd dsn=… 2 定义输出数据集: //step dd sysout=x 或者//step dd sysout=class/A/* *表示Refers to the class specified in the MSGCLASS is used 3: 标识instream数据流: //step dd * 或者//step dd data

l       DD statement的一些参数 volser dispdisposition),unitdcb

l       系统保留的dd step namesteplib, joblib, sysin, sysabend, sysudump, sysmdump, sysmsg, stepcat sysprintsysut1 sysut2

l       几个特殊的dsnname(不是ddname): &&temp(不需要指定dsn参数) 向前引用(DSN=*.STEP1.DD1)。

l       DD statementdisp参数取值(status newmodshr old abnormal disposition catlguncatlg delete keep pass abnormal dispotioncatlguncatlg delete keep

l       DCB的取值(recfm f/fb/v/fb/u;  dsorg: ps/pa/da

l       SPACE 的取值SPACE=(space units,(primary,secondary,dir),RLSE) space trk/cly/blocksize

l       UNIT用于指定hardware address/type/group

l       VOL=SER指定卷,向前引用: volrefddname

l       STEPLIB用于指定program所在的数据集,紧跟在exec语句之后,可以覆盖joblib

joblib必须紧跟在job语句之后,对每个step起作用。

l       Programprocedure program是一个程序,可以完成一个定的任务,而procedure就是一个函数而已(可以实现重用),jcl是用来提交programmvs的,在jcl中可以调用procedure,在program中不能调用procedure。在procedure中可以调用procedure procedure中可以调用programSteplibjoblib对应着program,而jcllib对应着procedure

l       Procedure分为instreamcataloguedInstreamjcl文件中定义和使用,一个job(通常也就是一个jcl最多包含15instream procedure)。Catalogued procedure是存放于一个pdsmember中,且文件名字和porcedure名字一致,一个Catalogued procedure最多可以有255step。使用Catalogued procedure在调用之前,必须使用//stepname jcllib order=procedure所在的pds name

l       jcl中调用procedure格式: //stepname exec proc=procname 或者//stepname exec procname

l       无论是哪类procedure,开始为: //procedureName PROC     只是instream//pend结束,而catalogued procedure结束时不能加//pend语句。无论哪类procedure都要满足不能包含以下语句

1)   JOB  statement

3)   JOBLIB  DD statement

4)   DD *  , DD DATA  -  In-stream data

5)   /*  delimiter  statement

6)   //  Null statement

7)   JES  statements

8)   PEND  statement  (for cataloged procedures)

l       一个instream中不能再定义一个instream procedure(不能嵌套定义instream procedure)。

l       Jcl中动态改写 exec 语句的内容。格式: PARAMETER.PROCSTEPNAME=VALUE

000111 //PROC1    PROC                                

000112 //STEPA1 EXEC    PGM=HELLO,TIME=(1,30)                          

000113 // PEND                                       

000114//STEP1     EXEC    PROC1, PARM . STEPA1=‘X=VENKAT’,

                                                     TIME . STEPA1=…

l       jcl中同台改写 dd 语句的内容:格式:PROCSTEPNAME.DDNAME DD PARAMETER=VALUE(注意在覆盖原来定义的dd时,需覆盖所有的参数)

000111 //PROC1    PROC                                

000112 //STEPA1 EXEC     PGM=HELLO

000113 //STEPLIB    DD   DSN=OPERN.CICS3.LOADLIB                          

000115 //NEWDS      DD DSN=IN11994.MYPDS.LOADLIB,DISP=(NEW),

000116 // SPACE=(TRKS,(10,5,5))     

000117 // DCB=(DSORG= PO ,LRECL=80)  

000117 // PEND                                       

 

000117//STEP1     EXEC     PROC1

000120//STEPA1.NEWDS    DD DSN=IN11994.MYPDS2.LOADLIB,

000121//   DCB=(DSORD=PS)

000121 //STEPA1.STEPLIB  DD DSN=IN11994.MYCOBOL.LOADLIB

000121 //STEPA1.NEWPDS  DD DSN=IN11994.MYCOBOL.FIRST,

000122//        DISP=(NEW,CATLG),   SPACE=(TRKS,(10,5,5))

l       Symbolic variable是这么回事儿!两个作用: 一是用来在jcl中调用procedure时,传递参数给procedure(当然procedure中使用的参数名字和传入的参数名字相同),二是相当于宏定义,在set语句中设置Symbolic variable的值,在后续的步骤中引用其值。

因此他可以用在set exec exec proc这三类语句中

l       IBM定义常用program

IEBCOPY       Copies, merges and compresses PDS

IEBCOMPR    Compares contents of PS

IEBUPDTE     Updates PDS

IEBDG           Generates Test Datasets

IEBMOVE      Copies and moves DASD data

IEBEDIT        Editing datasets

IEBGENER     Copies PS

SCRATCHES

UNCATALOGS

IEHLIST: 可以list PDS, CATALOG, VTOC

l       AMS?

l       VASM dataset之创建KSDS,KSDS 分为两部分构成indexdata,因此叫做clusterdata部分叫CI,创建KSDS可以直接用JCL,指定相应的参数格式,如下:

//ddname DD DSN=dataset-name,DISP=(NEW,….)

        [,UNIT=..]

        [,VOL=SER=..]

        [,SPACE=(unit,(pri,sec))]  - unit can be CYL,TRK or record

        [,AVGREC=U or K or M]

        [,LRECL=..]

        [,RECORG=KS or ES or RR]

        [,KEYLEN=..]

        [,KEYOFF=..]

l       但是更多情况下是借助AMS来创建。使用AMS,是通过调用IDCAMS program来实现的,AMS的功能很多,具体调用时,使用什么功能实在输入中指定的,其输出一般通过//SYSPRINT        DD SYSOUT=*,而输入命令一般//SYSIN DD *instream流指定。

l       常用AMS功能命令:

1.       DEFINE CLUSTER:用于定义cluster,也就是用来定义VSAM dataset,使用时,分别指定三个集合参数(clusterdataindex),格式如下:

DEFINE CLUSTER ( NAME (name-of-the-cluster)

                           [RECORDSIZE (avg,max)]

                           [CISZ (size)]

                              [KEYS (length   offset)]

                              [CYLINDERS/KILOBYTES… (pri,sec)]

                              [VOLUMES (vol-ser)]

              [DATA( NAME (name-of-the-data-component))

                       [CYLINDERS/KILOBYTES… (pri,sec)]

                       [VOLUMES (vol-ser)]       ]

              [INDEX ( NAME (name-of-the-index-component))]

2.       REPRO: 用于复制VSAM或者NON-VSAM数据集。他是同类型之间的复制,也就是VSAM<->VSAM, NON-VSAM<->NON-VSAM. 当然也就可以PDSmemberps了。具体格式:

 000200 //STEP1 EXEC PGM=IDCAMS          

 000300 //SYSPRINT DD SYSOUT=*          

 000400 //SYSIN DD *                    

 000410     REPRO                                      -                     

 000500     IDS(INF6244.INPUT.JCLPS1)

 000600     ODS(INF6244.VSAM.KSDS1)     

 000700 /*                              

3.       LISTCAT 列出所有catalog information,具体格式如下:

000200 //STEP1 EXEC PGM=IDCAMS                 

000300 //SYSPRINT DD SYSOUT=*                  

000400 //SYSIN DD *                            

000500     LISTCAT ENTRY(INF6244.VSAM.KSDS1) ALL

000600 /*                                      

4.       Delete:删除dataset,具体格式如下:

000200 //STEP1 EXEC PGM=IDCAMS             

000300 //SYSPRINT DD SYSOUT=*              

000400 //SYSIN DD *                        

000500     DELETE INF6244.VSAM.KSDS1       

001106 /*                                  

5.       创建GDG: 即是一系列按年代排序或者功能相关的dataset。一个GDG有三部分构成: BASE ENTRY; MODEL DATASET; GENERATION DATASET(GDS),因此创建一个GDG也要分别创建这三部分。

1.       创建BASE ENTRY: 顾名思义,即是GDG的入口,一旦BASE ENTRY被创建,以后的generation的名字只需要在其名字之上加(+1),比如,base entry的名字为:INF6244.PAYROLL.VERSION,则以后创建genertion dataset的时候名字为INF6244.PAYROLL.VERSION(+1)。格式如下:

000200 //STEP1          EXEC        PGM=IDCAMS                       

000300 //SYSPRINT       DD               SYSOUT=*                        

000400 //SYSIN          DD *                                   

000500    DEFINE GDG -                               

000600    (  NAME(INF6244.PAYROLL.VERSION)     -            

000700        LIMIT(12)                       -                                  

000800        NOEMPTY                      -                                      

000900        SCRATCH )                                    

001000 /*                                            

2.       创建model dataset:它的创建是为GDG提供DCBEXPDT参数的值的,使用创建的model dataset是在创建GDS时,DCB的值就直接指定为model dataset的名字,其格式如下:

000100 //INF62441 JOB (AMLAN),NOTIFY=INF6244,CLASS=A

 000200 //STEP1 EXEC PGM=IEFBR14                     

 000600 //DD1 DD DSN=INF6244.PAYROLL,DISP=(,KEEP),   

 000700 //       SPACE=(TRK,(5,2)),VOL=SER=,UNIT=SYSDA,

 000800 //       DCB=(RECFM=FB,LRECL=80,BLKSIZE=800) 

3.       创建GDS:即是创建一代。格式如下:

000100 //INF62441 JOB (AMLAN),NOTIFY=INF6244,CLASS=A            

000200 //STEP1 EXEC PGM=IEFBR14                                 

000300//DD1 DD DSN=INF6244.PAYROLL.VERSION(+1),DISP=(NEW,CATLG),

000400 //       SPACE=(TRK,(1,1)),VOL=SER=,UNIT=SYSDA,          

000500 //       DCB=INF6244.PAYROLL                              

4.       关于GDS的其他三个操作:

1.       删除MODEL DATASET: DELETE 后指定model ds的名字,后加pure

000200 //STEP1 EXEC PGM=IDCAMS                     

 000300 //SYSPRINT DD SYSOUT=*                       

 000400 //SYSIN DD *                                

 000500     DELETE INF6244.PAYROLL PURGE            

 000600 /*                                          

2.       删除GDG和所有的GDS, delete之后指定GDG base entry name

000200 //STEP1 EXEC PGM=IDCAMS                       

 000300 //SYSPRINT DD SYSOUT=*                       

 000400 //SYSIN DD *                                 

 000500     DELETE INF6244.PAYROLL.VERSION PURGE FORCE

 000600 /*                                           

3.       列出GDGcatalog 信息

000200 //STEP1 EXEC PGM=IDCAMS                           

 000300 //SYSPRINT DD SYSOUT=*                            

 000400 //SYSIN DD *                                      

 000500     LISTCAT GDG ENTRIES(INF6244.PAYROLL.VERSION)ALL

 000600 /*                                                 

l       SMS: 即存贮管理子系统。他是mvs中可选的管理磁盘空间的有效工具。使用SMS创建数据集的时候,再一般jcl创建语句中做如下修改即可:NNIT->STORCLAS;CB&SPACE->DATACLAS;MGMTCLAS or migration of datasets

 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值