一、JCL中常用的3个STATEMENT:
 
(1) JOB STATEMENT
 
//DEVGLJB  JOB (920133),CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),
//         NOTIFY=&SYSUID,REGION=4M,TYPRUN=?
 
JOB语句用来定义作业使用的公用信息,其中的关键字含义如下:
CLASS:作业运行的优先级,优先级别由系统管理员在INITIATOR中定义;
MSGCLASS: 指定作业输出存放的QUEUE,如果为Z,则表示输出信息不保留;
MSGLEVEL(A,B): 一般用(1,1)就可以了。
               A-0,1,2 (0--仅打印JCL; 1--打印全部; 2--JCL和JES2)
               B-0,1   (0--作业异常终止才打印;1--无论如何都打印)
NOTIFY: 汇报用,指定ID就是通知对象(比如项目经理)
REGION:指作业使用的虚存量,一般不应该在JOB STATEMENT中指定,应为接下来的作业步使用的虚存不能确定;
TYPRUN:[COPY]--把JCL印到输出中
        [HOLD]--先把JCL HOLD住,需要OP释放才可以执行 $ LJ JCLNAME       
 
(2) EXEC STATEMENT
 
//STEP2 EXEC PGM=ABC,ADDRSPC=VIRT,REGION=4M,COND=(8,GT,STEP1)
ADDRSPC有两个参数:VIRT -- 使用虚存
                   REAL -- 使用实存
对于作业来说,一般不应该使用实存来处理,因为这会导致占用大量的系统资源。即使用,也一般使用1K-4K左右就OK了。
REGION:表示作业步使用的工作虚存的大小。REGION的大小一般使用4k的倍数,因为计算机系统中页调度的大小就是4K,这样可以提高效率;
COND:(测试码,OPERATOR,STEPNAME),记住,COND是指条件满足则不执行;当有多个条件时,条件取或运算;
 
(3) DD STATEMENT
 
//DDNAME DD DSN=ABC, DISP=***,UNIT=***,DCB=***,VOL=***,SPACE=***
DDNAME:COBOL程序中ASSIGN的文件,在//后不能有空格,且第一个字符不能是数字;一个DDNAME对应多个DATASET时,称为DDNAME的CONCAT,这些DATASET的属性必须一致,即只能是都是FB或都是VB,CONCAT不能有DUMMY;
DSN: 文件名(指定编目的位置);对于长度超过8个字符的数据集名,390无法识别,需要用引号引用(主要是与AS400之类的系统倒磁带数据时可能会碰到这种情况),但是如果长度超过44个字符,则用引号引起来也没用;
DISP:(A=使用方式,B=正常完成后的处理办法,C=异常终止时的处理办法)
      NEW---新建
      OLD---独占
      SHR---共享
      KEEP--用于磁带,磁盘操作使用的情况不多
      PASS--传递给后续作业步(注意,不是作业)
      MOD---如果数据集不存在,则NEW,如果存在,则PEND。比如:
      //DEFABC EXEC PGM=IEFBR14
      //ABC    DD   DSN=ABC,DISP=(MOD,DELETE),UNIT=SYSDA,SPACE=?
      可以保证在定义文件时,不会因为文件不存在使用DELETE而报错。
UNIT:可以指定地址,也可以指定设备名。但因为地址不好操作,一般使用设备名。目前使用较多的是3390磁盘。即UNIT=3390,如果写成UNIT=/3390则表示使用的是地址;还有一种用法UNIT=SYSDA(SYSDA是IBM给定的UNIT GROUP参数)
VOL:一般SER连用,用于指定卷名。如:VOL=SER=SGAP01.跨卷则可以使用多个。
SPACE:表示数据集使用的空间,SPACE=(TRK,(1,1)),前者表示空间使用的单位,后者分别表示初级分配,次级分配的大小。 在SPACE中,无论前面使用的单位如何,最终都是以TRACK作为单位;顺便提一下,ESS磁盘中各单位换算关系:
1 CYL = 15 TRK; 1TRK = 54K(读取时,磁头每次转半圈,取到27K的数据),因此,如果CI大小为4K,而CA定义为1各CYL,则CI/CA为180
DCB:常见格式--DCB=(RECFM=FB,LRECL=80,BLKSZ=0,BUFFNO=10,DSORG=PS)。其中
     RECFM表示数据集的格式,一般有FB,VB两种,其他还有好几种格式,不过一般
     不使用。其中LOADLIB使用的格式比较特殊,可以注意一下;
     LRECL指记录长度;
     BLKSZ指BLOCK的大小。390系统读QSAM文件,默认每次读5个BLOCK的数据,如
     果记录大小已知,则通过指定BLOCKSZ可以指定每次需读取的记录。因为磁头
     没转一次读27K的数据(ESS磁盘),那么,最优大小一般定义为27998B,不过
     IBM已经对这个做了优化,现在只要设定为0就OK了。
     BUFFNO指缓冲区读入BLOCK的个数,系统默认值是5。要是想每次读到更多的
     BLOCK,可以加大这个值,但前提是系统允许,比如磁盘的高速缓冲高达一两
     个G,此时就可以考虑扩大BUFFNO了;
 
二、老师讲义过程中提到的其他信息
 
(1)CICS最好不要堆积太多的TASK,因为CICS在执行指令时,会每次扫描QUEUE还有多少的TASK,TASK越多,扫描时间越长,容易造成联机性能下降;
(2)DFSORT的ULTI使用MERGE功能时,无需指定SORTWK;
(3)PROCEDURE中,DD STATEMENT不能有含“*”或“DATA”的作业语句,如:
     //DDNAME DD *  
     //DDNAME DD DATA
 (4)CONTACT的DSN不能使用DUMMY,如:
     //DDNAME DD DSN=ABC,DISP=SHR
     //       DD DSN=BCD,DISP=SHR
     //       DD DUMMY             (ERROR,NOT ALLOWED)
Posted on 2010-08-20 19:24  java猫  阅读(1002)  评论(1编辑  收藏  举报