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=, 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-0Cmeans 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-04means a member with that name is already in the directory, and the member was being added rather than replaced.B14-08means the member's address was outside the extents of the data set.B14-10means an I/O error while updating the directory.B14-14means the DCB wasn't open, or was opened the wrong way.B14-18means 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
- Find IEC217I in the job log. It has the form
IEC217I B14-rc,.mod, jobname, stepname, ddname, dev, volser, dsname(member) - 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.
- 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.
- 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.
Related codes
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.