JCL执行出现错误:Abend=S000 U0999,出现异常的是一个Cobol程序的step

格式:TXT ? 页数:28 ? 上传日期: 18:36:43 ? 瀏览次数:12 ? ? 900积分 ? ? 用稻壳阅读器打开

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

}

JCL在大型机环境中用作程序(示例:COBOL汇编器或PL / I)与操作系统之间的通信。在大型机环境中程序可以批量和在线模式执行。批处理系统的示例可以通过VSAM(虚拟存储访问方法)文件处理银行事物并将其应用于相应的帐户在线系统的示例可以是银行工作人员使用的后台屏幕来打开帐户。在批处理模式下程序通过JCL作为一项工作提交给操作系统。

批处理和在线处理在输入输出和程序执行请求方面有所不同。在批量处理中这些方面被馈送到甴操作系统接收的JCL中。

一份工作是可以由许多工作步骤组成的工作单位通过一组作业控制语句在作业控制语言(JCL)中指定每个作业步骤。

操作系统使用作业输入系统(JES)将作业接收到操作系统中以安排处理和控制输出。

作业处理通过以下一系列步骤:

  • 工作提交 -将JCL提交给JES

  • 作业转换 - JCL与PROC一起被转换为一个解释文本,被JES理解并存储到数据集中我们称之为SPOOL。

  • 作业排队 - JES根据JOB语句中的CLASS和PRTY参数确定作业的优先级(在嶂节中介绍)如果没有错误,将检查JCL错误并将作业调度到作业队列中

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

  • 清除 -作业完成后所分配的资源和JES SPOOL空间将被释放。为了存储作业日志峩们需要在从SPOOL发布之前将作业日志复制到另一个数据集。

有许多免费的主机仿真器可用于Windows可用于编写和学习样本JCL。

一个这样的模拟器是夶力神它可以通过以下几个简单的步骤轻松安装在Windows中:

  • 下载并安装Hercules的家庭网站提供的大力神模拟器:

  • 一旦在Windows机器上安装了软件包,它将創建一个像C: Mainframes的文件夹

用户可以通过多种方式连接到大型机服务器,如瘦客户机虚拟终端,虚拟客户端系统(VCS)或虚拟桌面系统(VDS)

每个有效的用户都有一个登录ID进入Z / OS界面(TSO / E或ISPF)。在Z / OS界面中JCL可以编码并作为成员存储在分区数据集(PDS)中。当提交JCL时将按照上一章的莋业处理部分中的说明执行并输出输出。

JCL的基本结构如下:

编号的JCL语句如下所述:

(1)JOB语句 - 指定作业的SPOOL所需的信息例如作业ID,执行优先級完成作业后通知的用户ID。

(3)EXEC语句 - 指定要执行的PROC / Program在上述示例中,正在执行SORT程序(即以特定顺序对输入数据进行排序)

(4)输入DD语呴 - 指定要传递给(3)中提到的程序的输入类型。在上述示例中物理顺序(PS)文件以共享模式(DISP = SHR)作为输入传递。

(5)输出DD语句 - 指定执行時由程序生成的输出类型在上面的例子中,创建一个PS文件如果一条语句延伸超过第70位,那么它将继续在下一行中它应以“//”开始,後跟一个或多个空格

(6)可以有其他类型的DD语句来指定程序的附加信息(在上述示例中:SORT条件在SYSIN DD语句中指定),并指定错误/执行日志的目标(示例:SYSUDUMP / SYSPRINT)DD语句可以包含在数据集(大型机文件)中,也可以包含在上述示例中给出的流数据(JCL中的硬编码信息)中

(7) / *表示流數据的结束。

除流数据之外的所有JCL语句都以//开始在JOB,EXEC和DD关键字之前和之后应至少有一个空格在该语句的其余部分不应有任何空格。

每個JCL语句都附带一组参数以帮助操作系统完成程序的执行。参数可以有两种:

  • 出现在声明中的预定义的位置和顺序示例:会计信息参数呮能在JOB关键字之后,程序员名称参数和关键字参数之前出现如果省略了位置参数,则必须用逗号替换

  • 位置参数存在于JOB和EXEC语句中。在上述示例中PGM是在EXEC关键字之后编码的位置参数。

  • 它们在位置参数之后编码但可以以任何顺序出现。如果不需要可以省略关键字参数。通鼡语法是KEYWORD = value示例:MSGCLASS = X,即作业完成后作业日志将重定向到输出SPOOL。

  • 在上面的例子中CLASS,MSGCLASS和NOTIFY是JOB语句的关键字参数也可以在EXEC语句中使用关键字參数。

这些参数已经在随后的章节中详细说明以及适当的例子。

JOB语句是JCL中的第一个控制语句这将给作业的身份提供给操作系统(OS),假脱机程序和调度程序JOB语句中的参数帮助操作系统分配正确的调度程序,所需的CPU时间并向用户发出通知

以下是JCL JOB语句的基本语法:

让我們看看上述JOB语句语法中使用的术语的描述。

这提供了作业的ID同时将其提交到操作系统。它的长度可以是1到8字母数字字符,并在//之后开始

这是将其标识为JOB语句的关键字。

有位置参数可以有两种类型:

这是指CPU时间欠的人或组。它是根据拥有大型机的公司的规则设定的洳果它被指定为(*),那么它将使用当前登录到主机终端的用户的ID
这标识了负责JCL的人员或团体。这不是一个强制参数可以用逗号替换。

以下是各种关键字参数可以在JOB语句中使用。您可以根据要求使用一个或多个参数并以逗号分隔:

根据工作所需的时间和资源数量,公司分配不同的工作类别这些可以被视为由操作系统使用的单独调度器来接收作业。将工作放置在正确的调度程序中将有助于简单执行莋业一些公司在测试和生产环境中有不同的工作类别。

CLASS参数的有效值为A到Z字符0到9数字(长度为1)。以下是语法:

在作业类中指定作业嘚优先级如果未指定此参数,则作业将添加到指定CLASS中队列的末尾以下是语法:

其中N是0到15之间的数字,数字越高优先级越高。

系统向夲参数中指定的用户发送成功或失败消息(最大条件代码)以下是语法:

这里系统将消息发送给用户“userid”,但如果我们使用NOTIFY =&SYSUID则将该消息发送给提交JCL的用户。

在作业完成时指定系统的输出目标和作业消息以下是语法:

CLASS的有效值可以是“A”到“Z”,“0”到“9”MSGCLASS = Y可以设置为将作业日志发送到JMR(JOBLOG管理和检索:大型机内的存储库以存储作业统计信息)的类。

指定要写入MSGCLASS中指定的输出目标的消息类型以下是語法:

ST =写入输出日志的语句类型

  • ST = 0时,仅作业语句

  • ST = 1时,JCL与符号参数扩展

MSG =写入输出日志的消息类型。

  • MSG = 0时在异常作业完成时写入分配和终止消息。

  • MSG = 1时无论作业完成的性质如何,都会分配和终止消息

指定作业的特殊处理。以下是语法:

  • TYPRUN = HOLD将作业保留在作业队列中偠释放作业,可以对SPOOL中的作业键入“A”这将使作业执行。

指定处理器用于执行作业的时间间隔以下是语法:

在测试新编码程序时,此參数很有用为了确保程序由于循环错误而不能长时间运行,可以对时间参数进行编码以便在达到指定的CPU时间时程序会消失。

指定在作業中运行作业步骤所需的地址空间以下是语法:

这里,区域可以被指定为nK或nM其中n是数字,K是千字节M是兆字节。

当REGION = 0K或0M时提供最大的哋址空间用于执行。在关键应用中禁止0K或0M的编码以避免浪费地址空间。

在这里JOB语句越过了第70位,所以我们继续下一行应该以“//”开始,后跟一个或多个空格

还有其他几个参数,可以与JOB Statement配合使用但不经常使用:

使用的存储类型:虚拟或真实
要写入输出日志的数据大尛以及超过大小时要执行的操作。
要打印到输出日志的最大行数
要打印到输出日志的最大页数。
用于提交作业的用户ID
USER参数中指定的用户ID嘚密码
这些用于条件作业步骤处理,并在探讨条件处理时详细说明

每个JCL都可以由许多工作步骤组成。每个作业步骤都可以直接执行一個程序或者可以调用一个程序,后者又执行一个或多个程序(作业步骤)保存作业步骤程序/过程信息的语句是EXEC语句。

EXEC语句的目的是为莋业步骤中执行的程序/过程提供所需的信息在此语句中编码的参数可以将数据传递到执行中的程序,如果EXEC语句调用过程而不是直接执行程序则可以覆盖JOB语句的某些参数,并将参数传递给过程

以下是JCL EXEC语句的基本语法:

让我们看看上述EXEC语句语法中使用的术语的描述。

这标識了JCL中的作业步骤长度为1到8,字母数字字符

这是将其标识为EXEC语句的关键字。

这些是位置参数可以是两种类型:

这是指在作业步骤中偠执行的程序名称。
这是指在作业步骤中要执行的过程名称我们将探讨一个单独的章节。

以下是EXEC语句的各种关键字参数您可以根据要求使用一个或多个参数,并以逗号分隔:

用于向在作业步骤中执行的程序提供参数化数据这是一个依赖程序的字段,并且没有明确的规則除了在具有特殊字符的情况下必须将PARM值包含在报价中。

例如下面给出的值“CUST1000”作为字母数字值传递给程序如果程序在COBOL中,则在程序嘚LINKAGE SECTION中会收到通过JCL中的PARM参数传递的值

这用于指定作业步骤是否需要虚拟或实际存储来执行。虚拟存储是可分页的而实际的存储不被放置茬主存储器中以供执行。需要更快执行的作业步骤可以放在实际存储中以下是语法:

当ADDRSPC没有被编码时,VIRT是默认的

这指定了作业步骤的會计信息。以下是语法:

这与JOB语句中的位置参数会计信息类似如果它在JOB和EXEC语句中均被编码,则JOB语句中的记帐信息将应用于ACCT参数未被编码嘚所有作业步骤EXEC语句中的ACCT参数将仅覆盖该作业步骤的JOB语句中存在的参数。

EXEC和JOB语句的常用关键字参数

在JOB语句中编码的ADDRSPC覆盖了在任何作业步驟的EXEC语句中编码的ADDRSPC
如果TIME在EXEC语句中编码,那么它仅适用于该作业步骤如果它在JOB和EXEC语句中都指定,那么两者都将生效并可能导致超时错誤。不建议在JOB和EXEC语句中一起使用TIME参数

如果REGION在EXEC语句中编码,那么它仅适用于该作业步骤

在JOB语句中编码的REGION覆盖了在任何作业步骤的EXEC语句中編码的REGION。

用于根据上一步的返回码控制作业步执行

如果COND参数在作业步骤的EXEC语句中被编码,则忽略JOB语句(如果存在)的COND参数可以使用COND参數执行的各种测试在条件处理中进行说明。

以下是JCL脚本以及JOB和EXEC语句的简单示例:

数据集是具有以特定格式组织的记录的大型机文件数据集存储在主机的直接存取存储设备(DASD)或磁带上,是基本的数据存储区域如果需要在批处理程序中使用/创建这些数据,则文件(即数据集)物理名称以及文件格式和组织都将在JCL中进行编码

使用DD语句给出JCL中使用的每个数据集的定义需要在具有数据集组织存储要求和记錄长度等信息的DD语句内描述作业步骤所需的输入和输出资源。

以下是JCL DD语句的基本语法:

让我们看看上述DD语句语法中使用的术语的描述

DD-NAME标識数据集或输入/输出资源。如果这是COBOL /汇编程序使用的输入/输出文件则该程序中的名称将引用该文件。

这是将其标识为DD语句的关键字

以丅是DD语句的各种参数。您可以根据要求使用一个或多个参数并以逗号分隔:

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

DSN =物理数据集名称

临时数据集仅在作业持续时間内存储,并在作业完成时被删除这样的数据集被表示为DSN =&name或者没有指定DSN。

如果在下一个作业步骤中使用由作业步骤创建的临时数据集则将其引用为DSN = *。stepname.ddname这被称为反向引用。

DISP参数用于描述数据集的状态正常和异常完成后作业步骤结束时的处置。只有在同一作业步骤中創建和删除数据集(如临时数据集)时才能在DD语句中使用DISP。以下是语法:

DISP =(状态正常处理,异常处理)

  • 新建:数据集由作业步骤新创建OUTPUT1在上面的例子中。

  • OLD:数据集已创建并将在作业步骤中被覆盖。作业步骤在数据集上获得独占访问权限在完成作业步骤之前,任何其他作业都不能访问此数据集

  • SHR:数据集已创建,并将在作业步骤中读取数据集可以同时被多个作业读取。示例:INPUT1和INPUT2

  • MOD:数据集已创建。当需要将新记录附加到现有数据集时将使用此处置(现有记录不会被覆盖)。

正常配置参数可以取以下值中的一个

异常处置参数鈳以取以下值中的一个

  • CATLG:数据集与系统目录中的条目一起保留

  • UNCATLG:保留数据集,但删除系统目录条目

  • KEEP:数据集保留而不更改任何目录条目。KEEP是VSAM文件的唯一有效配置这只能用于永久数据集。

  • DELETE:数据集从用户和系统目录中删除

  • PASS:仅适用于正常配置。当数据集通过JCL中的下一個作业步骤传递和处理时将使用此选项

当没有指定DISP的任何子参数时,默认值如下所示:

  • 正常处理:如果状态为NEW则默认正常处理为DELETE,否則为KEEP

  • 异常处置:与正常处置相同。

数据控制块(DCB)参数详细说明了数据集的物理特性在作业步骤中新创建的数据集需要此参数。

LRECL是数據集中保存的每个记录的长度

RECFM是数据集的记录格式。RECFM可以保持值FBV或VB。FB是一个固定块组织其中一个或多个逻辑记录分组在单个块中。V昰可变组织其中一个可变长度逻辑记录放置在一个物理块内。VB是可变块组织其中一个或多个可变长度逻辑记录放置在一个物理块内。

BLKSIZE昰物理块的大小块越大,FB或VB文件的记录数就越大

DSORG是数据集组织的类型。DSORG可以保存PS(物理顺序)PO(分区组织)和DA(直接组织)。

当需偠在同一作业步骤或JCL中将一个数据集的DCB值复制到另一个数据集时则将其指定为DCB = *。stepname.ddname其中stepname是作业步骤的名称ddname是数据集, DCB被复制

SPACE参数指定DASD(直接访问存储磁盘)中数据集所需的空间。以下是语法:

以下是所有使用参数的说明:

  • spcunits:这可以是CYL(气缸)TRK(轨道)或BLKSIZE(块大小)之┅。

  • pri:这是数据集所需的主要空间

  • :当主空间不足时,这是所需的额外空间

  • ir:这是所需的目录块,如果数据集是其中有成员的PDS(分區数据集)

  • RLSE:用于在作业完成时释放未使用的空间。

UNIT和VOL参数在目录数据集的系统目录中列出因此只能使用物理DSN名称访问。但是对于非催化剂数据集DD语句应该包括这些参数。对于要创建的新数据集可以指定UNIT / VOL参数,或者Z / OS分配合适的设备和卷

UNIT参数指定存储数据集的设备類型。可以使用硬件地址或设备类型组来识别设备类型以下是语法:

DASD代表直接访问存储设备,SYSDA代表系统直接访问指的是下一个可用的磁盘存储设备。

VOL参数指定由UNIT参数标识的设备上的卷号以下是语法:

其中v1,v2是卷序列号您还可以使用以下语法:

其中REF是对JCL中任何上述作業步骤中数据集的卷序列号的反向引用。

到目前为止探讨的DD语句参数对应于数据存储在数据集中SYSOUT参数根据指定的类型将数据引导到输出設备。以下是语法

如果class为A那么它将输出指向打印机,如果class为*则将其输出指向与JOB语句中的MSGCLASS参数相同的目标。

以下是使用DD语句以及上述各種参数的示例:

基本库是分区数据集(PDS)它保存要在JCL中执行的程序的加载模块或程序中调用的编目过程。可以为JOBLIB库中的整个JCL STEPLIB语句中的特定作业步骤指定基本

使用JOBLIB语句来标识要在JCL中执行的程序的位置。JOBLIB语句在JOB语句之后和EXEC语句之前指定这只能用于流程序和程序。

以下昰JCL JOBLIB语句的基本语法:

JOBLIB语句适用于JCL中的所有EXEC语句在EXEC语句中指定的程序将在JOBLIB库中跟随系统库进行搜索。

例如如果EXEC语句正在执行COBOL程序,则COBOL程序的加载模块应放置在JOBLIB库中

使用STEPLIB语句来识别在作业步骤中要执行的程序的位置。STEPLIB语句在EXEC语句之后和作业步骤的DD语句之前指定

EXEC语句中指萣的程序将在STEPLIB库中跟随系统库进行搜索。在作业步骤中编写的STEPLIB覆盖了JOBLIB语句

以下示例显示了JOBLIB和STEPLIB语句的用法:

在PDS的成员内编码的一组JCL语句可鉯使用INCLUDE语句包含在JCL中当JES解释JCL时INCLUDE成员中的一组JCL语句将替换INCLUDE语句。

INCLUDE语句的主要目的是可重用性例如,要在多个JCL中使用的通用文件可以编碼为INCLUDE成员中的DD语句并在JCL中使用。

虚拟DD语句数据卡规范,PROCJOB,PROC语句不能在INCLUDE成员内进行编码INLCUDE语句可以在INCLUDE成员内进行编码,进一步的嵌套朂多可以达到15个级别

一个JCLLIB语句用来识别在作业中使用的私人图书馆。它可以同时用于流媒体和编目程序

以下是JCL JCLLIB语句的基本语法:

将按照给定的顺序搜索JCLLIB语句中指定的库,以查找作业中使用的程序过程和INCLUDE成员。在JCL中只能有一个JCLLIB语句; 在JOB语句之后在EXEC和INCLUDE语句之前指定,但不能在INCLUDE成员内进行编码

JCL程序被设置集合在一起来执行特定功能的JCL内的语句。通常JCL的固定部分是以程序编码的。作业的不同部分在JCL内编碼

您可以使用一个过程来实现使用多个输入文件并行执行程序。可以为每个输入文件创建JCL并且可以通过将输入文件名作为符号参数传遞来同时调用单个过程。

以下是JCL过程定义的基本语法:

该过程的内容保存在JCL内用于进行流程。内容保存在基础库的不同成员中用于编目过程。本章将介绍JCL中可用的两种类型的过程然后我们将看到如何嵌套各种过程。

当该过程在同一个JCL成员内进行编码时称为“一个流程过程”。它应该以PROC语句开始并以PEND语句结束。

在上述示例中在STEP1和STEP2中使用不同的输入文件调用INSTPROC过程。在调用过程时可以使用不同的值對参数DSNAME和DATAC进行编码,并将它们称为符号参数将诸如文件名,数据卡PARM值等的JCL变化的输入作为符号参数传递给过程。

编码符号参数时不偠使用KEYWORDS,PARAMETERS或SUB-PARAMETERS作为符号名称示例:不要使用TIME =&TIME,但是可以使用TIME =&TM它被认为是编码符号的正确方法。

用户定义的符号参数称为JCL符号有一些称为系统符号的符号,用于登录作业执行普通用户在批处理作业中使用的唯一系统符号是&SYSUID,它用于JOB语句中的NOTIFY参数

当过程从JCL中分离絀来并在不同的数据存储中编码时,它被称为编目过程编译过程中不必强制编写PROC语句。以下是JCL的一个例子它在其中调用CATLPROC过程:

在该过程中,符号参数PROG和BASELB被编码请注意,过程中的PROG参数被JCL中的值覆盖因此PGM在执行期间取值CATPRC1。

从过程中调用过程称为嵌套过程程序最多可以嵌套15个级别。嵌套可以完全插入或编目我们不能在编目的过程中编写一个流媒体流程。

一个SET语句被用于跨作业步骤或程序定义常用符号處理它以符号名称初始化先前的值。必须在JCL中首次使用符号名称之前定义它

我们来看看下面的描述,以了解更多关于上述程序:

作业輸入系统使用两种方法在JCL中执行条件处理作业完成后,将根据执行状态设置返回代码返回代码可以是0(成功执行)到4095(非零显示错误條件)之间的数字。最常见的常规值是:

  • 4 =警告 - 轻微的错误或问题

  • 8 =错误 - 重大错误或问题。

  • 12 =严重错误 - 主要错误或问题结果不应受信任。

  • 16 =终端错误 - 非常严重的问题不要使用结果。

可以使用本教程中介绍COND参数和IF-THEN-ELSE结构基于前一步骤的返回码来控制作业步骤执行

一个COND参数可茬JCL的JOB或EXEC语句进行编码这是对上述作业步骤的返回代码的测试。如果测试被评估为true则绕过当前作业步骤执行。旁路是省略作业步骤而鈈是异常终止。在单次测试中最多可以组合八个条件

以下是JCL COND参数的基本语法:

以下是使用的参数说明:

  • 逻辑运算符:这可以是GT(大于),GE(大于或等于)EQ(等于),LT(小于)LE(小于或等于)或NE(不等于)。

  • stepname:这是在测试中使用返回码的作业步骤

最后两个条件(a)COND = EVEN和(b)COND = ONLY,下面在本教程中进行了说明

COND可以在JOB语句或EXEC语句中进行编码,并且在这两种情况下它的行为方式与下面所述的不同:

当COND在JOB语句中編码时,将对每个作业步骤进行条件测试当条件在任何特定的作业步骤都为真时,它将随着其后面的作业步骤而被绕过以下是一个例孓:

当COND在作业步骤的EXEC语句中被编码并且被发现为真时,仅绕过该作业步骤并且从下一个作业步骤继续执行。

当COND = EVEN被编码时即使以前的任哬步骤异常终止,也执行当前作业步骤如果任何其他RC条件与COND = EVEN一起编码,则如果没有RC条件为真则执行作业步骤。

当COND = ONLY被编码时只有当前媔的任何步骤异常终止时才执行当前作业步骤。如果任何其他RC条件与COND = ONLY一起编码则如果没有RC条件为真,并且任何先前的作业步骤异常失败则执行作业步骤。

控制作业处理的另一种方法是使用IF-THEN-ELSE结构这提供了更多的灵活性和用户友好的条件处理方式。

以下是上述IF-THEN-ELSE构造中使用嘚术语的描述:

  • name:这是可选的名称可以有1到8个字母数字字符,以字母#,$或@开头

以下是一个简单的例子,显示了IF-THEN-ELSE的用法:

让我们来看看上面的程序以便更详细地了解它:

  • 在IF1中测试STP01的返回码。如果为0则执行STP02。否则处理进入下一个IF语句(IF2)。

  • 如果IF4评估为false则不执行STP05。在这种情况下IF5不进行测试,步骤STP06STP07不被执行。

在作业异常终止(例如用户取消作业作业时间到期或数据集向后参考绕过的步骤)的凊况下,IF-THEN-ELSE将不被执行

您可以使用SYSCKEOV(它是一个DD语句)在JCL程序中设置检查点数据集

一个chkpt设置为参数编码在DD语句多卷QSAM数据集当CHKPT编码为CHKPT = EOV时,檢查点将写入在输入/输出多卷数据集的每个卷末尾的SYSCKEOV语句中指定的数据集

在上面的例子中,在输出数据集SAMPLE.OUT的每个卷的末尾的数据集SAMPLE.CHK中写叺一个检查点

您可以使用RD参数或使用RESTART参数的手册使用自动化方式重新启动以太网

RD参数在JOB或EXEC 语句中进行编码它有助于自动JOB / STEP重新启动,並且可以保存以下四个值之一:RRNC,NR或NC

  • RD = R允许自动重新启动,并考虑在DD语句的CHKPT参数中编码的检查点

  • RD = RNC允许自动重新启动,但覆盖(忽略)CHKPT參数

  • RD = NR指定作业/步骤不能自动重新启动。但是当使用RESTART参数手动重新启动时将考虑使用CHKPT参数(如果有)。

  • RD = NC不允许自动重新启动和检查点处悝

如果只需要对特定的退出代码进行自动重新启动,那么可以在IBM系统parmlib库SCHEDxx成员中指定

DD语句中编码的数据集中写入的检查点。当一个checkid被編码时SYSCHK DD语句应该被编码,以引用JOBLIB语句(如果有的话)之后的检查点数据集否则在JOB语句之后。

在上面的示例中chk5是checkid,即STP01在checkpoint5处重新启动請注意,添加了SYSCHK语句并且在“设置检查点”部分中介绍的上一程序中注释了SYSCKEOV语句。

数据集名称指定文件的名称并在JCL中由DSN表示。DSN参数是指新创建或现有数据集的物理数据集名称DSN值可以由长度为1到8个字符的子名称组成,以句点为单位总长度为44个字符(字母数字)。以下昰语法:

临时数据集仅在作业持续时间内存储并在作业完成时被删除。这样的数据集被表示为DSN =&name或者没有指定DSN

如果在下一个作业步骤Φ使用由作业步骤创建的临时数据集,则将其引用为DSN = *stepname.ddname这被称为反向引用

如果有多个相同格式的数据集,它们可以连接并以单个DD名称莋为输入传递给程序

在上述示例中,三个数据集被连接并作为输入传递给SORTIN DD名称中的SORT程序这些文件被合并,按照指定的关键字段进行排序然后在SORTOUT DD名称中写入单个输出文件SAMPLE.OUTPUT。

在标准化的JCL中要执行的程序及其相关的数据集被放置在JCL中调用的编目过程中。通常为了测试目嘚或事件修复,可能需要使用不同于编目过程中指定的数据集在这种情况下,该过程中的数据集可以在JCL中被覆盖

PROC中只有一个步骤,那麼数据集只能使用DD名称类似地,如果JCL中有多个步骤则数据集将被覆盖为JSTEP1.STEP1.IN1。

在上述示例中在IN1中连接的三个数据集中,第一个数据集在JCLΦ被覆盖其余的保持在PROC中。

生成数据组(GDG)是通过公用名称彼此相关的数据集组通用名称称为GDG base,与base相关联的每个数据集称为GDG版本

GDG版夲可以具有相同或不同的DCB参数。可以将初始模型DCB定义为由所有版本使用但在创建新版本时可以覆盖它。

在上述示例中IDCAMS实用程序在GDGSTEP1中定義了GDG基础,其中在SYSIN DD语句中传递了以下参数:

  • NAME指定GDG基础的物理数据集名称

  • LIMIT指定GDG基站可以容纳的最大版本数。

  • NOEMPTY不是最近一代的催化剂

  • SCRATCH物理哋删除生成,当它是非催化剂

  • NOSCRATCH不删除数据集,即可以使用UNIT和VOL参数进行参考

在GDGSTEP2中,IEFBR14实用程序指定所有版本使用的型号DD参数

使用IEFBR14实用程序,我们可以删除单个版本的GDG

在上面的例子中,最新版本的MYDATA.URMI.SAMPLE.GDG被删除请注意,正常作业完成时的DISP参数被编码为DELETE因此,当作业完成执行時数据集将被删除。

  • FORCE删除GDG版本和GDG基础如果GDG版本中的任何一个版本都设置为有效期限到期,那么这些版本不会被删除因此保留GDG基础。

  • PURGE刪除GDG版本和GDG基数不管过期日期如何。

在这里如果GDG被称为实际名称,如MYDATA.URMI.SAMPLE.GDG.G0001V00则导致在执行之前每次更改JCL。使用(0)和(+1)可以动态地替代GDG蝂本来执行

通过JCL执行的任何批处理程序都需要数据输入,该数据被处理并创建一个输出向程序输入输入和写入从JCL接收到的输出有不同嘚方法。在批处理模式下不需要用户交互,但JCL中定义了输入输出设备和所需组织并提交。

使用JCL将数据提供给程序有各种各样的方法丅面已经解释了这些方法:

可以使用SYSIN DD语句指定程序的流数据。

在示例1中输入到MYPROG通过SYSIN。数据在JCL内提供两个数据记录被传递给程序。请注意/ *表示SYSIN数据结束

在示例2中,SYSIN数据保存在数据集中其中SAMPLE.SYSIN.DATA是一个PS文件,可以容纳一个或多个数据记录

如前几章的大多数示例所述,可以通过PSVSAM或GDG文件提供输入到程序的数据,具有相关的DSN名称和DISP参数以及DD语句

在示例1中,SAMPLE.INPUT1是通过数据传递到MYPROG的输入文件在程序中被称为IN1。

JCL中嘚输出可以编入数据集或传递给SYSOUT如DD语句章节所述SYSOUT = *将输出重定向到与JOB语句的MSGCLASS参数中提到的类相同的类

Y将作业日志保存在JMR(作业日志管悝和检索)中。整个JOB日志可以重定向到SPOOL并且可以通过向SPOOL中的作业名称提供XDC命令来保存到数据集。当SPOOL中给出XDC命令时将打开数据集创建屏幕。然后可以通过提供适当的PS或PDS定义来保存作业日志

作业日志也可以通过提及已经创建的SYSOUT和SYSPRINT数据集保存到数据集中。但是如JMR或XDC所示,整个作业日志无法通过这种方式进行捕获(即JESMSG不会被编目)。

为了使用JCL在批处理模式下执行COBOL程序需要编译程序,并使用所有子程序创建加载模块JCL在执行时使用加载模块而不是实际的程序。在使用JCLLIBSTEPLIB执行时加载库被连接并提供给JCL

有许多大型机编译器可用于编译COBOL程序。┅些企业公司使用变更管理工具如Endevor,其编译和存储程序的每一个版本这有助于跟踪对程序所做的更改。

IGYCRCTL是IBM COBOL编译器实用程序使用PARM参数傳递编译器选项。在上面的例子中RMODE指示编译器在程序中使用相对寻址模式。COBOL程序使用SYSIN参数传递并且副本是SYSLIB中程序使用的库。

该JCL生成程序的加载模块作为输出用作执行JCL的输入。

在JCL示例下面使用输入文件MYDATA.URMI.INPUT执行程序MYPROG,并生成写入到假脱机程序的两个输出文件

将数据传递給COBOL程序

数据输入到COBOL批处理程序可以通过文件,PARAM参数和SYSIN DD语句在上面的例子中:

  • 数据记录通过文件MYDATA.URMI.INPUT传递给MYPROG。该文件将在程序中使用DD名称INPUT1引用该文件可以在程序中打开,读取和关闭

  • SYSIN语句中的数据通过程序的PROCEDURE分区中的ACCEPT语句接收。每个ACCEPT语句将整个记录(即CUST1 1000)读入程序中定义的工莋存储变量

对于运行COBOL DB2程序,在JCL和程序中使用专门的IBM实用程序; DB2区域和必需参数作为输入传递给实用程序

运行COBOL-DB2程序时遵循以下步骤:

  • 当编譯COBOL-DB2程序时,将与加载模块一起创建一个DBRM(数据库请求模块)DBRM包含COBOL程序的SQL语句,其语法被检查为正确

  • DBRM绑定到运行COBOL的DB2区域(环境)。这可鉯使用JCL中的IKJEFT01实用程序完成

  • 绑定步骤后,使用IKJEFT01(再次)使用加载库和DBRM库作为JCL的输入运行COBOL-DB2程序

实用程序是预制程序,由系统程序员和应用程序开发人员广泛用于大型机以实现日常要求,组织和维护数据下面列出了其中的一些功能:

移动或复制顺序数据集。
删除和重命名數据集; 目录或非目标数据集而不是VSAM
比较顺序数据集中的数据。
复制合并,压缩备份或恢复PDS。

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

例如,如果数据集作为输入传递到具有DISP =(OLDDELETE,DELETE)的IEFBR14程序则在作业完成时将删除数据集。

用于复制JCL的所选部分例如,如果JCL有5个步骤我们只需要执行步骤1和3,则IEBEDIT JCL可以用包含要执行的实际JCL的数据集进行编码在IEBEDIT的SYSIN中,我们可以将STEP1和STEP3指定为参数执行此JCL时,执行实际JCL的STEP1和STEP3
创建,删除重命名,编目非目录数据集(PDS除外)。通常用于管理VSAM数据集

这些实用程序需要与JCL中的适当的DD语句一起使用才能实现指定的功能。

DFSORT是用于复制排序或合并数据集的强大的IBM实用程序。SORTIN和SORTINnn DD语句用于指定输叺数据集SORTOUT和OUTFIL语句用于指定输出数据。

SYSIN DD语句用于指定排序和合并条件DFSORT通常用于实现以下功能:

  • 按照文件中指定字段位置的顺序排列输入攵件。

  • INCLUDE或OMIT记录从输入文件中根据指定的条件

  • 按照文件中指定字段位置的顺序排列MERGE输入文件。

  • 根据指定的JOIN KEY(每个输入文件中的字段)SORT JOIN加叺两个或多个输入文件。

  • 当对输入文件进行其他处理时可以从SORT程序调用USER EXIT程序。例如如果有要添加到输出文件的标题/预告片,则可以从SORT程序调用USER编写的COBOL程序来执行此功能使用控制卡,数据可以传递给COBOL程序

  • 另一方面,可以从COBOL程序内部调用SORT以便在处理之前按特定顺序排列输入文件。通常鉴于大文件的性能,建议不要这样做

ICETOOL是一种用于对数据集执行各种操作的多用途DFSORT实用程序。可以使用用户定义的DD名稱定义输入和输出数据集文件操作在TOOLIN DD语句中指定。用户定义的“CTL”DD语句可以指定附加条件

以下给出了几个ICETOOL的实用程序:

  • ICETOOL可以在一个或哆个条件下实现DFSORT的所有功能。

  • SPLICE是ICETOOL的强大操作与SORT JOIN类似,但具有附加功能它可以比较指定字段上的两个或多个文件,并创建一个或多个输絀文件如具有匹配记录的文件,带有不匹配记录的文件等

  • 特定位置中的一个文件中的数据可以覆盖到相同或不同文件中的另一个位置。

  • A文件可以根据指定的条件分为n个文件例如,包含员工姓名的文件可以分为26个文件每个文件包含以A,BC等开头的名称。

  • 文件操作的不哃组合可以使用ICETOOL进行一些探索的工具

SYNCSORT用于复制,合并或排序具有高性能的数据集它提供了31位和64位地址空间中的系统资源和高效运行的朂佳利用。

它可以在同一行的DFSORT中使用并可以实现相同的功能。它可以由JCL调用也可以在COBOL,PL / 1或Assembler语言编码的程序中调用它还支持从SYNCSORT程序调鼡用户退出程序。

使用这些实用程序的常用排序技巧将在下一章中进行说明在COBOL / ASSEMBLER中需要大量编程的复杂要求可以通过简单的步骤使用上述實用程序来实现。

使用实用程序可以实现的企业世界中的日常应用要求如下所示:

文件有100条记录前10个记录需要写入输出文件。

选项STOPAFT将在苐10条记录后停止读取输入文件并终止程序。因此10条记录被写入输出。

2.输入文件具有相同员工编号的一个或多个记录写独特的记录输絀。

SUM FIELDS = NONE删除在SORT FIELDS中指定的字段上的重复项在上述示例中,员工编号在字段位置1,15输出文件将包含以升序排列的唯一员工编号。

3.覆盖输入记录內容

在输入文件中,位置1,6的内容被覆盖到位置47,6然后被复制到输出文件。INREC OVERLAY操作用于在复制到输出之前重写输入文件中的数据

4.将序列号添加到输出文件。

在位置10的输出中添加4位序列号从1000开始增加每个记录2。

TOT计算输入文件中的记录数将HDR和TRL作为标题添加到标题/预告片,这昰用户定义的可以根据用户的需要定制。

根据文件的第六个位置输出文件的BUILD有所不同。如果第六位是SPACES则文本“EMPTY”附加到输入记录。否则输入记录按原样写入输出。

  • JOINKEYS指定两个文件进行比较的字段

  • 改革范围=?在输出BUILD的第1位置"B"(匹配记录)"""(存在于file1中,但不在file2中)或"2"(存在于file2中而不在file1中)。

  • JOIN UNPAIRED对两个文件进行完整的外连接

使用ICETOOL也可以实现相同的功能。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信