JCL面试题



尊敬的读者,这些JCL面试题专为帮助您熟悉在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程序。

JCL的可变部分可以使用JOB中的符号参数指定,静态部分可以在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序列参数。

虚拟DD语句、数据卡规范、PROC、JOB、PROC语句不能在INCLUDE成员中编码。INCLUDE语句可以编码在INCLUDE成员中,并且可以嵌套多达15层。

在STEP2中编写COND = ONLY。

在JOB/EXEC语句中使用RD参数。需要执行RESTART的异常终止代码可以在IBM系统parmlib库的SCHEDxx成员中提及。

使用JCL中的IEBEDIT,可以运行另一个JCL的选定步骤。在上述JCL中,包含10个步骤的输入JCL位于MYDATA.URMI.JOBS(INPUTJOB)中。在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,如果GDG基在达到LIMIT时已使用NOEMPTY参数定义,则最近最少使用的世代将未编目。当使用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限制对指定记录号的输入文件的读取。

//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参数,并且可以从STEP2重新启动作业。

可以在JOB语句中指定NOTIFY = 用户ID(不是提交者),以便用户在作业完成后收到包含返回码的通知。但是作业日志仅存在于提交者的用户ID下的SPOOL中。

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语句都以标识符开头,但有两个例外——对于分隔符语句,/* 从第1列开始;对于注释语句,//* 从第1列开始。

输入->转换->执行->输出->硬拷贝->清除

JCL以及PROC被转换为JES可以理解的解释文本,并存储到一个我们称为SPOOL的数据集中。

当作业达到其最高优先级时,它将从作业队列中被提取以执行。JCL从SPOOL中读取,程序被执行,并且输出被重定向到JCL中指定的相应输出目标。

指定作业SPOOL所需的信息,例如作业ID、执行优先级、作业完成后要通知的用户ID。

JCL由一个可选的空语句终止。对于空语句,只从第1列编写//。所有后续行都不会执行。

根据作业所需的时间长度和资源数量,公司会分配不同的作业类别。这些可以被视为操作系统使用的各个调度程序来接收作业。将作业放置在正确的调度程序中将有助于轻松执行作业。一些公司在测试和生产环境中为作业分配不同的类别。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 = (空间单位,(主要,次要,目录),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 = (空间单位,(主要,次要,目录),RLSE)

此语句正确。

接下来是什么?

接下来你可以回顾一下你过去完成的作业,确保你能自信地谈论它们。如果你刚毕业,面试官并不期望你会回答非常复杂的问题,而是要确保你的基本概念非常扎实。

其次,如果你无法回答一些问题,其实并不重要,重要的是你回答的任何问题,你都必须自信地回答。所以在面试中要充满自信。Tutorialspoint 祝你找到一位好面试官,并祝你未来的事业一切顺利!干杯 :-)

jcl_questions_answers.htm
广告