JCL I面试问题

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

数据可以通过文件、PARM 参数和 SYSIN DD 语句传递到 COBOL 程序。

代码 COND = 仅在 STEP2 中。

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

在 JCL 中使用 IEBEDIT,可以运行另一个 JCL 的选定步骤。 在上面的 JCL 中,具有 10 个步骤的输入 JCL 存在于 MYDATA.URMI.JOBS(INPUTJOB) 中。 STEP3 和 STEP7 在 IEBEDIT 的 SYSIN 中指定,以便运行这两个步骤。

//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 编码时,所有代均未编目。

GDG 基础可以使用 IDCAMS 实用程序创建。 当达到 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参数,并可以从步骤2重新启动作业。

NOTIFY = 可以在 JOB 语句中指定人员(而非提交者)的用户 ID,以便用户在作业完成时收到包含返回代码的通知。 但作业日志仅存在于提交者用户 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
//*

MVS 代表多重虚拟存储,它是 IBM 大型机系统的操作系统。

标识符是从第 1 列开始的两个斜杠 (//)。 所有 JCL 语句都以标识符开头,但有两个例外 - 对于分隔符语句,/* 从第 1 列开始,对于注释语句,//* 从第 1 列开始。

Input −> Conversion −> Execution −> Output −> Hard copy −> Purge

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

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

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

JCL 由可选的 null 语句终止。 // 对于空语句代码仅从第 1 列开始。此后的所有行都不会被执行。

系统向该参数中指定的用户发送成功或失败消息(最大条件代码)。 语法 − NOTIFY = "userid | &SYSUID"

TYPRUN = SCAN 检查 JCL 的语法错误而不执行它。

DSN参数是指新创建的或现有数据集的物理数据集名称。 DSN 值可以由子名称组成,每个子名称长度为 1 到 8 个字符,以句点分隔,总长度为 44 个字符(字母数字)。

DISP参数用于描述数据集的状态、作业步骤结束时正常完成和异常完成时的处理。 仅当在同一作业步骤中创建和删除数据集(如临时数据集)时,DD 语句中才不需要 DISP。 语法 − DISP = (status, normal-disposition, abnormal-disposition)

SPACE参数指定DASD(直接访问存储磁盘)中数据集所需的空间。 句法 − SPACE = (spcunits, (pri, sec, dir), RLSE)

数据控制块(DCB)参数详细描述了数据集的物理特征。 对于作业步骤中新创建的数据集,此参数是必需的。 LRECL 是数据集中保存的每条记录的长度。 RECFM是数据集的记录格式。

临时数据集是在作业中创建和删除的数据集,声明为 DSN=&&TEMP。 不要在此提及 DSN 参数。

代码SYSOUT = *,则数据将被定向到spool。

IEFBR14 不是操作实用程序。 用于将控制权返回给用户并终止。 它通常用于创建空数据集或删除现有数据集。

显示=(新,通过)。 PASS 仅对正常处置有效。 当数据集要由 JCL 中的下一个作业步骤传递和处理时,将使用此选项。

IKJEFT01 实用程序用于运行 COBOL-DB2 程序。

DSN(Dataset Name)用于在DD语句中声明数据集的名称。

PEND语句用于结束流内过程。

为了引用最新一代的 GDG,我们使用引用作为 (+0)。

COND=(12,LT,STEP1),读取条件为 12 小于 8,为 false,因此执行该步骤。

在排序步骤中提及 SYSIN 和 SYSOUT 数据集名称并在排序卡代码 SORT FIELDS=COPY 中将数据从输入文件复制到输出文件。

此说法属实。

排序实用程序用于根据排序卡按特定顺序对文件进行排序。

IEBUPDTE 用于更新 PDS。

SPACE参数指定DASD(直接访问存储磁盘)中数据集所需的空间。 语法+ 空间 = (spcunits, (pri, sec, dir), RLSE)

此说法属实。