Skip to main content

Command Palette

Search for a command to run...

Job Control Language - JCL

Updated
4 min readView as Markdown

MSGLEVEL - parameter controls the printing of job messages in the spool. It’s a keyword parameter and is optional.
MSGLEVEL=(M1,M2)

M1 = 0 (Only job statements)
1 (All statements)
2 (Only jcl statements)

M2 = 0 (print allocation and termination messages only when job ended abnormally)
1 (print allocation and termination messages when job ended either normally or abnormally)

MSGCLASS - parameter is used to specify the output device to where the system or jcl messages are routed(written & printed). It’s used to hold the job log messages - JESMSGLG
Default value is ‘A’ (spool).

CLASS - parameter used to classify the jobs. is based on how much time they are running.

PRTY/PRIORITY - parameter used to assign a selection priority to jobs within the same class. JES system uses the PRTY value to decide the execution sequence of the jobs when they have same CLASS value.
JES2 = 0-15 JES3 = 0 - 14

REGION - parameter used to specify the amount of central or virtual memory required to execute the job or step. REGION=NOLIMIT

TIME - parameter used to specify the maximum CPU utilization time allowed for the job to execute. system will automatically cancel the job execution if time exceeds. TIME=1440/NOLIMIT means 24 hrs.

Bind DB2 Program:-
Bind process builds a connection between Application program and its relational database.
//BIND001 EXEC PGM=IKJEFT01
//DBRMLIB DD DSN=ECO2069.SANTU.LOADLIB,DISP=SHR
// DD DSN=SYS4.ENDVR.WMA.LEG2.UATWMAD.DBRMLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DB2M)
BIND PACKAGE(AXACVY0C) -
OWNER (AXAQVY0C) -
QUALIFIER(AXAQVY0C) -
MEMBER(IMDCAFFU) -
SQLERROR(NOPACKAGE) -
VALIDATE(BIND) -
FLAG(I) -
ISOLATION(CS) -
EXPLAIN(NO) -
CURRENTDATA(NO) -
ENABLE(*) -
DYNAMICRULES(BIND) -
ACTION(REPLACE)
END

Generation Data Group (GDG) - That allows organizing and managing datasets or files over time.
A maximum of 255 generation are exists within a GDG.
IDCAMS utility is used to create GDG Base. ** Can also be created using File-Aid tool.
//Step01 exec pgm=idcams
//sysin dd*
Define GDG(name(GDG-Name)-
limit(nnn) -
noempty|empty -
scratch|noscratch)
/**
Empty - All the existing generations are to be uncataloged whenever the generations of GDG matches the maximum limit.
NOEMPTY - Only the latest generation is uncataloged when the GDG reaches maximum limit.
Scratch - Generation should be deleted physically when uncataloged.
Noscratch - Generation should not be deleted when uncataloged, can be accessed using UNIT and VOL parameters.

Virtual storage access method (VSAM) - Allows us to access the records and organise the records into disk dataset.
VSAM works with the data that stores only on direct access storage device (DASDs).
KSDS - Key Sequenced Dataset
ESDS - Entry Sequenced Dataset
RRDS - Relative Record Dataset
LDS - Linear Dataset

Vsam can access records in 3 ways:
Sequential
Direct
Dynamic or Skip Sequential

INCLUDE MEMBER:

JCL INCLUDE Statement – Example

Scenario:

You have multiple JCL jobs that require common DD statements (such as dataset allocations, SYSOUT definitions, or parameters). Instead of repeating the same statements in every JCL, you can store them in a separate PDS member and use INCLUDE MEMBER=XXX to insert them dynamically.


Step 1: Create a Common JCL Member

1️⃣ Create a JCL member (COMMONDD) in a PDS (e.g., MYPROCLIB.COMMONJCL)
This member will contain commonly used DD statements.

//SYSOUT   DD  SYSOUT=*                       
//SYSPRINT DD  SYSOUT=*                       
//SYSUDUMP DD  SYSOUT=*                       
//MYDATA   DD  DSN=MY.DATA.SET,DISP=SHR

Step 2: Use the INCLUDE Statement in Your Main JCL

Now, in your main JCL, you can use INCLUDE MEMBER=COMMONDD instead of repeating the DD statements.

//MYJOB   JOB 'TEST',CLASS=A,MSGCLASS=X
//STEP1   EXEC PGM=IEFBR14
//        INCLUDE MEMBER=COMMONDD

Step 3: How the System Processes This JCL

  • When the system processes this JCL, it replaces the INCLUDE MEMBER=COMMONDD with the content of the COMMONDD member from MYPROCLIB.COMMONJCL.

  • The final JCL submitted for execution will look like this:

//MYJOB   JOB 'TEST',CLASS=A,MSGCLASS=X
//STEP1   EXEC PGM=IEFBR14
//SYSOUT   DD  SYSOUT=*                       
//SYSPRINT DD  SYSOUT=*                       
//SYSUDUMP DD  SYSOUT=*                       
//MYDATA   DD  DSN=MY.DATA.SET,DISP=SHR

Benefits of Using INCLUDE in JCL

Avoids duplication – No need to rewrite common statements in multiple JCLs.
Easier maintenance – If you need to change SYSOUT or dataset details, update only the common member.
Improves readability – JCL is shorter and cleaner.


More from this blog

Mainframes

15 posts