Showing posts with label PDSE. Show all posts
Showing posts with label PDSE. Show all posts

Saturday, 10 August 2013

IEBCOMPR Utility JCL: Compare Data Sets and Use SuperC

The IEBCOMPR utility compares two z/OS data sets at the logical-record level. A familiar step starts with //COMPARE EXEC PGM=IEBCOMPR, assigns the inputs to SYSUT1 and SYSUT2, and sends the comparison report to SYSPRINT.

Current IBM guidance: use SuperC instead of IEBCOMPR for new comparison work. IEBCOMPR remains useful when reading or maintaining established JCL and when a simple copy-verification step is already part of an operating procedure.
IEBCOMPR utility comparing SYSUT1 and SYSUT2 data sets with a recommendation to use SuperC for new work
IEBCOMPR reads two inputs and reports record-level differences through SYSPRINT.

What IEBCOMPR compares

IEBCOMPR can compare two sequential data sets, two partitioned data sets (PDS), or two partitioned data sets extended (PDSE). It supports fixed, variable, and undefined record formats, whether blocked or unblocked. The two inputs must have the same logical record length. Their block sizes can differ.

A sequential pair is equal when both inputs contain the same number of records and each corresponding record is equal. If keyed records are involved, their keys must also agree. For a PDS or PDSE pair, corresponding members must have the same records, keys, note-list positions, and directory user data.

Do not use IEBCOMPR for everything: it does not compare VSAM data sets, and IBM specifically says not to use it for load modules. PDS and PDSE comparisons also have a practical limit of about 290,000 members.

For the wider utility family, see the JCL utility overview. IEBCOMPR is for comparison; IEBCOPY copies and maintains partitioned data sets, while IEBPTPCH prints or punches sequential and partitioned data.

IEBCOMPR DD statements

StatementPurposeImportant point
EXEC PGM=IEBCOMPRRuns the comparison program.Give the step a clear name so later JCL can test its condition code.
SYSPRINTReceives messages and the difference report.Required. Review it even when automation tests the step result.
SYSUT1Defines the first input data set.Input can also be passed from an earlier step.
SYSUT2Defines the second input data set.Its LRECL must match SYSUT1; BLKSIZE may differ.
SYSINSupplies IEBCOMPR control statements.Use DD DUMMY for a basic sequential comparison.

The JCL EXEC statement selects the program, and the JCL DD statement connects the program to each data set.

Sequential data set comparison JCL

This example compares a source data set with its backup. No user exit, label processing, or organization override is required, so SYSIN DD DUMMY is sufficient.

//COMPARE EXEC PGM=IEBCOMPR //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=USER1.SOURCE.DATA,DISP=SHR //SYSUT2 DD DSN=USER1.BACKUP.DATA,DISP=SHR //SYSIN DD DUMMY

IEBCOMPR treats sequential organization as the default. If records differ, the report identifies the record and block numbers, the associated DD names, and the unequal record contents. After ten successive unequal comparisons, IEBCOMPR stops the step unless a user exit takes control.

Operational check: inspect both the job-step condition code and SYSPRINT. The report explains where a mismatch occurred; do not replace that evidence with an assumed return-code meaning.

PDS or PDSE comparison JCL

For partitioned organization, the COMPARE statement must be the first control statement and TYPORG=PO identifies PDS or PDSE input.

//COMPARE EXEC PGM=IEBCOMPR //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=USER1.PROCLIB,DISP=SHR //SYSUT2 DD DSN=USER1.PROCLIB.BACKUP,DISP=SHR //SYSIN DD * COMPARE TYPORG=PO /*

The alternative TYPORG=PS explicitly selects sequential organization. A COMPARE statement is also required when IEBCOMPR exit routines or label processing are requested.

Compare a data set after a copy step

A verification flow should run the comparison only if the copy completed successfully. The following example copies a sequential data set and then compares source with target. It intentionally keeps allocation details short; production jobs should follow local SMS, retention, and catalog standards.

//COPY EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=USER1.INPUT.DATA,DISP=SHR //SYSUT2 DD DSN=USER1.OUTPUT.DATA,DISP=OLD //SYSIN DD DUMMY //SYSUT3 DD DUMMY //SYSUT4 DD DUMMY // IF (COPY.RC = 0) THEN //VERIFY EXEC PGM=IEBCOMPR //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=USER1.INPUT.DATA,DISP=SHR //SYSUT2 DD DSN=USER1.OUTPUT.DATA,DISP=SHR //SYSIN DD DUMMY // ENDIF

This pattern separates the copy result from the comparison result. A scheduler or later step can react to the named VERIFY step, while SYSPRINT retains the detailed diagnostic report.

Record format and allocation checks

  • LRECL: SYSUT1 and SYSUT2 must have the same logical record length or IEBCOMPR considers them unequal.
  • BLKSIZE: block sizes may differ. For fixed blocked records, each block size must be a multiple of LRECL and cannot exceed 32,760 bytes.
  • Organization: compare sequential with sequential or partitioned with partitioned; select partitioned processing with TYPORG=PO.
  • VSAM: IEBCOMPR is part of the non-VSAM data set utility group and is not a VSAM comparison tool.
  • Program objects: use a suitable program-object or library tool rather than IEBCOMPR to validate load modules.

IEBCOMPR versus SuperC

RequirementIEBCOMPRSuperC
IBM direction for new comparisonsRetained mainly for compatibility with existing jobs.IBM's recommended choice instead of IEBCOMPR.
OperationBatch utility called with PGM=IEBCOMPR.Foreground through ISPF option 3.12 or batch with PGM=ISRSUPC.
Comparison choicesLogical-record comparison with a traditional difference listing.File, line, word, and byte comparison with reporting options such as DELTA, CHNG, LONG, and OVSUM.
Best reason to keep itAn established, tested job requires the original behavior.A new or revised process needs clearer reports and more comparison control.

Migration is not only a program-name substitution. Test the SuperC options, sequence-column handling, report format, return-code expectations, and downstream automation before replacing an established IEBCOMPR step.

Troubleshooting an IEBCOMPR step

  • If the step reports immediate inequality, compare the two LRECL values and confirm both DD statements identify the intended generation or copy.
  • If a PDS or PDSE job is treated incorrectly, confirm that COMPARE TYPORG=PO is the first SYSIN control statement.
  • If output is truncated or hard to read, check the SYSPRINT allocation and spool destination before changing the comparison logic.
  • If the step stops after repeated differences, remember the ten-successive-mismatch rule and inspect the earliest reported records.
  • If the target is VSAM or a program library, choose a tool designed for that data type.

For readers learning the surrounding syntax, the JCL tutorial explains job, EXEC, and DD structure before utility-specific control statements are added.

Official IBM references

Frequently asked questions

What does the IEBCOMPR utility compare?

IEBCOMPR compares two sequential data sets, two partitioned data sets, or two PDSEs at the logical-record level. It is often retained in jobs that verify a backup or copy.

Is SYSIN required for IEBCOMPR?

Yes. Code SYSIN DD DUMMY for a basic sequential comparison without user routines. Supply a COMPARE statement for a PDS or PDSE comparison and when exits or labels are used.

Can IEBCOMPR compare VSAM data sets or load modules?

No. The z/OS data set utilities described for IEBCOMPR do not support VSAM, and IBM says not to use IEBCOMPR to compare load modules.

Should a new job use IEBCOMPR or SuperC?

IBM recommends SuperC instead of IEBCOMPR for new comparison work. SuperC offers foreground and batch operation plus more useful reporting and comparison choices.

Working rule: preserve IEBCOMPR where compatibility matters, but assess SuperC when creating or materially revising a comparison process.

Sunday, 4 August 2013

IEBPTPCH PRINT Statement: JCL and Parameter Examples

PRINT TYPORG=PS,STOPAFT=100 tells IEBPTPCH to print the first 100 logical records from a sequential data set. The utility can also print an entire PDS or PDSE, selected members, selected records, hexadecimal output, packed-decimal conversions, or a listing with page titles.

IEBPTPCH PRINT flow showing SYSUT1 input, SYSIN controls, SYSUT2 output, and SYSPRINT messages
SYSUT1 supplies the records, SYSIN controls printing, SYSUT2 receives output, and SYSPRINT records messages.

What the IEBPTPCH PRINT statement handles

IEBPTPCH is a DFSMSdfp utility for printing or punching all or selected portions of a non-VSAM sequential data set, partitioned data set, or PDSE. “Print” does not require a physical printer: SYSUT2 can point to SYSOUT, disk, or tape.

This page focuses on the PRINT function and its common JCL parameters. Use the broader IEBPTPCH overview for default output-format details, PUNCH processing, and advanced editing.

Required IEBPTPCH DD statements

StatementPurpose
EXEC PGM=IEBPTPCHRuns the print-punch utility.
SYSPRINT DDReceives utility messages and diagnostics; required for each run.
SYSUT1 DDDefines the sequential, PDS, or PDSE input.
SYSUT2 DDDefines the formatted print output, commonly a SYSOUT class.
SYSIN DDContains the PRINT statement and optional TITLE, EXITS, MEMBER, and RECORD statements.

The JCL DD statement guide explains data-set references, SYSOUT, and disposition processing.

Print a sequential data set

//PRTSEQ   EXEC PGM=IEBPTPCH
//SYSPRINT DD  SYSOUT=*
//SYSUT1   DD  DSN=APP.CUSTOMER.MASTER,DISP=SHR
//SYSUT2   DD  SYSOUT=*
//SYSIN    DD  *
  PRINT TYPORG=PS
/*

TYPORG=PS selects sequential input and is the default. Keeping it explicit can make production JCL easier to review. IEBPTPCH formats each input record for the output data set rather than copying the original record unchanged.

Print a limited record range

//PRTLIM   EXEC PGM=IEBPTPCH
//SYSPRINT DD  SYSOUT=*
//SYSUT1   DD  DSN=APP.TRANSACTION.FILE,DISP=SHR
//SYSUT2   DD  SYSOUT=*
//SYSIN    DD  *
  PRINT TYPORG=PS,STRTAFT=500,STOPAFT=100,MAXLINE=60
/*

STRTAFT=500 skips 500 logical records before printing begins. STOPAFT=100 then prints 100 logical records. IBM limits both values to 32767. For VS or VBS records longer than 32 KB, IBM documents block-oriented counting exceptions.

Count carefully: STOPAFT is the number printed after the skipped input, not the final input-record number. The example prints records 501 through 600 for ordinary sequential input.

Sample every nth record with SKIP

//SYSIN DD *
  PRINT TYPORG=PS,SKIP=10,STOPAFT=25
/*

SKIP=10 selects every tenth record. STOPAFT=25 limits the number of selected records printed. This is useful for a quick sample, but it is not a data-validation method because most input records are deliberately omitted.

Print selected PDS or PDSE members

//PRTMEM   EXEC PGM=IEBPTPCH
//SYSPRINT DD  SYSOUT=*
//SYSUT1   DD  DSN=APP.JCLLIB,DISP=SHR
//SYSUT2   DD  SYSOUT=*
//SYSIN    DD  *
  PRINT TYPORG=PO,MAXNAME=2,STOPAFT=200
  MEMBER NAME=DAILY01
  MEMBER NAME=MONTHEND
/*

TYPORG=PO identifies partitioned input. If a MEMBER statement is present, MAXNAME must be at least the number of member names and aliases that follow. Without MEMBER statements, IEBPTPCH processes all members under the selected function and format.

Use IEBCOPY when the requirement is to copy, merge, load, or unload PDS/PDSE members rather than print their contents.

Add a title and control page length

//SYSIN DD *
  PRINT TYPORG=PS,INITPG=1,MAXLINE=55
  TITLE ITEM=('CUSTOMER MASTER AUDIT',10)
/*

The first TITLE statement supplies a title and an optional second TITLE supplies a subtitle. For printed output, titles appear on each page. A title literal can contain up to 40 bytes; the optional location controls its starting output position.

INITPG sets the first page number and MAXLINE sets the maximum printed lines per page. IBM documents 60 as the default for MAXLINE. These two parameters apply to PRINT, not PUNCH.

Convert records to hexadecimal or expanded decimal

//SYSIN DD *
  PRINT TYPORG=PS,TOTCONV=XE,STOPAFT=20
/*

TOTCONV=XE converts the entire record to a two-character-per-byte hexadecimal representation. It is useful when blanks, packed fields, or nonprinting bytes make the character listing ambiguous.

TOTCONV=PZ expands packed-decimal data into decimal display characters, but IEBPTPCH does not validate whether every byte is actually packed decimal. Do not apply PZ blindly to a mixed-format record. Use RECORD and FIELD editing when only selected positions require conversion.

Use PREFORM only for preformatted input

PREFORM=A tells IEBPTPCH that the first byte contains an ASA control character. PREFORM=M identifies a machine-code control character. This is appropriate for output already formatted for printing, such as certain stored dump data sets.

PREFORM changes control processing. IBM states that when it is coded, most other PRINT or PUNCH operands and control statements are ignored, although they can still be syntax checked. Do not combine PREFORM with ordinary formatting options and expect both behaviors.

PRINT statement parameter reference

ParameterUse
TYPORG=PS|POSelects sequential or partitioned input; PS is the default.
STRTAFT=nSkips records before processing starts.
STOPAFT=nLimits the number of records printed.
SKIP=nPrints every nth record.
TOTCONV=XE|PZConverts the entire record to hexadecimal or expanded decimal output.
CNTRL=1|2|3Selects single, double, or triple spacing for PRINT.
MAXNAME=nDeclares capacity for subsequent MEMBER names and aliases.
MAXFLDS=nDeclares capacity for FIELD parameters in later RECORD statements.
INITPG=nSets the initial page number.
MAXLINE=nSets the maximum lines per printed page.
DBCS=YES|NOControls double-byte character-set processing; NO is the default.

Control-statement order

PRINT or PUNCH must be the first utility control statement, and both cannot be used in one control data set. When used, TITLE follows the function statement; EXITS follows TITLE or the function statement; MEMBER and RECORD statements follow in the required processing order.

Keep utility control statements separate from JCL. They belong after SYSIN DD * or in the SYSIN data set. The JCL tutorial shows how JOB, EXEC, DD, and in-stream data work together.

Common IEBPTPCH failures

  • Omitting one of the required DD statements.
  • Using TYPORG=PS for a PDS or PDSE.
  • Coding MEMBER statements without a sufficient MAXNAME.
  • Assuming STOPAFT means the absolute ending input-record number.
  • Applying TOTCONV=PZ to fields that are not packed decimal.
  • Combining PREFORM with options that it causes the utility to ignore.
  • Sending a long listing to the wrong SYSOUT class.
  • Expecting IEBPTPCH to process VSAM input.

Check SYSPRINT first when the step returns a nonzero code. It contains the utility messages and echoed control information needed to locate DD-name and syntax problems.

Choose the right utility

  • Use IEBPTPCH to print or punch sequential/PDS/PDSE records.
  • Use IEBGENER to copy sequential records or create PDS/PDSE members from sequential input.
  • Use IEBCOPY for PDS/PDSE copy and maintenance operations.
  • Use IEHLIST to list directory, catalog, or VTOC information in its supported cases.

The mainframe utilities guide maps other common data-management jobs to the appropriate program.

Official IBM references

IEBPTPCH PRINT statement FAQ

What does the IEBPTPCH PRINT statement do?

It tells IEBPTPCH to format and write all or selected records from a sequential data set, PDS, or PDSE to the SYSUT2 output data set. SYSUT2 can be SYSOUT, disk, or tape.

How do I print only the first 100 records with IEBPTPCH?

Code PRINT TYPORG=PS,STOPAFT=100 in SYSIN. STOPAFT limits the number of logical records printed for ordinary sequential input.

How do I print selected PDS members with IEBPTPCH?

Use TYPORG=PO, set MAXNAME to at least the number of names that follow, and code one MEMBER NAME=member statement for each selected member.

Can I code PRINT and PUNCH in the same IEBPTPCH step?

No. IBM requires PRINT or PUNCH as the first utility control statement, and only one of those functions can be used in a control data set.

For a bounded production listing, start with PRINT TYPORG=PS,STRTAFT=n,STOPAFT=n and verify the selected SYSOUT class before submitting the job.

New In-feed ads