FDREPORT - z/OS mainframe disk reporting

FDReport is a powerful reporting tool that can report on z/OS disk usage, dataset usage, disk problems and report on archived data. It can be considered a replacement for the DCOLLECT program, except that DCOLLECT output needs a lot of work to interpret, whereas FDReport can layout its reports in list format for examination and action, or it can generate control statements for immediate action. For example, it is possible to run a two-step job with the first step searching for uncatalogued datasets and generating IDCAMS DELETE statements (see the z/OS utilities section for IDCAMS details) into a file. The second step then uses that file as SYSIN to an IDCAMS job and deletes the uncatalogued files. Or you may decide that this is a bit extreme and you just want to produce a list of uncatalogued files then decide what to do with them yourself.

FDReport has hundreds of fields that it can report on and you can find the full list of all the fields om the FDReport fields page. FDREPORT contains so many features that they are not documented in the FDRABR manual, due to space limitations. These include special-purpose customization options, special modes of execution, field names and detailed information or special instructions about various selection and reporting criteria. For complete information about these, execute the following job stream

//HELP EXEC PGM=FDREPORT,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
 HELP ALL
/*

This prints a lengthy document with additional information about FDREPORT. This report fits on 8.5x11 inch paper if desired.
The sheer volume of available data can be a bit daunting for the beginner so Innovation provides about 50 canned reports with the product to get you started. Some of these canned reports are -

  • Report on all SMS-Managed volumes that are in the DISNEW status, and all the SMS-Managed volumes in a storage group that are not in DISNEW status showing bytes allocated and available.
  • Show all uncataloged data sets on online volumes
  • Report on any volumes that contain catalogs and have less than 100 free cylinders
  • Show all data sets that are only have a catalog entry, and generate appropriate IDCAMS DELETE statements that can be used to safely remove these entries from the catalog
  • Produce a report of all allocated and free space within storage groups

Here's a summary of what FDReport provides and some examples of reports that I run.

VTOC reports

This is a report that I use if a storage pool is running out of space. It will report on old data in a storage pool giving its last referenced data and the SMS management class. You will need to adjust the Julian date in the LRDATE exclusion clause to get the data that you are interested in.

//REPORT   EXEC PGM=FDREPORT,REGION=0M
//SYSPRINT DD SYSOUT=*
//ABRMAP   DD SYSOUT=*
//ABRSUM   DD SYSOUT=*
//SYSIN    DD *
 XSELECT STORGRP=poolname
 XEXCLUDE LRDATE<05.210
 REPORT FIELD=(DSN,CLUSTER,LRDATE,VOL,
 MGMTCLAS,SIZEINFO)
 SORT    FIELD=(LRDATE)
 PRINT
//

The report is sorted by last referenced data so older data is more obvious.

The 'xselect' and 'exclude' parameters give you a lot of flexibility in selecting files or disks. As an example,

XSELECT XDSN=INP/.|+AB*.**,vol=P+*

will select datasets with a high level qualifier starting INP that is exactly four characters long (the / represents any one character), the second qualifier starts with any alphabetic character (|) then any numeric character (+) then exactly 'AB' then anything that pads the second qualifier out to a maximum of eight characters. Finally, the '**' means any valid set of characters and levels up to the maximum allowed by z/OS.
So INP2.A6ABZ#.UNIT.TEST will be selected, while INP.ARABZ#.UNIT.TEST will not be selected (because the HLQ has only three characters and because character 2 in the second qualifier is not numeric).
XSELECT also works on volumes. VOL=/AB* means select any volume starting with an alphabetic character, with the second and third characters 'AB'.

The next report looks at a problem storage pool from the other angle. It lists out all data that was created today. It is useful to know this if a pool suddenly starts running out of space because it can tell you who to blame. The 'SIZEINFO' parameter will list out the SIZE of each file in tracks and also SIZEFREE and percentage free. You can specifically ask for the size in bytes if you want. I am excluding various system files and also the XEXCLUDE XDSN=**.INDEX, DSORG=EF parameter will exclude all VSAM files that end in .INDEX. The reason for this is that these files never get their update bit set, so they will clog up the report.

//SYSIN DD *
 XSELECT STORGRP=(LNVLRGPD),CRDATE.EQ.2005118
 XEXCLUDE XDSN=**VTOC
 XEXCLUDE XDSN=**ABR
 XEXCLUDE XDSN=SYS1
 XEXCLUDE XDSN=FDRABR.**
 XEXCLUDE XDSN=**.INDEX, DSORG=EF
 REPORT FIELD=(DSN,SIZEINFO,MGMTCLAS)
 PRINT  DATEFORMAT=DDMMYYYY
 SORT  FIELD=DSN

VSAM reports

If you want to know these things, then FDReport will tell you about VSAM clusters that have a high number of CA and CI splits, or that are on an excessive number of extents. For example this report will list out problem VSAM files that have more than 80 extents, OR more that 50 CA splits, OR more than 100 CI splits.

 XSELECT XDSN=(AXP.**,AYP.**,CIT.**),
  DSORG=EF,VOL=/P*,NOEPV.GT.80
 XSELECT XDSN=(AXP.**,AYP.**,CIT.**),
  DSORG=EF,VOL=/P*,CASPLIT.GT.50
 XSELECT XDSN=(AXP.**,AYP.**,CIT.**),
  DSORG=EF,VOL=/P*,CISPLIT.GT.100
 REPORT FIELD=(CLUSTER,DSN,VOL,
  CASPLIT,CISPLIT,CISIZE,CICA,NOEPV)
 SORT FIELD=(CLUSTER,DSN)
 PRINT ENABLE=AUTOSTACK,SORTALLOC=YES

HSM Migration reports

FDReport will report on both its own FDRABR migration and also on DFHSM Migration. See the DFHSM section for details on DFHSM. The report below is reading the DFHSM MCDS. This is specified in the MCDSDD DD name. It will report on all migrated datasets with a high qualifier of DRP, and will tell you how big the file is, which volume it was on, the date it was migrated and the number of days since migrated. It will also tell you how many times each file has been migrated (NTMIGRAT, useful to detect thrashing) the management class, and finally 'DSSN' will tell you which migration level the file is on

//MCDSDD   DD DISP=SHR,DSN=your.mcds.name
//SYSIN    DD *
 TITLE     LINE='HSM INFO'
 XSELECT   XDSN=DRP.**
 REPORT FIELD=(DSN,VOL,SIZE,ADATE,NTMIGRAT,
  ADAYS,DSSN,MGMTCLAS)
 PRINT DATATYPE=MCDS

Here's an example of an FDReport that I used to increase the retention of datasets that were already migrated by DFHSM. The customer wanted all her XVN.PROD files that already have a five year retention retained for 10 years instead. This meant building a list of all migrated files with a specific management class and changing that class. FDReport will find the files for you, then build the control statements to change the management class.
The PUNCH statement tell FDReport to format an output list.
The <NAME> bit in the ALTER statement is a system variable that will substitute the database name.

//REPORT EXEC PGM=FDREPORT,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSPUNCH DD DSN=YOUR.OUTPUT.FILE,DISP=OLD
//MCDSDD   DD DISP=SHR,DSN=YOUR.MCDS
//ABRMAP   DD SYSOUT=*
//ABRSUM   DD SYSOUT=*
//SYSIN    DD *
 XSELECT   XDSN=XVN.PROD.**,MGMTCLAS=YEAR5
 REPORT FIELD=(DSN,MGMTCLAS)
 PUNCH  FDRLIB=MASK
 PRINT  RPTYPE=SELPCH,DATATYPE=MCDS
//MASK     DD *
 ALTER <NAME> MGMTCLAS(YEAR10)

A courageous person would run this job with the SYSPUNCH file feeding straight into a second IDCAMS step to just change the classes, but I prefer to check the output first then run the changes later.

ABR Backup reports

You can report on available ABR backups for any dataset, disk or storage pool. The example below will list out all backups for storage pool 'CICSPROD', giving you the creation data, generation and cycle numbers, and also the tape volser and file sequence number

//SYSIN    DD *
 XSELECT STORGRP=CICSPROD
 REPORT FIELD=(VOL,CRDATE,BKGEN,
  BKCYCLE,BKVOL,BKFILENO)
 PRINT

EAV reports

Extended Address Volumes (EAV) are volumes with more than 65,536 cylinders, sometimes referred to as device type 3390 Model A. They are explain a bit on the Mainframe 3390 disk page. You can use FDReport to get EAV information, and InnovationDP provides several canned EAV reports, some of which are -

  • Report on and group all EAVs by the number of cylinders per volume.
  • Report on data sets residing in the Track-managed space.
  • Report on data sets residing in the Cylinder-managed space.
  • Report on percentage free/allocated space or cylinders free/allocated, on EAVs in Trackmanaged Space and Cylinder-managed Space. This type of report can be very helpful for monitoring how the Track managed and Cylinder managed space of an EAV are allocated and used.

Tape Management System Reports

FDReport also interfaces with the DFSMSrmm and CA1 tape management systems. The supplied canned reports include

DFSMSrmm

  • A basic report that provides you the number of tapes in use, the tapes total capacity, and the actual amount currently in use as well as the media type being used
  • A list of data sets on tape for a specifc high level qualifier, that were created in the past 2 days.
  • A list of all tape data sets created in the past 2 days
  • DFSMSrmm tapes with 20% or less utilized space. These physical tapes are possible candidates for consolidation
  • DFSMSrmm tape data sets on a specific tape volume
  • Produce a list of DFSMSrmm tape volumes for a specific user that are set to expire in the next 200 days. Additionally, produce the necessary DFSMSrmm control cards that can be used to extend the expiration date to 365 days from the current date

A couple of sample RMM reports are
Report on data previously extracted from the DFSMSrmm tape management system. From the extracted file, select all the tapes created on a specific tape drive during a specific date range. This report can be useful if tape errors were detected on a specific drive and you want to identify all the tapes that were created on that drive during that time frame.

//FDREPORT EXEC PGM=FDREPORT,REGION=0M
//SYSPRINT DD SYSOUT=*
//ABRMAP DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//RMMXTR DD DISP=SHR,DSN=RMM.DATA
//SYSIN DD *
 XSELECT TVLRUNIT=03A0,TVLRDATE>=2012001,
   TVLRDATE<=2012007
 REPORT FIELDS=(TVLRUN4B,TVVOLSER,TVLWDATE,
   TVLRDATE)
 PRINT DATATYPE=RMMVOL
/*

Extract data from the DFSMSrmm tape management system and report on tape data sets created by jobs with names beginning with “FDR” and have a permanent retention status (EXPDATE=1999365). The report groups the data sets by owner.

//FDREPORT EXEC PGM=FDREPORT,REGION=0M
//SYSPRINT DD SYSOUT=*
//ABRMAP DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
 EXTRACT PRODUCT=RMM,STORCLAS=TEMPDATA
 XSELECT TDEXDATE=1999365,TDCRJOB=FDR*
 SORT FIELD=(TDOWNER,TDVOLSER),BREAK=SP
 REPORT FIELD=(TDVOLSER,TDDSNAME,
   TDCRJOB,TDOWNER,
 TDCRPGM,TDCRDATE,TDLUPGM,TDLRDATE)
 PRINT DATATYPE=RMMDSN
/*

CA1

  • List of CA1 tape volumes expiring in the next 30 days.
  • List of all CA1 tape GDG data sets that are set to expire in 30 days.
  • List of CA1 tape base volume of multi-volume sets
  • List the CA1 tape data sets created in the past 60 days.
  • List all tape volumes that will expire in the next 2 to 4 days, grouped by expiration date.

A couple of CA1 report examples -
Extract data from the CA 1 tape management system and produce a report of the volumes that are in scratch status.

//FDREPORT EXEC PGM=FDREPORT,REGION=0M
//SYSPRINT DD SYSOUT=*
//ABRMAP DD SYSOUT=*
//CA1XTR DD DISP=SHR,DSN=ca1.extract.dataset
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
 TITLE LINE='VOLUMES IN SCRATCH STATUS'
 XSELECT TVSTATUS=SCRATCH
 REPORT FIELD=(TVVOLSER,TVSTATUS,TVLRDATE,
   TVLRUNIT,TVC1RECT)
 SORT FIELD=TVVOLSER
 PRINT DATATYPE=CA1VOL,ENABLE=CHAREXPDATES,
   SORTALLOC=YES
/*

Extract data from the CA 1 tape management system and report on the tape data sets that were created in the past 60 days.

//FDREPORT EXEC PGM=FDREPORT,REGION=0M
//SYSPRINT DD SYSOUT=*
//ABRMAP DD SYSOUT=*
//CA1XTR DD DISP=SHR,DSN=ca1.extract.dataset
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
 TITLE LINE='DATA SETS CREATED IN THE PAST 60 DAYS'
 REPORT FIELD=(TDVOLSER,TDDSNAME,TDEXDATE,TDCRDAYS,
 TDCRDATE,TDCRTIME,TDBLKSIZ)
 XSELECT TDCRDAYS<60
 SORT FIELD=TDCRDATE
 PRINT DATATYPE=CA1DSN,SORTALLOC=YES /*