0% found this document useful (0 votes)
15 views12 pages

Introduction To JCL: JCL (Job Control Language)

JCL (Job Control Language) is a scripting language used for communication between programs and the mainframe operating system, primarily in batch processing. It involves job submission, conversion, queuing, execution, and purging, with specific control statements like JOB, EXEC, and DD to define job steps and datasets. Each statement has parameters that dictate job execution, resource allocation, and output management.

Uploaded by

diptesh.print
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views12 pages

Introduction To JCL: JCL (Job Control Language)

JCL (Job Control Language) is a scripting language used for communication between programs and the mainframe operating system, primarily in batch processing. It involves job submission, conversion, queuing, execution, and purging, with specific control statements like JOB, EXEC, and DD to define job steps and datasets. Each statement has parameters that dictate job execution, resource allocation, and output management.

Uploaded by

diptesh.print
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 12

JCL (JOB CONTROL LANGUAGE)

Introduction to JCL

JCL (Job Control Language) is one of the old and most robust scripting language that work as a
communication between program (COBOL or Assembler) and the operating system (Mainframe; OS
Z).

In mainframe system, programs can be executed in Batch or Online mode.

JCL widely used in Batch Scheduling where different aspects of Batch processing are fed into JCL
which is in turn received by operating system.

Job Processing

A job is a unit of work which can be made up of many job steps. Each job step is specified in a Job
Control Language (JCL) through a set of Job Control Statements.

The Operating System uses Job Entry System (JES) to receive jobs into the Operating System, to
schedule them for processing and to control the output.

Job processing goes through a series of steps as given below:

 Job Submission - Submitting the JCL to JES.


 Job Conversion - The JCL along with the PROC is converted into an interpreted text to be
understood by JES and stored into a dataset, which we call as SPOOL.
 Job Queuing - JES decides the priority of the job based on CLASS and PRTY parameters in the
JOB statement (explained in JCL - JOB Statement chapter). The JCL errors are checked and
the job is scheduled into the job queue if there are no errors.
 Job Execution - When the job reaches its highest priority, it is taken up for execution from
the job queue. The JCL is read from the SPOOL, the program is executed and the output is
redirected to the corresponding output destination as specified in the JCL.
 Purging - When the job is complete, the allocated resources and the JES SPOOL space is
released. In order to store the job log, we need to copy the job log to another dataset before
it is released from the SPOOL.

Different Stage of Job Processing

Input
Conversion
Processing
Output (Spool / Print)
Purge

JCL Control Statement

Job Statement  JOB Card (*mandatory)

JOB Statement is the first control statement in a JCL. This gives the identity of the job to the
Operating System (OS), in the spool and in the scheduler. The parameters in the JOB statement help
the Operating Systems in allocating the right scheduler, required CPU time and issuing notifications
to the user.

Syntax

Following is the basic syntax of a JCL JOB statement:

//Job-name JOB Positional-param, Keyword-param

Description
Let us see the description of the terms used in above JOB statement syntax.

Job-name

This gives an id to the job while submitting it to the OS. It is can be length of 1 to 8 with
alphanumeric characters and starts just after //.

JOB

This is the keyword to identify it as a JOB statement.

Positional-param

There are positional parameters, which can be of two types:

Positional Parameter Description

This refers to the person or group to which the CPU time is owed. It is
set as per the rules of the company owning the mainframes. If it is
Account information
specified as (*), then it takes the id of the user, who has currently
logged into the Mainframe Terminal.

This identifies the person or group, who is in charge of the JCL. This is
Programmer name
not a mandatory parameter and can be replaced by a comma.

Keyword-param

Following are the various keyword parameters, which can be used in JOB statement. You can use
one or more parameters based on requirements and they are separated by comma:

Keyword Parameter Description

Based on the time duration and the number of resources required by


the job, companies assign different job classes. These can be
visualized as individual schedulers used by the OS to receive the jobs.
Placing the jobs in the right scheduler will aid in easy execution of the
jobs. Some companies have different classes for jobs in test and
CLASS
production environment.

Valid values for CLASS parameter are A to Z characters and 0 to 9


numeric (of length 1). Following is the syntax:

CLASS=0 to 9 | A to Z

PRTY To specify the priority of the job within a job class. If this parameter is
not specified, then the job is added to the end of the queue in the
specified CLASS. Following is the syntax:
PRTY=N

Where N is a number in between 0 to 15 and higher the number,


higher is the priority.

The system sends the success or failure message (Maximum Condition


Code) to the user specified in this parameter. Following is the syntax:

NOTIFY="userid | &SYSUID"
NOTIFY
Here system sends the message to the user "userid" but if we use
NOTIFY = &SYSUID, then the message is sent to the user submitting
the JCL.

To specify the output destination for the system and Job messages
when the job is complete. Following is the syntax:

MSGCLASS=CLASS
MSGCLASS
Valid values of CLASS can be from "A" to "Z" and "0" to "9". MSGCLASS
= Y can be set as a class to send the job log to the JMR (JOBLOG
Management and Retrieval: a repository within mainframes to store
the job statistics).

Specifies the type of messages to be written to the output destination


specified in the MSGCLASS. Following is the syntax:

MSGLEVEL=(ST, MSG)

ST = Type of statements written to output log

 When ST = 0, Job statements only.

 When ST = 1, JCL along with symbolic parameters expanded.


MSGLEVEL
 When ST = 2, Input JCL only.

MSG = Type of messages written to output log.

 When MSG = 0, Allocation and Termination messages written


upon abnormal job completion.

 When MSG = 1, Allocation and Termination messages written


irrespective of the nature of job completion.

TYPRUN Specifies a special processing for the job. Following is the syntax:

TYPRUN = SCAN | HOLD

Where SCAN and HOLD has the following description

 TYPRUN = SCAN checks the syntax errors of the JCL without


executing it.

 TYPRUN = HOLD puts the job on HOLD in the job queue.To


release the job, "A" can be typed against the job in the SPOOL,
which will bring the job to execution.

Specifies the time span to be used by the processor to execute the


job. Following is the syntax:

TIME=(mm, ss) or TIME=ss

TIME Where mm = minutes and ss = seconds

This parameter can be useful while testing a newly coded program. In


order to ensure that the program does not run for long because of
looping errors, a time parameter can be coded so that the program
abends when the specified CPU time is reached.

Specifies the address space required to run a job step within the job.
Following is the syntax:

REGION=nK | nM

REGION Here, region can be specified as nK or nM where n is a number, K is


kilobyte and M is Megabyte.

When REGION = 0K or 0M, largest address space is provided for


execution.In critical applications, coding of 0K or 0M is prohibited to
avoid wasting the address space.

Example

//URMISAMP JOB (*),"tutpoint",CLASS=6,PRTY=10,NOTIFY=&SYSUID,

// MSGCLASS=X,MSGLEVEL=(1,1),TYPRUN=SCAN,

// TIME=(3,0),REGION=10K

Here, JOB statement is getting extended beyond the 70th position in a line,so we continue in the
next line which should start with "//" followed by one or more spaces.

Miscellaneous Parameters

There are few other parameters, which can be used with JOB Statement but they are not frequently
used:

ADDRSPC Type of storage used: Virtual or Real

BYTES Size of data to be written to output log and the action to be taken
when the size is exceeded.

LINES Maximum number of lines to be printed to output log.

PAGES Maximum number of pages to be printed to output log.

USER User id used to submit the job

PASSWORD Password of the user-id specified in the USER parameter.

These are used in conditional job step processing and are explained
COND and RESTART
in detail while discussing conditional Processing.

JCL - EXEC Statement

Each JCL can be made of many job steps. Each job step can execute a program directly or can call a
procedure, which in turn executes one or more programs (job steps). The statement, which holds
the job step program/procedure information is the EXEC statement.

The purpose of the EXEC statement is to provide required information for the program/procedure
executed in the job step. Parameters coded in this statement can pass data to the program in
execution, can override certain parameters of JOB statement and can pass parameters to the
procedure if the EXEC statement calls a procedure instead of directly executing a program.

Syntax

Following is the basic syntax of a JCL EXEC statement:

//Step-name EXEC Positional-param, Keyword-param

Description

Let us see the description of the terms used in above EXEC statement syntax.

STEP-NAME

This identifies the job step within the JCL. It can be of length 1 to 8 with alphanumeric characters.

EXEC

This is the keyword to identify it as an EXEC statement.

POSITIONAL-PARAM

These are positional parameters, which can be of two types:

Positional Parameter Description

PGM This refers to the program name to be executed in the job step.
This refers to the procedure name to be executed in the job step.
PROC
We will discuss it a separate chapter.

KEYWORD-PARAM

Following are the various keyword parameters for EXEC statement. You can use one or more
parameters based on requirements and they are separated by comma:

Keyword Parameter Description

Used to provide parameterized data to the program that is being


executed in the job step. This is a program dependant field and
do not have definite rules, except that the PARM value has to be
included within quotation in the event of having special
PARM characters.
For example given below, the value "CUST1000" is passed as an
alphanumeric value to the program. If the program is in COBOL,
the value passed through a PARM parameter in a JCL is received
in the LINKAGE SECTION of the program.

This is used to specify whether the job step require virtual or real
storage for execution. Virtual storage is pageable whereas real
storage is not and is placed in the main memory for execution.
ADDRSPC Job steps, which require faster execution can be placed in real
storage. Following is the syntax:
ADDRSPC=VIRT | REAL
When an ADDRSPC is not coded, VIRT is the default one.

This specifies the accounting information of the job step.


Following is the syntax:
ACCT=(userid)
This is similar to the positional parameter accounting
information in the JOB statement. If it is coded both in JOB and
ACCT
EXEC statement, then the accounting information in JOB
statement applies to all job steps where an ACCT parameter is
not coded. The ACCT parameter in an EXEC statement will
override the one present in the JOB statement for that job step
only.

Common Keyword Parameters of EXEC and JOB Statement

Keyword Parameter Description

ADDRSPC coded in JOB statement overrides the ADDRSPC coded


ADDRSPC
in EXEC statement of any job step.
If TIME is coded in an EXEC statement, then it applies to that job
step only. If it is specified in both JOB and EXEC statement, then
TIME both will be in effect and can cause time-out error due to either
of it. It is not recommended to use TIME parameter in both the
JOB and EXEC statement together.

If REGION is coded in an EXEC statement, then it applies to that


job step only.
REGION
REGION coded in JOB statement overrides the REGION coded in
EXEC statement of any job step.

Used to control the job step execution based on the return-code


of the previous step.
If a COND parameter is coded in an EXEC statement of a job step,
COND
then the COND parameter of the JOB statement (if present) is
ignored. The various tests that can be performed using a COND
parameter is explained in conditional Processing.

Example

Following is a simple example of JCL script along with JOB and EXEC statements:

//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,

// NOTIFY=&SYSUID

//*

//STEP010 EXEC PGM=MYCOBOL,PARAM=CUST1000,

// ACCT=(XXXX),REGION=8K,ADDRSPC=REAL,TIME=1440

JCL - DD Statement

Datasets are mainframe files with records organised in a specific format. Datasets are stored on the
Direct Access Storage Device (DASD) or Tapes of the mainframe and are basic data storage areas. If
these data are required to be used/created in a batch program, then the file (i.e., dataset) physical
name along with the file format and organisation are coded in a JCL.

The definition of each dataset used in the JCL is given using the DD statement. The input and output
resources required by a job step needs to be described within a DD statement with information such
as the dataset organisation, storage requirements and record length.

Syntax

Following is the basic syntax of a JCL DD statement:

//DD-name DD Parameters

Description
Let us see the description of the terms used in above DD statement syntax.

DD-NAME

A DD-NAME identifies the dataset or input/output resource. If this is an input/output file used by a
COBOL/Assembler program, then the file is referenced by this name within the program.

DD

This is the keyword to identify it as an DD statement.

PARAMETERS

Following are the various parameters for DD statement. You can use one or more parameters based
on requirements and they are separated by comma:

Parameter Description

The DSN parameter refers to the physical dataset name of a newly


created or existing dataset. The DSN value can be made up of sub-
names each of 1 to 8 characters length, separated by periods and of
total length of 44 characters (alphanumeric). Following is the syntax:
DSN=Physical Dataset Name
DSN Temporary datasets need storage only for the job duration and are
deleted at job completion. Such datasets are represented
as DSN=&name or simply without a DSN specified.
If a temporary dataset created by a job step is to be used in the next
job step, then it is referenced as DSN=*.stepname.ddname. This is
called Backward Referencing.

DISP The DISP parameter is used to describe the status of the dataset,
disposition at the end of the job step on normal and abnormal
completion. DISP is not required in a DD statement only when the
dataset gets created and deleted in the same job step (like the
temporary datasets). Following is the syntax:
DISP=(status, normal-disposition, abnormal-disposition)
Following are valid values for status:
NEW : The dataset is newly created by the job step. OUTPUT1 in the
example above.
OLD : The dataset is already created and will be overwritten in the job
step. The job step gains exclusive access on the dataset and no other
job can access this dataset until the completion of the job step.
SHR : The dataset is already created and will be read in the job step.
The dataset can be read by multiple jobs at the same time. Example:
INPUT1 and INPUT2.
MOD : The dataset is already created. This disposition will be used
when there is a need to append new records to the existing dataset
(existing records will not be overwritten).
A normal-disposition parameter can take one of the following values
CATLG, UNCATLG, DELETE, PASS and KEEP
A abnormal-disposition parameter can take one of the following
values
CATLG, UNCATLG, DELETE and KEEP
Here is the description of CATLG, UNCATLG, DELETE, PASS and KEEP
parameters:
CATLG : The dataset is retained with a entry in the system catalog.
UNCATLG : The dataset is retained but system catalog entry is
removed.
KEEP : The dataset is retained without changing any of the catalog
entries. KEEP is the only valid disposition for VSAM files. This is to be
used only for permanent datasets.
DELETE : Dataset is deleted from user and system catalog.
PASS : This is valid only for normal disposition. This is used when the
dataset is to be passed and processed by the next job step in a JCL
When any of the sub-parameters of DISP are not specified, the default
values are as follows:
status : NEW is the default value.
normal-disposition : If status is NEW, default normal-disposition is
DELETE, else it is KEEP.
abnormal-disposition : Same as normal disposition.

The Data Control Block (DCB) parameter details the physical


characteristics of a dataset. This parameter is required for datasets
that are newly created in the job step.
LRECL is the length of each record held within the dataset.
RECFM is the record format of the dataset. RECFM can hold values FB,
V or VB. FB is a fixed block organisation where one or more logical
records are grouped within a single block. V is variable organisation
where one variable length logical record is placed within one physical
block. VB is Variable Block organisation where one or more variable
length logical records are placed within one physical block.
DCB BLKSIZE is the size of the physical block. The larger the block, greater
is the number of records for a FB or VB file.
DSORG is the type of dataset organisation. DSORG can hold values PS
(Physical Sequential), PO (Partitioned Organisation) and DA (Direct
Organisation).
When there is a need to replicate the DCB values of one dataset to
another within the same jobstep or JCL, then it is specified as
DCB=*.stepname.ddname where stepname is the name of the job
step and ddname is the dataset from which the DCB is copied.
Check below example where RECFM=FB,LRECL=80 forms the DCB of
dataset OUTPUT1.

SPACE The SPACE parameter specifies the space required for the dataset in
the DASD (Direct Access Storage Disk). Following is the syntax:
SPACE=(spcunits, (pri, sec, dir), RLSE)
Here is the description of all the used parameters:
spcunits : This can be one of the CYL(Cylinder), TRK(Tracks) or
BLKSIZE(Block Size).
pri : This is the primary space required for the dataset.
sec : This is the additional space required, when the primary space is
not being sufficient.
ir : This is the directory blocks required, if the dataset is a PDS
(Partitioned Dataset) with members within it.
RLSE : This is used to release the unused space at job completion.

The UNIT and VOL parameters are listed in the system catalog for
catalogued datasets and hence can be accessed with just the physical
DSN name. But for uncataloged datasets, the DD statement should
include these parameters. For new datasets to be created, the
UNIT/VOL parameters can be specified or the Z/OS allocates the
suitable device and volume.
UNIT The UNIT parameter specifies the type of device on which the dataset
is stored. The device type can be identified using Hardware Address or
Device type group. Following is the syntax:
UNIT=DASD | SYSDA
Where DASD stands for Direct Access Storage Device and SYSDA
stands for System Direct Access and refers to the next available disk
storage device.

The VOL parameter specifies the volume number on the device


identified by the UNIT parameter. Following is the syntax:
VOL=SER=(v1,v2)
Where v1, v2 are volume serial numbers. You can use the following
VOL
syntax as well:
VOL=REF=*.DDNAME
Where REF is the backward reference to the volume serial number of
a dataset in any of the preceding job steps in the JCL.

The DD statement parameters discussed so far corresponds to data


being stored in a dataset. The SYSOUT parameter directs the data to
output device based on the class specified. Following is the syntax
SYSOUT SYSOUT=class
Where if class is A then it directs output to printer, and if class
is * then it directs output to same destination as that of the
MSGCLASS parameter in the JOB statement.
Example

Following is an example, which makes use of DD statements along with various parameters
explained above:

//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,

// NOTIFY=&SYSUID

//*
//STEP010 EXEC PGM=ICETOOL,ADDRSPC=REAL

//*

//INPUT1 DD DSN=TUTO.SORT.INPUT1,DISP=SHR

//INPUT2 DD DSN=TUTO.SORT.INPUT2,DISP=SHR,UNIT=SYSDA,

// VOL=SER=(1243,1244)

//OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),

// RECFM=FB,LRECL=80,SPACE=(CYL,(10,20))

//OUTPUT2 DD SYSOUT=*

You might also like