JCL 面试问题(JCL Interview Questions)
亲爱的读者,这些JCL Interview Questions专门设计用于让您了解在面试JCL时可能遇到的问题的性质。 根据我的经验,很好的面试官在你的面试中几乎不打算问任何特定的问题,通常问题从这个主题的一些基本概念开始,然后他们继续基于进一步的讨论和你回答的问题 -
在重写的JCL中为未被覆盖的那些指定DD DUMMY。
//STEP1.IN1 DD DUMMY
// DD DSN=MYDATA.URMI.IN2,DISP=SHR
// DD DUMMY
下面的代码显示了每个GDG版本的参考 -
Step1 input: (0)
Step1 output: (+1)
Step2 input: (+1)
Step2 output: (+2)
当文件在IDCAMS中用作输入时,如果文件为空,则作业完成并发出警告(返回码4)。
在JOB语句中指定RESTART = STEP2。 并包括IF-THEN-ELSE结构如下 -
//URMIIF JOB 1, CLASS=6, MSGCLASS=0, NOTIFY = &SYSUID,RESTART=STEP2
//*
//STEP1 EXEC
//STEP2 EXEC
//IF1 IF (STEP2.RC = 0 & STEP2.RC <> 0) THEN
//STEP3 EXEC
//STEP4 EXEC
//ENDIF
可以通过文件,PARM参数和SYSIN DD语句将数据传递给COBOL程序。
可以使用JOB中的符号参数指定JCL的变化部分,并且可以在PROC中指定静态部分。 例如,如果文件名对于使用PROC的每个JOB都会更改,则可以使用符号参数在JCL中对文件名的变化部分进行编码。
//IN1 DD DSN = &ID.URMI.IN1, DISP = SHR //*Coded in PROC
ID=MYDATA1 is coded in JOB1, ID = MYDATA2 is coded in JOB2 and so on
使用IEBGENER并传递SYSUT1中的现有文件。 在SYSUT2中传递新文件并提及DCB = *。SYSUT1以获得与SYSUT1数据集相同的DCB。
通过在数据集DD语句中使用UNIT和VOL串行参数。
Dummy DD语句,数据卡规范,PROC,JOB,PROC语句不能在INCLUDE成员中编码。 INLCUDE语句可以在INCLUDE成员中编码,并且可以进一步嵌套最多15个级别。
代码COND =仅在STEP2中。
在JOB/EXEC语句中使用RD参数。 需要执行RESTART的异常终止代码可以在IBM系统parmlib库的SCHEDxx成员中提及。
在JCL中使用IEBEDIT,可以运行另一个JCL的选定步骤。 在上面的JCL中,MYDATA.URMI.JOBS(INPUTJOB)中存在10步的输入JCL。 在IEBEDIT的SYSIN中指定了STEP3和STEP7,以便运行这两个步骤。
//STEP001 EXEC PGM=IEBEDIT
//SYSUT1 DD DSN=MYDATA.URMI.JOBS(INPUTJOB),DISP=SHR
//SYSUT2 DD SYSOUT=(*,INTRDR)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
EDIT TYPE=INCLUDE,STEPNAME=(STEP3,STEP7)
/*
在创建时使用DISP =(NEW,KEEP)定义。 对于GDG,如果在达到LIMIT时已使用NOEMPTY参数定义了GDG基数,则最近一代未编目。 使用EMPTY编码时,所有代都没有编目。
可以使用IDCAMS实用程序创建GDG基础。 当达到LIMIT时,EMPTY取消所有代的编目。 当未编目时,SCRATCH会物理删除该代。 (LIMIT指定GDG基础可以容纳的最大版本数)。
在SORT/ICETOOL程序中,可以使用SKIPREC = n,它跳过前n个记录,然后将其余记录复制到输出文件。
//JSTEP020 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT = *
//DFSMSG DD SYSOUT = *
//IN1 DD DSN = MYDATA.URMI.SKIPREC,DISP=SHR
//OUT1 DD SYSOUT = *
//TOOLIN DD *
COPY FROM(IN1) TO(OUT1) USING(CTL1)
/*
//CTL1CNTL DD *
SORT FIELDS = COPY
SKIPREC = 1000
/*
STARTREC和ENDREC限制指定记录号上输入文件的READ。
//URMISPLT EXEC PGM = SORT
//SORTIN DD DSN=MYDATA.URMI.FILEIN,DISP=SHR
//SORTOF01 DD DSN = MYDATA.URMI.FILEOUT1,
// DISP = (NEW,CATLG,DELETE),
// RECFM = FB, LRECL = 50
//SORTOF02 DD DSN = MYDATA.URMI.FILEOUT2,
// DISP = (NEW, CATLG, DELETE),
// RECFM = FB, LRECL = 50
//SORTOF03 DD DSN = MYDATA.URMI.FILEOUT3,
// DISP = (NEW, CATLG, DELETE),
// RECFM = FB, LRECL = 50
//SYSPRINT DD SYSOUT = *
//SYSOUT DD SYSOUT = *
//SYSUDUMP DD SYSOUT = *
//SYSIN DD *
SORT FIELDS = COPY
OUTFIL FILES = 01,ENDREC=100 //*assuming input file has 300 records.
OUTFIL FILES = 02, STARTREC = 101, ENDREC = 200
OUTFIL FILES = 03, STARTREC = 201
//*
当程序花费的时间超过指定类的时间限制时,可能会发生作业超时错误。 这称为S322异常终止。 当程序中存在一些循环错误并且没有达到完成时会遇到此错误。如果程序中处理的数据非常庞大并且需要的时间超过类限制,那么TIME参数可以编码为TIME = 1440在工作完成之前获得无限时间。
可以根据表的体积增加图像复制数据集的SPACE参数,并且可以从步骤2重新开始作业。
NOTIFY =可以在JOB语句中指定person(而不是提交者)的userid,以便用户在作业完成时获得带有返回码的通知。 但是作业日志仅存在于提交者的用户ID下的假脱机中。
SORT中的FTOV选项有助于将FB转换为VB文件。
//URMIFTOV EXEC PGM = SORT
//SORTIN DD *
123*******
4560000000
123****123
789
//SORTOF01 DD DSN = MYDATA.URMI.FILEOUT1,
// DISP = (NEW, CATLG, DELETE),
// RECFM = VB, LRECL = 54
//SORTOF02 DD DSN = MYDATA.URMI.FILEOUT2,
// DISP = (NEW, CATLG, DELETE),
// RECFM = VB, LRECL = 54
//SORTOF03 DD DSN = MYDATA.URMI.FILEOUT3,
// DISP = (NEW, CATLG, DELETE),
// RECFM = VB, LRECL = 54
//SYSPRINT DD SYSOUT = *
//SYSOUT DD SYSOUT = *
//SYSUDUMP DD SYSOUT = *
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL FNAMES = SORTOF01, FTOV, VLTRIM = C'*' //*removes trailing '*'
OUTFIL FNAMES = SORTOF02, FTOV, VLTRIM = X'40'//*removes trailing space
OUTFIL FNAMES = SORTOF03, FTOV, VLTRIM = X'00'//*removes trailing zeros
//*
JCL代表作业控制语言,它提供处理作业所需的规范。 它是一组控制语句,提供处理作业所需的规范。 它是程序和MVS操作系统之间的接口。
MVS代表多虚拟存储,它是IBM大型机系统的操作系统。
标识符是从第1列开始的两个斜杠(//)。除了两个例外之外,所有JCL语句都以标识符开头 - 对于分隔符语句,/ *从col 1开始,对于注释语句,// *从col 1开始。
输入 - >转换 - >执行 - >输出 - >硬拷贝 - >清除
JCL与PROC一起被转换为JES理解的解释文本并存储到数据集中,我们将其称为SPOOL。
当作业达到其最高优先级时,它将从作业队列中执行。 从SPOOL读取JCL,执行程序并将输出重定向到JCL中指定的相应输出目标。
指定作业SPOOL所需的信息,例如作业ID,执行优先级,作业完成时通知的用户ID。
JCL由null语句终止,该语句是可选的。 仅对于null语句代码//从第1列开始。此后的所有行都不会被执行。
根据作业所需的持续时间和资源数量,公司分配不同的工作类别。 这些可以被视为OS用于接收作业的各个调度程序。 将作业放在正确的调度程序中将有助于轻松执行作业。 有些公司在测试和生产环境中有不同的工作类别。 CLASS参数的有效值是A到Z字符和0到9数字(长度为1)。 以下是语法 - CLASS = 0到9 | A到Z.
系统将成功或失败消息(最大条件代码)发送给此参数中指定的用户。 语法 - NOTIFY =“userid |&SYSUID”
TYPRUN = SCAN检查JCL的语法错误而不执行它。
DSN参数引用新创建或现有数据集的物理数据集名称。 DSN值可以由1到8个字符长度的子名组成,以句点分隔,总长度为44个字符(字母数字)。
DISP参数用于描述数据集的状态,在正常和异常完成时作业步骤结束时的处置。 仅当在同一作业步骤(如临时数据集)中创建和删除数据集时,DD语句中才需要DISP。 语法 - DISP =(状态,正常处置,异常处置)
SPACE参数指定DASD(直接访问存储磁盘)中数据集所需的空间。 语法 - SPACE =(spcunits,(pri,sec,dir),RLSE)
数据控制块(DCB)参数详细说明了数据集的物理特征。 在作业步骤中新创建的数据集需要此参数。 LRECL是数据集中保存的每条记录的长度。 RECFM是数据集的记录格式。
临时数据集是在作业中创建和删除的数据集,并声明为DSN = && TEMP。 不要用此提及DSN参数。
代码SYSOUT = *,然后数据将被定向到假脱机。
IEFBR14没有操作实用程序。 用于将控制权返回给用户并终止。 它通常用于创建空数据集或删除现有数据集。
DISP =(NEW,PASS)。 PASS仅对正常处置有效。 当数据集由JCL中的下一个作业步骤传递和处理时使用。
IKJEFT01实用程序用于运行COBOL-DB2程序。
DSN(数据集名称)用于在DD语句中声明数据集的名称。
PEND语句用于结束流内过程。
要引用最新一代GDG,我们将引用用作(+0)。
COND =(12,LT,STEP1),它将条件读为12小于8,这是假的,所以这一步将被执行。
在SORT步骤中,提及SYSIN和SYSOUT数据集名称,并在排序卡代码SORT FIELDS = COPY中将数据从输入文件复制到输出文件。
这种说法是对的。
SORT实用程序用于根据排序卡按特定顺序对文件进行排序。
IEBUPDTE用于更新PDS。
SPACE参数指定DASD(直接访问存储磁盘)中数据集所需的空间。 语法 - SPACE =(spcunits,(pri,sec,dir),RLSE)
这种说法是对的。
接下来是什么? (What is Next ?)
此外,您可以查看您对该主题所做的过去作业,并确保您能够自信地说出这些作业。 如果你更新鲜,那么面试官不会指望你会回答非常复杂的问题,而是你必须使你的基本概念非常强大。