Simple things make a real difference

2007年10月10日

JCL学习笔记(1)

//TE01A JOB ACCT#,
// TE01,
// NOTIFY=TE01,
// MSGLEVEL=(1,1)
//STEP1 EXEC PGM=IEFBR14
//DD1 DD DSN=TE01.PS1,UNIT=3390,VOL=SER=USER02,
// DISP=(NEW,CATLG,DELETE),DSORG=PS,RECFM=FB,
// LRECL=80,SPACE=(TRK,1)

1.Display the JES2 Held Output Queue with SDSF
A : Release a job's output
C : Purge a job's output
H : Hold a job's output
L : List a job's output in the log
O : Release output for printing
P : Purge a job's output
S : Display a job's held output
X : Print output data sets.
? : 将作业结果分类显示

2.JCL的9种语句
  1. JOB : 标志一个作业的开始,提供必要的运行参数
  2. EXEC : 标志一个作业步的开始,定义本作业步所要执行的程序或过程
  3. DD : 描述应用程序所需要的数据文件
  4. /* : 流内数据结束或调用JES控制语句
  5. //* : 注释语句,在4-80列写出注释内容
  6. // : 空语句,标记一个作业的结束
  7. PROC : IN-STREAM PROCEDURE或CATALOGED PROCEDURE的起始标记。
  8. PEND : 标志IN-STREAM PROCEDURE的结束
  9. Command : 用来在输入流中写入操作命令

3.JCL错误
  1. JCL语法错误
  2. JCL运行时错误(JCL Execution Time Errors)
ABEND : Abnormally Terminates, Could be caused by a system detected programming or hardware error
作业返回码RC的范围:0-4095


JCL字符集(55个)
  1. 字母26个
  2. 数字10个
  3. 通配符3个 (@ $ #)
  4. 特殊字符10个 (, . / ( ) * & + - =)
  5. 关系字符集6个 (EQ NE GT GE LT LE)

4.JCL语句规范
除/*外均以第一、第二列的//符号作为开始标志,长度为80列。分为5个区:
  1. 标识符区 (Identifier Field)
  2. 名字区 (Name Field) : 从第三列开始,由1~8个字母数字或通配符组成,第一个字符不可以是数字,后面必须跟至少一个空格;
  3. 操作符区 (Operation Field) : 规定了语句类型: JOB,EXEC,DD,PROC,PEND或者操作员命令,后面至少跟一个空格;
  4. 参数区 (Parameter Field) : 包括位置参数和关键字参数,没有固定的长度或者列的要求;
  5. 注释区 (Comment Field) : 位于参数区之后,仅当参数出现时才能书写注释信息,防止于参数混淆,后面必须跟一个空格。
续行
参数区和注释区可以续行,在当前行的71列前把某个参数及其后面的逗号些完整,下一行以"// "开始,续行内容从4~16列开始,从16列以后开始将被当作注释。


5. JOB语句参数
1.位置参数 : 记账信息,程序员名
2.关键字参数 : CLASS,MSGCLASS,MSGLEVEL,NOTIFY,PRTY,ADDRSPC,REGION,TIME,LINES
例子:
//TE01A JOB ACCT#,
// TE01,
// CLASS=A, #作业类别,A~Z,0~9共36个,相同类别的作业处于同一输入等待队列中,具有相同的处理属性,缺省为A
// MSGCLASS=A/X, #为作业日志(LOG)设置输出类别,A~Z,0~9,A为标准格式打印,B为打孔,K为Held Output Queue
// MSGLEVEL=(1,1), #MSGLEVEL=([statements][,messages]) statements:0~2, messages:0~1,缺省为(1,1)
// NOTIFY=TE01 #系统在后台作业处理完毕后给指定用户发送信息

6. MSGLEVEL=([statements][,messages])
statements : 0~2
  • 0 : 仅打印作业的JOB语句
  • 1 : 打印作业中包括过程语句在内的所有语句,以及JES控制语句
  • 2 : 仅打印JCL和JES控制语句,不打印过程语句
messages : 0~1
  • 0 : 仅当作业异常终止时,打印出有关JCL,JES,操作员及SMS的处理信息;否则只打印JCL处理信息;
  • 1 : 无论作业是否异常终止都打印所有信息。
缺省为 MSGLEVEL=(1,1)


7. EXEC : 标志作业步的开始,并告知系统如何执行该作业步。一个作业最多有255个作业步。
格式: //[作业步名] EXEC 位置参数[,关键字参数]...[符号参数=值]...[注释]

EXEC语句的位置参数: 每条EXEC语句必须有且仅有一个位置参数

1.PGM
PGM = {program-name}
{*.stepname.ddname} #要执行的程序由本作业步前名为stepname的作业步内名为ddname的DD语句的DSN参数决定
{*.stepname.procstepname.ddname} #要执行的程序由...所调用的过程步procstepname中...
例子:
//JOBC JOB ,JOHN,MSGCLASS=H
//STEP2 EXEC PGM=UPDT
//DDA DD DSN=SYS1.LINKLIB(P40),
// DISP=OLD
//STEP3 EXEC PGM=*.STEP2.DDA

2.PROC
PROC={procedure-name}
{procedure-name}

EXEC语句的关键字参数(只作用于本作业步):
ACCT,ADDRSPC,REGION,TIME,COND,PARM

8. COND=(code,operator)
功能:将code和已经执行过的任何作业步的RC进行operator的比较。如果结果为真,则跳过作业中余下的所有作业步。
可以一次定义最多8个比较,如果其中任意一个为真,系统将bypass这个step.
COND=((code,operator,stepname),(code,operator,stepname)...)
例子:
//JOB1 JOB 778,SMITH
//EXAMPLE2 EXEC PGM=DELETE
//EXAMPLE3 EXEC PGM=UPDATE,
// COND=(8,GT) #COND=(8,GT,EXAMPLE2) !DIFFERENT!
//DD1 DD DSN=INPUT

如果前面任意作业步RC<8(8>RC), bypass step EXAMPLE3
(如果前面EXAMPLE2作业步RC<8(8>RC), bypass step EXAMPLE3)

//JOB1 JOB 778,SMITH
//EXAMPLE1 EXEC PGM=STEP1
//EXAMPLE2 EXEC PGM=STEP2
//EXAMPLE3 EXEC PGM=STEP3
//EXAMPLE4 EXEC PGM=STEP4,
// COND=EVEN #EXAMPLE4这个作业步总会执行,即便前面有有作业步异常终止
//DD1 DD DSN=INPUT

没有评论:

Labels

Archive

About

我的照片
wherever i put my .emacs, that's my home.