JCL Users Guide

The purpose of this document is to describe the Job Control Language (JCL) used on IBM mainframes.

Forward

I originally wrote this document in 1991 and even then JCL was considered an obscure topic that few understood, yet it remains at the core of many major enterprise applications. I have made some updates but many of the references are dated. A quick Google search will find the current documentation.

A number of the parameters are site specific so you will need to consult your local system administrator and modify accordingly.

The IBM mainframe operating system has had several names, such as: MVS, MVS/XA, MVS/ESA, OS/390, zOS. For the purpose of this document these are equivalent.

Paul Shipley,

16 July, 2011

Introduction

IBM Job Control Language (JCL) remains one of the most obscure parts of the use of IBM and compatible mainframes. The reason for this are many:

  • JCL has remained largely unchanged since it was originally released in the mid-1960’s as part of the System/360. This system used punched cards for all input and printed or punched output. Jobs were queued by physically placing them in a central card reader! Much of the terminology of JCL still refers to cards even though IBM no longer supports card readers.

  • Many of the options available are either obsolete or seldom used, yet they are given equal weight in the IBM manuals.

  • IBM provides no standard way of testing or debugging JCL.

  • Few people understand JCL well.

     

The aim of this paper is to highlight some of the important points to using JCL without repeating all of the work of other sources.

JCL Syntax

There are only three main statements (or cards in IBM terminology) that are used frequently. There are several more statements which are seldom used. The following are some points which are of interest when using JCL.

JOB Card

The JOB Card commences a new job. If it is invalid then the job fails without any programs being executed.

Two parameters on the JOB Card can cause problems.

The Region Parameter:- specifies the maximum amount of system memory to be available to any programs executed. This can also be specified on the EXEC Card for a particular program, however the value specified on the JOB Card overrides that on the EXEC Card. Normally there is no reason for using the Region Parameter on the EXEC Card as this only causes confusion.

The Cond Parameter:- has the same function as for the EXEC Card however the condition specified on the JOB Card is evaluated first. Normally if the COND Parameter is coded on the JOB Card it would not be coded on any of the EXEC cards.

Syntax

//jobname JOB ‘account code’, ‘programmer name’,

// CLASS=class,MSGCLASS=msgclass,

// REGION=region,MSGLEVEL=(statements,messages),

// NOTIFY=userid

account code

the account to be billed

programmer name

a 20 character comment

class

the class that the job will run in, see your system administrator for values. Examples

 

A <10 seconds CPU time

 

N overnight

 

T requires tapes

msgclass

assigns job log to an output class, normally all output follows the job log

 

A Printer

 

X Held output

 

Z No output

region

the maximum amount of system memory the job requires (ie: 4M, 512K. Maximum 8M).

statements

indicates which JCL statements to print in the log

 

0 JOB statement only

 

1 all statements and expanded procedure statements

 

2 all statements but without expanded procedure statements

messages

indicates which system messages to print in the log

 

0 no messages, unless job fails

 

1 all messages

userid

userid to be notified on job completion

EXEC Card

The EXEC Card causes the execution of a program or procedure.

Syntax

Execute Program

//stepname EXEC PGM=program-name[,COND=(code,operator)][,PARM=‘parm’]

Execute Procedure

//stepname EXEC PROC=procedure-name[,symbolic-parm=‘value’,…]

// [,PARM.proc-step=‘parm’,…]

Where

code

Specifies the value to compare to the return code (RC).

operator

Specifies the type of comparison to be made with the return code.

 

GT Greater Than

 

GE Greater than or Equal to

 

EQ Equal to

 

NE Not Equal to

 

LT Less Than

 

LE Less than or Equal to

Test in COND

Continue Job

Terminate Job

COND=(code,GT)

RC >= code

RC < code

COND=(code,GE)

RC > code

RC =< code

COND=(code,EQ)

RC ^= code

RC = code

COND=(code,LT)

RC =< code

RC > code

COND=(code,LE)

RC < code

RC >= code

COND=(code,NE)

RC = code

RC ^= code

Reproduced from Figure 15-1 MVS/XA JCL Reference

DD Card

The DD (Data Definition) Card is the most frequently used JCL statement. It is also the source of most of the confusion.

Temporary Data Sets

There are two types of Data Sets: Permanent and Temporary. The data set name (DSN) distinguishes the two types. Permanent data sets you should already be familiar with, since your PDSs are permanent.

Temporary data sets are created during a job and can be given a name starting with two ampersands (eg: &&TEMP). The disposition for this type of data set should be (NEW,PASS) and the data set will be automatically deleted at the end of the job. This type of data set is useful for passing intermediate data from one step to another.

The data set name parameter (ie: DSN=) can be omitted in which case the data set is given a unique name by the system. The disposition should be (NEW,DELETE) and the data set will be deleted at the end of the step. This type of data set is useful for work files.

Do not try to catalog these data sets!

A single ampersand can be used instead of the double ampersand, but this can cause confusion with symbolic parameters and should be avoided.

Device Specification

The UNIT parameter specifies the type of device that a data set can be located on. UNIT never needs to be specified if the data set has been cataloged since on of the items in the catalog is the device type. UNIT should not specified for VSAM or SYSOUT data sets.

Valid values for UNIT are:

DISK

Permanent disk data sets

WORK

Temporary disk data sets

SYSDA

Any disk, should be used with VOLSER otherwise it is equivalent to WORK

CART

3480 Cartridge tape data sets

Space Allocation

When creating a new data set on disk, allocation information must be given via the SPACE parameter. The information that is required is allocation quantity, the primary and secondary allocations, the number of directory blocks for a PDS, and Optionally some extra sub-parameters.

The allocation quantity should always be tracks (TRK) or cylinders (CYL). Allocations of more than 15 tracks should be in cylinders (1 cylinder = 15 tracks). It is possible to specify the quantity in blocks, however since space on the disk is allocated in tracks, MVS has to calculate the tracks required for the number of blocks specified. This method can result in inefficient allocations.

The primary allocation should be the expected largest size of the data set plus ten percent. The secondary allocation would normally be set to twenty percent of the primary. Specifying a secondary larger than the primary is a problem waiting to occur! MVS attempts to allocate the primary before the step commences execution, so if the space is not available the job abends immediately. Secondary allocations are made as they are needed. If the space for a secondary allocation is not available then the job abends. This could occur after significant processing, which would be lost. Also do not rely on having all 15 secondaries, since there may not be enough space on the disk.

When allocating PDS (DSORG=PO) specify a directory allocation. One directory block can provided for six members with ISPF statistics or eighteen without.

Coding the optional release (RLSE) sub-parameter will cause any unused space at the end of the data set to be freed and returned to the system when the step closes the data set. This is usually a good idea however there are a number of limitations. RLSE works only when a data set is opened for output and is closed normally. RLSE does not work if the data set is being shared. RLSE does not work if the job abends without closing the data set.

Data Control Block (DCB)

The DCB has a large number of sub-parameters which are not always required.

For a data set being created by the job (DISP=NEW) a DCB is almost always required. If the data set already exists (eg: it has been cataloged) then a DCB should not be specified.

The DCB can be modelled on an existing data set by specifying the existing data set name in the new data sets DCB parameter. For example DCB=(dsname) or DCB=(*.ddname) where the ddname is a data set specified in another DD within the job step.

The data set organization (DSORG) specifies the structure of the data set. There are three common values:

PS Physical Sequential

PO Partitioned Organization

DA Direct Access

The record format (RECFM) specifies the structure of the records within the data set. There are two common values:

FB Fixed length, Blocked

VB Variable length, Blocked

The logical record length (LRECL) specifies the maximum length of the records in the data set, which can range from 1 to the block size. For variable length records the LRECL must be four bytes larger than the required length so that MVS can write the record length information.

For sequential data sets the block size (BLKSIZE) can be calculated by the following formulas:

For Fixed length, Blocked data sets

BLKSIZE = LRECL * INT(23,476 / LRECL)

For Variable length, Blocked data sets

BLKSIZE = ((AvRecL+4) * INT(23,468/(AvRecL+4)) + 4

where AvRecl is the average record length

For 80 byte record partitioned data sets the block size should be specified as 3840 bytes.

Syntax Terms

ddname

A DD name (SYSIN)

dsname

A Data Set name (HLQ.PPDS.SASPROG)

unit

A Unit name (GENUSER)

volser

A Volume Serial (GUN245)

recfm

The Record Format (FB)

blksize

The Block Size (23476)

lrecl

The Logical Record Length (80)

size

Either Tracks (TRK) or Cylinders (CYL)

primary

The primary space quantity, in ‘size’ units (5)

secondary

The secondary space quantity (2)

directory

The number of PDS directory blocks (10)

scratch-count

The number of tape volumes required (20)

days

The number of days (50)

msgclass

A output class (A)

dest

A primer destination code (N8R53)

copies

The number of copies to be printed (2)

lines

The maximum number of lines to be printed (1000)

Read from cataloged data set

//ddname DD DSN=dsname,DISP=SHR

Write to cataloged data set

//ddname DD DSN=dsname,DISP=OLD

There is some confusion regarding the use SHR and OLD dispositions as they are some times equated with Read and Write attributes on other machines (ie: Bull), however this is completely incorrect. A data set with SHR can be written to! However OLD should always be specified when updating a data set.

Note that SAS will not write to a SAS data set unless OLD is specified.

Use cataloged tape data set

//ddname DD DSN=dsname,DISP=OLD,UNIT=(,,DEFER)

Specifying DEFER delays mounting of the tape until it is opened by the job. Normally MVS will mount all tapes at the start of each step. If the tape is then not used (due to an error perhaps) it would have been mounted unnecessarily.

For tapes DISP=OLD should be specified since tapes can not be shared!

Note that UNIT=CART is not required in this case since the catalog identifies the data set as being on tape.

Use uncatalogued non-IBM ASCII tape data set

//ddname DD DSN=dsname,

// DISP=(OLD,KEEP),

// UNIT=(CART,,DEFER),

// VOL=SER=(volser[,volser,…]),

// LABEL=(l,SL,EXPDT=98000),

// DCB=(DSORG=PS,RECFM=recfm,

// BLKSIZE=blksize,LRECL=lrecl,OPTCD=Q

For non-IBM tapes (which are usually in ASCII) extra information needs to be specified.

Tapes from other sites are never cataloged locally so the Volume Serial (volser) needs to be specified. If the data set spans more than one tape then all of the volsers must be specified. Failing to specify all of the volsers will result in truncation.

To indicate that the tape is from another site requires that EXPDT 98000 be specified. This informs CA-1 (formally UCC-1) not to check for the tape in its data base. Failing to do this may result in an abend.

IBM mainframes always use the EBCDIC character set unless OPTCD=Q is specified. This causes a EBCDIC / ASCII conversion during input/output. This option can only be specified for tape data sets.

In this example the external tape is really a 3480 cartridge (UNIT=CART).

Create temporary sequential data set

//ddname DD DSN=&&ddname,

// DISP=(NEW,DELETE,DELETE),

// UNIT=unit,[VOL=SER=volser,]

// SPACE=(size,(primary,secondary)[,RLSE]),

// DCB=(DSORG=PS,RECFM=recfm,BLKSIZE=blksize,LRECL=lrecl)

The data set is temporary due to the double ampersand name and is physical sequential because the DSORG has been specified as PS.

Create temporary partitioned data set

//ddname DD DSN=&&ddname,

// DISP=(NEW,PASS,DELETE),

// UNIT=unit,[VOL=SER=volser,]

// SPACE=(size,(primary,secondary,directory)),

// DCB=(DSORG=PO,RECFM=recfm,BLKSIZE=blksize,LRECL=lrecl)

This is the same as the example above except that the DSORG has been specified as PO making the data set partitioned. A directory allocation is therefore required.

Create tape data set

//ddname DD DSN=dsname,

// DISP=(NEW,CATLG,DELETE)

// UNIT=(CART,,DEFER),

// LABEL=(1,SL,RETPD=days),

// DCB=(DSORG=PS,RECFM=recfm,BLKSIZE=blksize,LRECL=lrecl)

Create very large tape data set

//ddname DD DSN=dsname,

// DISP=(NEW,CATLG,DELETE)

// UNIT=(CART,,DEFER),

// VOL=(PRIVATE,RETAIN,,scratch-count),

// LABEL=(1,SL,RETPD=days),

// DCB=(DSORG=PS,RECFM=recfm,BLKSIZE=blksize,LRECL=Ireel)

MVS has a default maximum of five volumes for a new data set. If you reach this maximum you will get a very strange message indicating that you have reached the end of file on a data set which is being output to! To overcome this the scratch-count value should be increased to its next value, which is twenty. The following table shows the valid values for the scratch­count.

Scratch Count

Volumes available

default

5

1 – 5

5

6 – 20

20

21-35

35

36-50

50

Create tape data set in ASCII format for use by non—IBM computer

//ddname DD DSN=dsname,

// DISP=(NEW,KEEP,DELETE),

// UNIT=(CART,,DEFER),

// LABEL=(1,SL,RETPD=2),

// DCB=(DSORG=PS,RECFM=recfm

// BLKSIZE=blksize,LRECL=lrecl,OPTCD=Q)

Note: Many non-IBM computers have block size limits and other restrictions, check with their system programmers.

Delete Disk Data Set

The following JCL will delete a disk data set without abending if it does not exist.

//stepname EXEC PGM=IEFBR14

//ddname DD DSN=dsname,

// DISP=(MOD,DELETE),

// UNIT=DISK,

// SPACE=(TRK,0)

Delete Tape Data Set

//stepname EXEC PGM=IEFBR14

//ddname DD DSN=dsname,

// DISP=(MOD,DELETE),

// UNIT=(CART,,DEFER),

// LABEL=(1,SL,RETPD=0)

Print output

//ddname DD SYSOUT=msgclass[,DEST=dest][,COPIES=copies][,OUTLIM=lines]

JES2 cards

Control statements for Job Entry System 2 (JES2) are sometimes required. There are three statements commonly used.

Route card

The route card is normally used to redirect the output of a job from the node that it is executing on to another.

Syntax

/*ROUTE PRINT node

Where

node The machine to receive the output (N12)

XEQ card

The execute (XEQ) card redirects the execution of a job from the node where it was submitted to another.

Syntax

/*XEQ node

Where

node The machine to execute the job (VIC9)

JOBPARM card

The job parameters (JOBPARM) card is used to control JES2 related job parameters. The most useful of these controls the maximum number of lines which can be produced by the job.

Syntax

/*JQBPARM LINES=lines

Where

lines The maximum number of lines, in thousands (10) [10=10,000 lines]

JCL Utilities

IEBGENER / ICEGENER

These utilities copy sequential data sets or PDS members, however ICEGENER is based on DFSORT and executes twice as fast. The input is read from SYSUT1 and can be either a sequential data set or a concatenation of data sets. The output is written to SYSUT2 which must be a sequential data set or PDS member. These utilities can not process an entire partitioned data set, see IEBCOPY to do this.

Example 1: Copy Disk to Disk

//stepname EXEC PGM=ICEGENER

//SYSIN DD DUMMY

//SYSPRINT DD SYSOUT=*

//SYSUT1 DD DSN=dsname,DISP=SHR

//SYSUT2 DD DSN=dsname,DISP=OLD

Example 2: Concatenate many members to one tape data set

//stepname EXEC PGM=ICEGENER

//SYSIN DD DUMMY

//SYSPRINT DD SYSOUT=*

//SYSUT1 DD DSN=dsname(member),DISP=SHR

// DD DSN=dsname(member),DISP=SHR

// DD DSN=dsname(member),DLSP=SHR

//SYSUT2 DD DSN=dsname,

// DISP = (NEW, CATLG, DELETE),

// UNIT= (CART, ,DEFER),

// LABEL=(1 ,SL,RETPD=days),

//………..DCB=(*.SYSUT1)

IEBCOPY

This utility can process entire partitioned data sets at once. It has two main uses: to copy members from one PDS to another, and to compress a PDS. DM5/OS can also be used to compress a PDS.

Example 1: Copy all members from one PDS to another

//stepname EXEC PGM=IEBCOPY

//SYSUT1 DD DSN=dsname,DISP=OLD

//SYSUT2 DD DSN=dsnaine,DISP= OLD

//SYSPRINT DD SYSOUT=*

//SYSIN DD DATA

COPY OUTDD=SYSUT2,INDD=SYSUT1

/*

Note: Any identically named members already existing in SYSUT1 will NOT be copied to SYSUT2. To replace members with the same name use INDD=((SYSUT1,R)).

Example 2: Copy all members from two PDSs to one

//stepname EXEC PGM=IEBCOPY

//INDD1 DD DSN=dsname,DISP=OLD

//INDD2 DD DSN=dsname,DISP=OLD

//OUTDD1 DD DSN=dsname,DISP=OLD

//SYSPRINT DD SYSOUT=*

//SYSIN DD DATA

COPY OUTDD=OUTDD1,INDD=((INDD1,R),(INDD2,R))

/*

Example 3: Copy selected members, with replacement

//stepname EXEC PGM=IEBCOPY

//SYSUT1 DD DSN=dsname,DISP=OLD

//SYSUT2 DD DSN=dsname,DISP=OLD

//SYSPRINT DD SYSOUT=*

//SYSIN DD DATA

COPY OUTDD=SYSUT2,INDD=((SYSUT1,R))

SELECT MEMBER=(member[,member]…)

/*

Example 4: Compress two PDSs

//stepname EXEC PGM=IEBCOPY

//PDS1 DD DSN=dsname,DISP=OLD

//PDS2 DD DSN=dsname,DISP=OLD

//SYSPRINT DD SYSOUT=*

//SYSIN DD DATA

COPY OUTDD=PDS1,INDD=PDS1

COPY OUTDD=PDS2,INDD=PDS2

/*

IDCAMS

IDCAMS is IBM’s Access Method Services utility and has a large number of facilities. This section explains some of the non-VSAM functions, the VSAM functions are explained in a later section.

IDCAMS has three types of useful non—VSAM functions.

  • Data sets and PDS members can be renamed or deleted.

  • Data sets and PDS members can be dumped to a print file.

  • Generation Data Groups (GDG) can be defined or deleted.

Syntax: Data set management

//stepname EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD DATA

DELETE dsname /* delete a data set */

DELETE dsname(member) /* delete a member */

DELETE gdg-base GDG PURGE /* delete a GDG base */

 

ALTER dsname NEWNAME(dsname) /* rename a data set */

ALTER dsname(member) NEWNAME(dsname(member)) /* rename a member */

 

LISTCAT ENTRIES(dsname) ALL /* data set information */

/*

Syntax: Dump records from a data set

//stepname EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//ddname DD DSN=dsname,DISP=SHR

//SYSIN DD DATA

PRINT INFILE(ddname)

[COUNT(record-count) –

[SKIP(skip-count) -]

[CHARACTER | HEX | DUMP]

/*

Where

record-count

is the number of records to be printed

skip-count

is the number of records to skip before commencing printing

CHARACTER

printing is to be in character format only

HEX

printing is to be in hex format only

DUMP

printing is to be a combined character and hex format

Syntax: Create Generation Data Group (GDG)

//stepname EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD DATA

DEFINE GDG (NAME(gdg-base) LIMIT(limit) NOEMPTY SCRATCH)

/*

Where

gdg-base

is the name of the GDG, which should be a valid data set name

limit

is the number of generations to be kept

DFSORT

This utility sorts data sets into the order specified by the FIELDS parameter. The data is sorted from the SORTIN file to the SORTOUT file. You can not sort a data set back to itself. If this is necessary you must sort to a temporary data set and then copy the data back to the original.

Syntax

//stepname EXEC PGM=SORT

//SYSOUT DD SYSOUT=*

//SORTIN DD DSN=dsname,DISP=OLD

//SORTOUT DD DSN=dsname,DISP=OLD

//SYSIN DD DATA

SORT FIELDS=(start,length,CH,order[,…]),

FILESZ=Esize,DYNALLOC=(SYSDA,3)

/*

Where

start

The string starting position

length

The length of the string

order

Ascending (A) or Descending (D)

size

An estimate of the number of records in the data set

IKJEFT01 (Batch TSO)

Most TSQ commands can be executed from a batch job by using this utility. Commands will not work if they perform full screen I/O (eg: ISPF). There are some commands that just do not work in this mode, however all of the common commands will work correctly. There is little point using this utility to run programs which can be run in batch directly, such as SAS and Natural.

Syntax

//stepname EXEC PGM=IKJET01

//SYSTSPRT DD SYSOUT=*

//SYSTSIN DD DATA

TSO-commands

/*

JCL Procedures

JCL Procedures perform a similar function to copy books in Cobol. The JCL contained in the procedure library is copied to the job and any parameters are substituted when the procedure is referenced. A number of procedures have been predefined as part of MVS, further procedures have been created to user applications.

Procedures Libraries (PROCLIBs)

In order to use a procedure it must be made available to the job. There are three ways this can occur.

  • The procedure is defined in one of the MVS system PROCLIBs, such as SYS1.PROCLIB.

  • The procedure is defined in a user PROCLIB which has been made available to the job by a DD statement following the JOB card. This is not part of standard JCL, but is performed by EasyProc which is a third-party enhancement product. There can be more than one user PROCLIB defined, but they all must end with ‘.PROCLIB’. Refer to following examples.

  • The procedure is defined as part of the JCL.

The first two types are known as ‘Cataloged Procedures’, while the later type is an ‘Instream Procedure’. Apart from the use of the PEND statement when using Instream Procedures, there are no syntax differences between the two types.

Example 1: Using system procedure

//jobname JOB ‘account code’,‘programmer name’,

// CLASS=class,MSGCLASS=msgclass,

// REGION=4M,MSGLEVEL=(2,0),

// NOTIFY=userid

//*

//stepname EXEC PROC = SAS,

// PARM=’MACRO DQUOTE NOTEXT82′

//SYSIN DD DSN=dsname(member),DISP=SHR

 

Example 2: Using a user procedure library

//jobname JOB ‘account code’,‘programmer name’,

// CLASS=class,MSGCLASS=msgclass,

// REGION=4M,MSGLEVEL=(2,0),

// NOTIFY=userid

//*

//PROCLIB DD DSN=dsna1ne,DISP=SHR

// DD DSN=dsname,DISP=SHR

//*

//stepname EXEC PROC=procname

Example 3: An Instream procedure

//jobname JOB ‘account code’,‘programmer name’,

// CLASS=class,MSGCLASS=msgclass,

// REGION=4M,MSGLEVEL=(2,0),

// NOTIFY=userid

//*

//procname PROC

//stepname EXEC PGM=program

//ddname DD DSN=dsname,DISP=SHR

//ddname DD SYSOUT=*

// PEND

//*

//stepname EXEC PROC =procname

Symbolic Parameters

Procedures are usually made more general by using symbolic parameters to substitute for common and/or important values within the procedure. Some of the values that can be substituted by symbolic parameters are: Data set names, Member names, Parameters, Unit names, Volume serial numbers, etc. The only item that can not be substituted is the program name on an EXEC card.

Example: Symbolic parameters with a Instream procedure

//jobname JOB ‘account code’,‘programmer name’,

// CLASS=class,MSGCLASS=msgclass,

// REGION=4M,MSGLEVEL=(2,0),

// NOTIFY=userid

//*

//procname PROC DSN=‘dsname’,SYS=‘class’
//stepname EXEC PGM=program

//ddnamel DD DSN=&DSN,DISPSHR

//ddname2 DD SYSOUT=(&SYS)

// PEND

//*

//stepname EXEC PROC=procname,SYS=‘value’

Limitations of Procedures

There are two main limitations when using procedures, nesting and instream data.

A procedure can not refer to another procedure. This mainly caused problems when trying to use system procedures within user procedures. For example, from within a user procedure you can not call the SAS procedure. The solution is to copy the system procedure into the user procedure and edit it to suit. Of course this can cause problems when the system procedure is updated, since those changes may have to be reflected into the user procedure.

A procedure can not contain instream data (ie: DD DATA) This mainly causes problems with control information for utilities such as DFSQRT and IEBCOPY. The solution is to create a data set to contain the control information and refer to the member in the JCL.

Procedure Overrides

Overrides provide a way of changing a procedure for the duration of a job. Any DD statement maybe changed by using overrides, as follows.

Example: Override ddname1

//jobname JOB ‘account code’,‘programmer name’,

// CLASS=class,MSGCLASS=msgclass,

// REGION=4M,MSGLEVEL=(2,0),

// NOTIFY=userid

//*

//procname PROC

//procstep EXEC PGM=program

//ddnamel DD DSN=dSname,DISPSHR

//ddname2 DD SYSOUT=*

// PEND

//*

//stepname EXEC PROC=procname

//procstep.ddname1 DD DSN=dsname,DJSP SHR

Resources

Website

https://paulshipley.id.au

Reference

The following references provide more detailed information and definitions about MVS JCL.

Practical MVS JCL For Today’s Programmer, James G. Janossy, 1987, John Wiley & Sons Inc, ISBN 0-471-83648-6

MVS/Extended Architecture JCL Reference, International Business Machines Corporation, 1985-1989, GC28-1352-4

MVS/Extended Architecture JCL User’s Guide, International Business Machines Corporation, 1985-1989, GC28-1351-4

The following references provide information about utilities and other facilities.

Janossy, Ch 17 JCL Tools: Compiler, Sort, VSAM, And Utility JCL

MVS/Extended Architecture Data Administration:Utilities, International Business Machines Corporation, 1982-1984, GC26-4018-1

SAS Companion for the MVS Environment, Version 6, SAS Institute Inc, 1990, ISBN 1-55544-398-2

The following references provide information about system abends and messages.

Janossy, Appendix F System Completion Codes and Subcodes

MVS/Extended Architecture Message Library: System Codes, International Business Machines Corporation,1982-1986, GC28-1157-4

MVS/Extended Architecture Message Library: System Messages Volume 1 ADY-IEB, International Business Machines Corporation, 1982-1989, GC28-1376-7

MVS/Extended Architecture Message Library: System Messages Volume 2 IEC-ITV, International Business Machines Corporation, 1982-1989, GC28-1377-7

The following references provide information about Virtual Storage Access Method (VSAM).

Janossy, Chapter 11 AMP: Access Method (VSAM) Parameter

Practical VSAM for Today’s Programmers, James G. Janossy & Richard E. Guzik, 1988, John Wiley & Sons, ISBN 0-471-85107-8

About the author

Paul Shipley has been a software developer for over twenty years and has done a bit of just about everything. He is a co-author of Photoshop Elements 2: Zero to Hero (ISBN 1 904344 23 2).

— End of Document —

 

1,887 views

Need help? Let me take care of your IT issues.

Share this page

Scroll to Top