DTSUTIL - Restore ICCF Back-Up Tape in MVS


DTSUTIL is an MVS utility program to restore ICCF back-up tapes created in VSE. Using DTSUTIL, an OS/390 or z/OS installation can restore libraries and members from an ICCF back-up tape and load them into partitioned data sets, PDS or PDSE.

Originally, DTSUTIL was designed for VSE sites which migrate to MVS and have source code or JCL archived on ICCF back-up tapes. DTSUTIL can be used during the course of the VSE/MVS conversion to facilitate the transfer of VSE application source to the MVS conversion environment. After the end of the migration, when access to the VSE system is no longer available, DTSUTIL can still be used to restore ICCF libraries from archive tapes.

DTSUTIL restores ICCF libraries into a container-type, pre-allocated partitioned data set (PDS or PDSE). DTSUTIL stores each ICCF library into a library-member of the container PDS as an IEBUPDTE input stream. During this process, ICCF members in compressed format are decompressed. Library-members created in the container PDS can then be loaded into partitioned data sets using IEBUPDTE or an equivalent utility such as PDSUTIL or PDSLOAD.

DTSUTIL produces several reports, including a cross-reference of duplicate members, i.e. members found with the same name in several sub-libraries.


The DTSUTIL Utility runs as a batch job step in the MVS environment. The PARM field is optional; when specified, it must contain a 7-character identifier which DTSUTIL stores into the User-ID field of each library-member's directory entry, which contains statistics in ISPF format. This may be used, for example, to show the tape serial number in the directory entries, as shown in the example below.

DD Statements

DTSUTIL uses the following DD statements:

  1. the TAPEIN DD is used to read the ICCF back-up tape, which may contain several libraries and a mix of compressed and uncompressed members; compressed members, if present, are automatically decompressed.
  2. the SYSUT2 DD is used to write a PDS member (as an IEBUPDTE input stream) for each ICCF library present on the back-up tape.
  3. SYSPRINT is used to write messages.
  4. the MEMBERS DD is used to write a list of all the members found in every library.
  5. the DUPLICAT DD is used to write a list of all the members which occur in more than one library, along with the library numbers in which they have been found.

Output PDS (SYSUT2)

ICCF writes each ICCF library into a library-member of the SYSUT2 output PDS as an IEBUPDTE input stream. The name of the library-member is the 4-digit number of the corresponding ICCF library in the range 0001-9999, prefixed with "ICCF". For example, the library-member ICCF0002 consists of an IEBUPDTE input stream containing all of the members of the ICCF library 0002 found on the tape.

Specifying OPTCD=R on the SYSUT2 DD resets the output PDS to empty before loading library-members. Specifying OPTCD=L writes the library-members in ISPF PACK format to conserve disk space. Both options can be combined by specifying OPTCD=RL. If OPTCD=L is specified, the container PDS's library-members can not be used as input to IEBUPDTE or PDSLOAD; instead, PDSUTIL or STARTOOL must be used.

Each library-member's directory entry in the output PDS contains ISPF statistics. The creation and the last-modified dates are set to the date of the oldest and most recent ICCF members, respectively. The current lines (Size) is the number of records in the library-member. The Init field is the number of packed records, if OPTCD=L was specified on the SYSUT2 DD statement. Mod is the number of ICCF members, i.e. the number of ./ ADD cards it contains. The 7-character User-ID of each library-member is the User-ID passed in the PARM field of the EXEC statement, when specified, or defaults to the job's USER name.


Directory of a container PDS created with PARM='V612346' and OPTCD=L.

Member   VV.MM  Created   Last-Mod   HH:MM:SS  Size  Init   Mod UID
ICCF0001 00.00 2001-02-09 2003-05-27 14:41:00   904   369    71 V612346
ICCF0002 00.00 1987-12-02 2003-05-27 14:41:00 65535 65535  2260 V612346
ICCF0004 00.00 1988-03-08 2003-05-27 14:45:00 65535 41368   391 V612346
ICCF0005 00.00 1988-03-08 2003-05-27 14:46:00 18953  7664  1167 V612346
ICCF0006 00.00 1994-11-17 2003-04-01 14:46:00  9155  4003    26 V612346
ICCF0007 00.00 1994-12-16 2003-01-13 14:46:00  9702  2790    37 V612346
ICCF0008 00.00 1990-03-28 2003-01-29 14:46:00  7699  3898    93 V612346
ICCF0009 00.00 1995-07-27 2003-02-20 14:46:00  3648  1798    66 V612346
ICCF0010 00.00 2001-02-26 2003-04-16 14:46:00  5871  2432   153 V612346 

In each library-member, IEBUPDTE ./ ADD cards for individual ICCF members contain ISPF statistics compatible with PDSLOAD (a public-domain utility), STARTOOL (a Serena product), and PDSUTIL (a GSF Software utility). The creation and last-modification dates and user-ID for each member are set to the date and user-ID in the corresponding ICCF directory entry. If IEBUPDTE is used to load a SYSUT2 member into a PDS, statistics are ignored. If PDSLOAD, PDSUTIL or STARTOOL is used instead, then ISPF statistics are stored in the directory entry of each individual member.

Sample JCL

//*  Restore ICCF Back-up Tape into the DTSFILE Container PDS
//SYSPRINT DD SYSOUT=*			Statistics
//MEMBERS  DD SYSOUT=*			List of all members
//DUPLICAT DD SYSOUT=*			List of duplicate members
// UNIT=SYSDA,SPACE=(TRK,(2500,,40))
//*     Load Library 002 into PRISMCS.LOCAL.ICCF0002
// UNIT=SYSDA,SPACE=(TRK,(500,,240)) 

Sample Output (SYSPRINT)

 GSF Utilities - Restore ICCF Backup Tape         Saturday 26 Jun 2004  (04.178)  18:30




             001       71      1409  1995-06-26  2001-12-04
             002      257     11386  1995-03-13  2000-05-17
             041        4       180  1999-05-24  2001-02-27
             059      286     47986  1995-08-22  1999-06-24
             112       31      1137  1997-10-21  1998-06-02
             224       48      5208  1998-02-16  1998-06-04

            TOTAL     697     67306  1995-03-13  2001-12-04 

Sample Output (MEMBERS)

The MEMBERS data set contains one record for each ICCF member found on the tape, in ascending sequence of library numbers. Each record contains the member name in pos 1, followed by the 4-digit library number (0001-4095), the 4-character ICCF user-id, the YYYY-MM-DD date of the last update, and the content of the 1-byte directory entry's flag byte in hexadecimal format (00-FF).

YY96310  0004 JOHN 2001-02-27 00
JY990307 0004 DICK 1999-06-17 00
YY96396  0004 JOHN 2001-02-27 00
YY96462  0004 JOHN 2001-02-27 00
YY96462A 0004 JOHN 1999-07-21 00
CIDL327  0005 MIKE 1996-03-26 00
FCTPD327 0005 MIKE 1996-03-28 00
FCTPD42  0005 BILL 1996-04-01 00
FCTP1023 0005 MIKE 1996-10-22 00
FCTP129  0005 MIKE 1997-01-29 00
FCTP423  0005 BILL 1997-04-23 00
FCTP624  0005 MIKE 1996-06-23 00 

Sample Output (DUPLICAT)

The DUPLICAT data set contains one record per ICCF member found in more than one library. The name of the member starts in pos 1 of the record and is followed by a list of 4-digit numbers that correspond to the libraries in which the member has been found. Members found in only one library are not listed.

  ABBRED   0070 0080
 ABDETLT  0032 0070
 ABD001   0076 0083 0084
 ABD01B   0083 0084
 ABD01BX  0083 0084 

Search key-words: mvs os/390 z/os os390 zos vse z/VSE zVSE dos/vse iccf dtsutil restore backup back-up library libraries member members compressed compression decompress iebupdte pds pdse sserv