System abend

SB14: CLOSE couldn't update the PDS directory

An SB14 abend means CLOSE couldn't add a new member's entry to the directory of a partitioned data set. Message IEC217I gives the return code. B14-0C means the directory or the data set is full, and B14-04 means a member with that name already exists.

Other names for this code

Also written as B14, SB14-0C, SB14-04, B14-0C, B14-04, abend B14, system abend B14, IEC217I B14.

What it means

When a program writes a member of a partitioned data set through a DD statement such as DSN=PROD.PAYROLL.CNTL(PAYPRM07), the data goes into the library first. When the program closes the file, CLOSE issues the STOW macro to put the member's name and location in the directory. If STOW fails, CLOSE issues message IEC217I and ends the step with system completion code B14.

The return code after the dash reflects why STOW failed.

  • B14-0C means there was no room. Either the directory has no free entries, or the data set itself is out of space. If IEC030I, IEC031I or IEC032I (a B37, D37 or E37 condition) came first, the data set ran out of space. If not, the directory is full.
  • B14-04 means a member with that name is already in the directory, and the member was being added rather than replaced.
  • B14-08 means the member's address was outside the extents of the data set.
  • B14-10 means an I/O error while updating the directory.
  • B14-14 means the DCB wasn't open, or was opened the wrong way.
  • B14-18 means the system couldn't get storage for the STOW work area.

Return codes 1C and higher are PDSE cases. IEC217I in IBM's MVS System Messages explains each one.

Common causes

  • The PDS directory is full. Directory blocks are fixed when the library is allocated, by the third value in the SPACE parameter, so a library that keeps getting new members eventually runs out (B14-0C).
  • The library is out of space. A PDS doesn't reuse the space of deleted or replaced members until it's compressed, so it fills up even when it holds little live data (B14-0C after B37, D37 or E37).
  • The DD statement uses DISP=MOD for a member that already exists, so CLOSE tries to add a name that's already in the directory (B14-04).
  • The step's region is too small for the STOW work area (B14-18).

How to find the problem

  1. Find IEC217I in the job log. It has the form IEC217I B14-rc,mod,jobname,stepname,ddname,dev,volser,dsname(member).
  2. For B14-0C, look for IEC030I, IEC031I or IEC032I earlier in the same step. They tell you whether it's a space problem or a directory problem.
  3. Display the library's details in ISPF option 3.2 or with the I line command in 3.4. It shows directory blocks allocated and used, and the space used.
  4. For B14-04, check the DD statement's DISP and whether the member already exists in the library.

How to fix it

  • If the data set is full, compress it with IEBCOPY or the ISPF compress option to reclaim the space of deleted and replaced members, then rerun.
  • If the directory is full, allocate a new library with more directory blocks, copy the members into it with IEBCOPY, and swap the names. Compressing doesn't add directory blocks.
  • Consider converting busy libraries to PDSE with DSNTYPE=LIBRARY. A PDSE directory grows as needed, and freed space is reused without compressing.
  • For B14-04, code DISP=OLD so the member is replaced, or choose a different member name.
  • For B14-18, raise the step's REGION and rerun.

What it looks like

IEC217I B14-0C,IGG0201Z,PAYRUN01,STEP070,SYSUT2,0A12,PRD101,PROD.PAYROLL.CNTL(PAYPRM07)
IEA995I SYMPTOM DUMP OUTPUT
  SYSTEM COMPLETION CODE=B14  REASON CODE=0000000C
IEF450I PAYRUN01 STEP070 - ABEND=SB14 U0000 REASON=0000000C

IBM documentation

IBM z/OS: B14. Use the documentation for your installed release.

Report a correction to WND Software.

Questions

Will compressing the PDS fix B14-0C?

Only if the data set ran out of space. Compressing reclaims unused space but doesn't add directory blocks. If the directory is full, you have to reallocate the library with more.

How do I tell a full directory from a full data set?

Look in the job log for IEC030I, IEC031I or IEC032I before IEC217I. If there are none, the directory is full. ISPF option 3.2 also shows directory blocks used against allocated.

Do PDSEs get SB14?

Rarely. A PDSE directory grows on its own and never needs compressing, but a few PDSE-specific STOW failures still end with B14.