IDCAMS IDCAMS (
Access Method Services) generates and modifies
Virtual Storage Access Method (VSAM) and Non-VSAM datasets. IDCAMS was introduced along with VSAM in
OS/VS; the "Access Method" reference derives from the initial "VSAM replaces all other access methods" mindset of OS/VS. IDCAMS probably has the most functionality of all the utility programs, performing many functions, for both VSAM and non-VSAM files. The following example illustrates the use of IDCAMS to copy a dataset to disk. The dataset has 80-byte records, and the system will choose the block size for the output: //XXXXXXXW JOB XXXXXXX,AAAA,CLASS=G,MSGCLASS=1,NOTIFY=&SYSUID //STEP001 EXEC PGM=IDCAMS //SYSIN DD * REPRO INFILE(FILE01) OUTFILE(FILE02) /* //FILE01 DD DSN=PROD.FILE1.INPUT,disp=shr ..... //FILE02 DD DSN=PROD.FILE2.OUTPUT, // DISP=(NEW,CATLG,DELETE), // UNIT=DASD, // SPACE=(TRK,(100,10),RLSE), // DCB=(RECFM=FB,BLKSIZE=0,LRECL=80) //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //* In the example above, control cards are coming from an in-stream file, but you can instead point to any sequential file or a PDS member containing control cards or a temporary data-set, if you wish. Example of using SYSIN files would be something like this: //SYSIN DD DSN=PROD.MYFILE.REPRO,DISP=SHR or this: //SYSIN DD DSN=PROD.MYLIB.CNTLLIB(REPRO), // DISP=SHR
IEBCOMPR IEBCOMPR compares records in sequential or partitioned
data sets. The IEBCOMPR utility is used to compare two
sequential or
partitioned datasets. This data set comparison is performed at the logical record level. Therefore, IEBCOMPR is commonly used to verify that a backup copy of a data set is correct (exact match to the original). During processing, IEBCOMPR compares each record from each data set, one by one. If the records are unequal, IEBCOMPR lists the following information in the : • The record and block numbers in question. • The names of the DD statements in which the inconsistency occurred. • The unequal records. When comparing sequential data sets, IEBCOMPR considers the data sets equal if the following conditions are met: :* The data sets contain the same number of records. :* The corresponding records and keys are identical. For
partitioned data sets, IEBCOMPR considers the data sets equal if the following conditions are met: :* The directory entries for the two partitioned data sets match - that is, the names are the same, and the number of entries are equal. :* The corresponding members contain the same number of records. :* The corresponding records and keys are identical. If ten unequal comparisons are encountered during processing, IECOMPR terminates with the appropriate message. //XXXXXXXW JOB XXXXXXX,AAAA.A.A,CLASS=G,MSGCLASS=1,NOTIFY=XXXXX //STEP01 EXEC PGM=IEBCOMPR,ACCT=PJ00000000 // INCLUDE MEMBER=@BATCHS //*SYSIN DD DUMMY //SYSIN DD * COMPARE TYPORG=PO /* //SYSUT1 DD DSN=XXXXXXX.OLDFILE,UNIT=DASD,DISP=SHR //SYSUT2 DD DSN=XXXXXXX.NEWFILE,UNIT=DASD,DISP=SHR //SYSUT# DD IEBCOMPR is not a very flexible or user-friendly compare program. It can't restrict the comparison to only certain columns, it can't ignore differences in white space, it doesn't tell you where in the record the difference occurs, and it halts after 10 differences. On the other hand, it is fast, and it is present on all IBM mainframes running OS/360 and successors. So it is very useful when an exact match is expected, such as comparing load modules that have not been reblocked, or checking that a copy worked properly. For comparisons of programs or reports, the
ISPF SuperC (ISRSUPC) compare program is often used instead.
IEBCOPY IEBCOPY copies, compresses and merges partitioned
data sets. It can also select or exclude specified members during the copy operation, and rename or replace members. Some of the tasks that IEBCOPY can perform include the following: • Creating an unload of a
partitioned data set (PDS) to a PS dataset, for backup or transmission. • Copying a PDS in place to reclaim the unused space from deleted members; also called compressing a PDS. • Copying selected members to another PDS. • Renaming selected members of a PDS. • Merging multiple partitioned data sets into a single PDS. • Altering, copying and reblocking load modules. • Members that are already present in another PDS will not get replaced unless the R option is specified. For the IEBCOPY
utility, the required job control statements for a copy are as follows: //stepname EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=class //MYDD1 DD DSN=xxxx.ppp.psps,DISP=SHR //MYDD2 DD DSN=xxxx.ppp.pssp,DISP=SHR //SYSIN DD * COPY INDD=MYDD1,OUTDD=MYDD2 SELECT MEMBER=(MEM1,MEM2,MEM3)/ EXCLUDE MEMBER=(SF,DF,SA) The MYDD1 and MYDD2 DD statements are names chosen by the user for the partitioned input and output data sets, respectively; The defaults are and . You can use any valid DDNAME for these two DD statements. These DDNAMEs are specified in the utility control statements to tell IEBCOPY the name of the input and output data sets. You only need one DD statement for a PDS to be compressed.
IEBDG IEBDG ('Data Generator') creates test datasets consisting of patterned data. Control statements define the fields of the records to be created, including position, length, format, and initialization to be performed. IEBDG can use an existing dataset as input and change fields as specified in the control statements, for example replacing a name field by random alphabetic text. The contents of each field may be varied for each record, for example by rotating the characters in an alphanumeric field left or right for each subsequent record. Example: //XXXXXXXW JOB XXXXXXX,AAAA,CLASS=G,MSGCLASS=1,NOTIFY=&SYSUID //********************************************************************** //* CREATION OF A DATASET To BE USED LATER ON //********************************************************************** //CRSTEP EXEC PGM=IEFBR14 //DDCREA DD DSN=&SYSUID..MVSUT.SEQOUT,DISP=(NEW,CATLG) //********************************************************************** //* CREATION OF THE TESTDATA //********************************************************************** //STEP1 EXEC PGM=IEBDG //SYSPRINT DD SYSOUT=* //SEQOUT DD DSN=&SYSUID..MVSUT.SEQOUT,DISP=OLD //SYSIN DD DATA DSD OUTPUT=(SEQOUT) FD NAME=FIELD1,LENGTH=30,STARTLOC=1,FORMAT=AL,ACTION=TL FD NAME=FIELD2,LENGTH=30,STARTLOC=31,FORMAT=AL,ACTION=TR FD NAME=FIELD3,LENGTH=10,STARTLOC=71,PICTURE=10, X P'1234567890',INDEX=1 CREATE QUANTITY=500,NAME=(FIELD1,FIELD2,FIELD3),FILL=X'FF' END /* //********************************************************************** //* PRINTING THE TEST DATA TO SYSOUT //********************************************************************** //STEP2 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=*.STEP1.SEQOUT,DISP=SHR //SYSIN DD DUMMY //SYSUT2 DD SYSOUT=* //********************************************************************** //* DELETE THE CREATED DATASET, EVEN IF PREVIOUS STEPS ABENDED //********************************************************************** //DLSTEP EXEC PGM=IEFBR14,COND=EVEN //DDDEL DD DSN=&SYSUID..MVSUT.SEQOUT,DISP=(OLD,DELETE,DELETE) //
IEBEDIT IEBEDIT selectively copies portions of JCL. An example of an IEBEDIT program: //IEBEDITJ JOB ACCT,'',CLASS=P,MSGCLASS=T,MSGLEVEL=(1,1),NOTIFY=&SYSUID //STEP0001 EXEC PGM=IEBEDIT //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=xxxxx.yyyyy.zzzzz,DISP=SHR //SYSUT2 DD SYSOUT=(*,INTRDR) //SYSIN DD * EDIT TYPE=INCLUDE,STEPNAME=(STEP10,STEP5,STEP15) /* // In this example, data set xxxxx.yyyyy.zzzzz should contain job(s) (which should include steps named STEP5, STEP10, and STEP15). This IEBEDIT routine copies the selected steps of the job onto the SYSUT2 output file (in this example, the internal reader). The syntax of the EDIT statement is: [label] EDIT [START=jobname] [,TYPE={POSITION|INCLUDE|EXCLUDE}] [,STEPNAME=(namelist)] [,NOPRINT] START=jobname specifies the name of the input job to which the EDIT statement applies. Each EDIT statement must apply to a separate job. If START is specified without TYPE and STEPNAME, the JOB statement and all job steps for the specified job are included in the output. Default: If START is omitted and only one EDIT statement is provided, the first job encountered in the input data set is processed. If START is omitted from an EDIT statement other than the first statement, processing continues with the next JOB statement found in the input data set. TYPE={POSITION|INCLUDE|EXCLUDE} specifies the contents of the output data set. These values can be coded: POSITION specifies that the output is to consist of a JOB statement, the job step specified in the STEPNAME parameter, and all steps that follow that job step. All job steps preceding the specified step are omitted from the operation. POSITION is the default. INCLUDE specifies that the output data set is to contain a JOB statement and all job steps specified in the STEPNAME parameter. EXCLUDE specifies that the output data set is to contain a JOB statement and all job steps belonging to the job except those steps specified in the STEPNAME parameter. STEPNAME=(namelist) specifies the names of the job steps that you want to process. namelist can be a single job step name, a list of step names separated by commas, or a sequential range of steps separated by a hyphen (for example, STEPA-STEPE). Any combination of these may be used in one namelist. If more than one step name is specified, the entire namelist must be enclosed in parentheses. When coded with , STEPNAME specifies the first job step to be placed in the output data set. Job steps preceding this step are not copied to the output data set. When coded with or , STEPNAME specifies the names of job steps that are to be included in or excluded from the operation. For example, indicates that job steps STEPA, STEPF through STEPL, and STEPZ are to be included in or excluded from the operation. If STEPNAME is omitted, the entire input job whose name is specified on the EDIT statement is copied. If no job name is specified, the first job encountered is processed. NOPRINT specifies that the message data set is not to include a listing of the output data set. Default: The resultant output is listed in the message data set. See here for more info:
IEBGENER IEBGENER copies records from a sequential dataset, or creates a partitioned dataset. Some of the tasks that IEBGENER can perform include the following: • Creating a backup of a
sequential data set or a member of a
PDS. • Changing the physical
block size or logical record length of a sequential data set. • Creating an edited data set. • Printing a sequential data set or a member of a PDS. • Creating partitioned output data set from sequential input data set. An example of an IEBGENER program to copy one dataset to another: //IEBGENER JOB ACCT,'DATA COPY',MSGCLASS=J,CLASS=A //STEP010 EXEC PGM=IEBGENER //SYSUT1 DD DSN=xxxxx.yyyyy.zzzzz,DISP=SHR //SYSUT2 DD DSN=aaaaa.bbbbb.ccccc,DISP=(,CATLG), // UNIT=SYSDA,SPACE=(TRK,(5,5),RLSE), // DCB=(RECFM=FB,LRECL=1440) //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY For straight copy tasks, the
sort program can often do these faster than IEBGENER. Thus many mainframe shops make use of an option that automatically routes such tasks to the sort ICEGENER program instead of IEBGENER. On some systems it is possible to send
email from a batch job by directing the output to the "SMTP"
external writer. On such systems, the technique is as follows: //IEBGENER JOB ACCT,'DATA COPY',MSGCLASS=J,CLASS=A //NORMRC EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD *,LRECL=80 HELO MAIL FROM: RCPT TO: DATA From: To: Subject: Test Mail TEST MAIL FROM MAINFRAME . QUIT /* //SYSUT2 DD SYSOUT=(B,SMTP),LRECL=80 //SYSIN DD DUMMY It is also possible to attach files while sending the email from Mainframe.
IEBIMAGE IEBIMAGE manipulates several types of definitions (AKA
images) for the IBM 3211 printer,
IBM 3800 laser printing subsystem and the IBM 4248 printer. Common uses are for forms control buffers (
FCBs), character arrangement tables, character definitions and images of forms to be printed on the output along with the text, for company logos to be printed on the page, or just to print 'graybar' pages (alternating gray & white horizontal backgrounds, to match the previous
greenbar paper). With this utility, many different forms or logos could be stored as images, and printed when needed, all using the same standard blank paper, thus eliminating the need to stock many preprinted forms, and the need for operators to stop the printer and change paper.
IEBISAM IEBISAM unloads, loads, copies and prints
ISAM datasets. Extracted from IBM manual SC26-7414-08 z/OS DFSMSdfp Utilities: The IEBISAM program is no longer distributed. Starting in z/OS V1R7, ISAM data sets can no longer be processed (created, opened, copied or dumped). ISAM data sets that are still in use must be converted to VSAM key-sequenced data sets. Prior to z/OS V1R7, you could use access method services to allocate a VSAM key-sequenced data set and copy an ISAM data set into it.
IEBPTPCH IEBPTPCH ("PrinT and PunCH") prints or punches records from a sequential or partitioned dataset. Some of the tasks that IEBPTPCH can perform include the following: • Printing or punching an entire
data set, sequential or partitioned (PDS). • Printing or punching selected PDS members. • Printing or punching selected records from a sequential or partitioned data set. • Printing or punching a PDS directory. • Printing or punching an edited version of a sequential data set or PDS. • Check for empty dataset //IEBPTPCH JOB // EXEC PGM=IEBPTPCH //SYSIN DD * PRINT MAXFLDS=2 TITLE ITEM=('Name',22), ITEM=('GPA',50) TITLE ITEM=(' ',1) RECORD FIELD=(25,1,,22), FIELD=(4,51,,50) /* //SYSPRINT DD SYSOUT=* //SYSUT1 DD * Person 1 307 C Meshel Hall 3.89 Second person 123 Williamson Hall 2.48 3rd person 321 Maag Library 1.52 /* //SYSUT2 DD SYSOUT=* //
Empty dataset check: If dataset to be checked is empty then RC=4 else 0. //IEBPTPCH JOB // EXEC PGM=IEBPTPCH //SYSUT1 DD DSN=,DISP=SHR //SYSUT2 DD DUMMY, // DCB=(BLKSIZE=,RECFM=FA) //SYSIN DD * PRINT TYPORG=PS /* //SYSPRINT DD SYSOUT=* //
IEBTCRIN Read records from an
IBM 2495 Tape Cartridge Reader. Final support for IEBTCRIN was dropped from z/OS 1.3.0 in 2002.
IEBUPDAT Changes records in a sequential dataset or in a member of a partitioned dataset, replaced by, but not compatible with, IEBUPDTE.
IEBUPDTE IEBUPDTE ("UPDaTE") incorporates changes to sequential or partitioned datasets. The UNIX
patch utility is a similar program, but uses different input format markers (
e.g., in MVS becomes in Unix Patch). Some programmers pronounce it "I.E.B. up-ditty". The IEBUPDTE utility is used to maintain source libraries. Some of the functions that IEBUPDTE can perform include the following: • Creating and updating
libraries • Modifying sequential data sets or PDS members • Changing the organization of a data set from sequential to partitioned or from partitioned to sequential. IEBUPDTE is commonly used to distribute source libraries from tape to
DASD. IEBUPDTE uses the same job control statements required by most IEB-type utilities. The only exceptions are as follow: • IEBUPDTE accepts a parameter coded on the statement, or . indicates that the utility control statements and the input data are contained in the DD statement, so no DD statement is needed. indicates that the statement contains only utility control statements, without input data. Therefore, the statement is required to define the input data set. • IEBUPDTE reads the input data set from either the statement or from the statement. The job control used by IEUPDTE are as follows: //stepname EXEC PGM=IEUPDTE,PARM=NEW //SYSPRINT DD SYSOUT=class //SYSUT1 DD ... //SYSUT2 DD ... //SYSIN DD ... ==Scheduler utilities==