z/OS message

ICE043A: Invalid data set attributes

ICE043A means DFSORT found a record format, record length or block size that is invalid, or that conflicts with another data set in the job. The message names the ddname, the attribute (RECFM, LRECL or BLKSIZE) and a reason code that says exactly which conflict it found.

Other names for this code

Also written as ICE043A INVALID DATA SET ATTRIBUTES, ICE043A REASON CODE, DFSORT ICE043A, ICE043A SORTOUT BLKSIZE, ICE043A LRECL, ICE043A reason code 2, ICE043A reason code 3.

What it means

Before it reads data, DFSORT works out the record format, record length and block size of every input and output. It also checks that they fit together. Fixed and variable inputs can't be mixed. An output block has to hold at least one record. A fixed output record can't be longer than the record being written to it unless something pads it.

When one of these checks fails, DFSORT issues ICE043A and stops. The message reads ICE043A INVALID DATA SET ATTRIBUTES: ddname attribute - REASON CODE IS rsn. The reason code is the key part. For a tape work data set sort or a conventional merge, the message leaves out the ddname and attribute.

The A suffix marks a critical error, so the step normally ends with return code 16.

Common causes

  • Reason code 1 means the output block size is smaller than the record. For fixed records the block must hold one record. For variable records it must hold the record plus 4 bytes.
  • Reason code 2 means the record length can't be determined, is too big for the format, or was given as LRECL=X. This is common with DUMMY or NULLFILE DD statements that have no LRECL.
  • Reason code 3 means concatenated or merged inputs mix fixed and variable formats, or include RECFM=U. Reason code 4 means a spanned input (such as VBS) follows an unspanned variable input (such as VB) in the concatenation.
  • Reason code 5 means fixed-length inputs have different record lengths. Reason code 6 means a fixed block size is not a multiple of the record length.
  • Reason code 8 means input and output formats don't match, such as fixed in and variable out without FTOV, or variable in and fixed out without VTOF. Reason code 9 means a fixed output record is longer than the input or reformatted record.
  • Reason codes 10 and 12 mean the record format or block size can't be determined, again often a DUMMY or NULLFILE DD without DCB information. Reason code 11 means the block size is bigger than the track capacity of the output device.
  • Reason codes 13 and 14 mean FTOV or VLFILL was used with a fixed OUTFIL output, or VTOF or CONVERT with a variable one. Reason codes 7, 15 and 16 deal with the input with the largest block size not coming first, or with a RECFM=F data set whose block size doesn't equal its record length.

How to find the problem

  1. Read the full ICE043A line in the sort step's SYSOUT. Note the ddname, the attribute and the reason code.
  2. Check the real attributes of that data set in ISPF 3.4 (type I next to the name) or with LISTCAT. For a new output data set, check the DCB values coded on its DD statement.
  3. For reasons 3, 4, 5, 7 and 15, list every data set in the SORTIN concatenation or the SORTINnn merge inputs and compare their RECFM, LRECL and BLKSIZE side by side.
  4. For reasons 7 and 15, add a //SORTDIAG DD DUMMY statement and rerun. DFSORT then writes extra diagnostic messages, including ICE800I, which explains why its preferred technique couldn't be used.

How to fix it

  • For block size problems, leave BLKSIZE off the output DD and let DFSORT and the system pick a valid one.
  • Code LRECL, RECFM and BLKSIZE on DUMMY and NULLFILE DD statements, and avoid LRECL=X.
  • Keep concatenated inputs all fixed or all variable. Put unspanned inputs after spanned ones, or convert them first.
  • For fixed inputs of different lengths, pad the shorter ones to the longest length in an earlier step if that suits the data.
  • Use FTOV to turn fixed input into variable output, and VTOF with BUILD to turn variable input into fixed output.
  • When the output is fixed and longer than the input, pad the record with INREC or OUTREC, or set the output LRECL to the reformatted length.

IBM documentation

IBM documentation: ICE043A. Use the documentation for your installed release.

Report a correction to WND Software.

Questions

What is the most common ICE043A reason code?

Reason codes 1, 2 and 3 are common ones. They cover a block size too small for the record, an unknown or LRECL=X record length, and a mix of fixed and variable inputs.

Can I just remove the BLKSIZE to fix ICE043A?

For an output block size problem, usually yes. Letting the system choose the block size avoids reasons 1, 6 and 11. Input problems need the input data sets fixed or rearranged instead.

Why does a DUMMY DD cause ICE043A?

A DUMMY or NULLFILE DD has no real data set behind it, so DFSORT can't read its attributes. Code RECFM, LRECL and BLKSIZE on that DD statement.