JCL 面试问题(JCL Interview Questions)

优质
小牛编辑
131浏览
2023-12-01

亲爱的读者,这些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 ?)

此外,您可以查看您对该主题所做的过去作业,并确保您能够自信地说出这些作业。 如果你更新鲜,那么面试官不会指望你会回答非常复杂的问题,而是你必须使你的基本概念非常强大。