- JCL教程
- JCL主页
- JCL - 概述
- JCL - 环境
- JCL - JOB语句
- JCL - EXEC语句
- JCL - DD语句
- JCL - 基库
- JCL - 过程
- JCL - 条件处理
- JCL - 定义数据集
- JCL - 输入/输出方法
- JCL - 运行COBOL程序
- JCL - 实用程序
- JCL - 基本排序技巧
- JCL有用资源
- JCL - 问答
- JCL - 快速指南
- JCL - 有用资源
- JCL - 讨论
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 祝你找到一位好面试官,并祝你未来的事业一切顺利!干杯 :-)