Case 8: Damaged ML1 volumes

To handle a damaged Migration Level 1 (ML1) volume, perform the following steps:

  1. Delete the ML1 volume entry of the damaged volume with the following command:
    DELVOL volser MIGRATION(PURGE)
  2. Initialize another DASD volume of the same device type as the damaged volume, using the volume serial number of the damaged volume.
  3. Restore the damaged ML1 volume from a dump copy. If DFSMShsm was used to create the dump copy, you can use the following command to restore the ML1 volume:
    RECOVER * TOVOLUME(volser) UNIT(unittype) FROMDUMP
  4. If there was a small data set packing (SDSP) data set on the damaged ML1 volume, check to see if there is a backup copy of the SDSP data set that is more recent than the dump copy that is used to restore the volume. If so, recover the backup copy of the SDSP. If an IDCAMS EXPORT command was used to create the backup copy, use the IDCAMS IMPORT command to recover the data set.
  5. Add the restored ML1 volume to the list of volumes that DFSMShsm owns. Use the ADDVOL command, specifying the DRAIN parameter. The DRAIN parameter prevents the volume from being selected for migration output. For example, issue the following command:
    ADDVOL volser UNIT(unittype) MIGRATION(ML1 DRAIN)
    If there was an SDSP data set on your ML1 volume, be sure to specify the SDSP parameter on your ADDVOL command. For example, issue the following command:
    ADDVOL volser UNIT(unittype) MIGRATION(ML1 DRAIN SDSP)
  6. Move all valid migration data sets and VTOC copy data sets off the ML1 volume with the following FREEVOL command:
    FREEVOL MIGRATIONVOLUME(volser) AGE(0) TARGETLEVEL(ML1)
    It is possible to generate tape mounts for ML2 tape volumes if there are valid, migrated, SMS-managed data sets that have reached the criteria for migrating to ML2.
  7. Move all valid backup versions to backup volumes with the following command:
    FREEVOL ML1BACKUPVERSIONS
    The FREEVOL command causes all valid backup versions from all ML1 volumes to be moved to backup volumes.
  8. Identify all lost migrated data sets.
    The following is an example of a DFSORT job that identifies migrated data sets that are lost, and builds HDELETE and HRECOVER commands for each data set. This job only builds the HDELETE and HRECOVER commands; it does not process them.
    //SMCD JOB
    //**************************************************************
    //* PLEASE CHANGE ALL THE FOLLOWING TO THE APPROPRIATE VALUES:
    //*   ?USERID   - TO YOUR USER ID
    //*   ?DFSMSHSM - TO THE DFSMSHSM PREFIX FOR YOUR MCDS
    //*   ?VLSER    - TO THE VOLSER OF YOUR DAMAGED ML1 VOLUME
    //**************************************************************
    //**************************************************************
    //* THIS STEP USES DFSORT TO LOCATE ALL MIGRATED DATASETS LOST
    //* FROM THE DAMAGED ML1 VOLUME, AND BUILDS HDELETE & HRECOVER
    //* COMMANDS FOR EACH DATA SET FOUND.
    //* THE HDELETE COMMANDS ARE PLACED IN THE DATASET
    //*   ?USERID.HDELETE.DATA.
    //* THE HRECOVER COMMANDS ARE PLACED IN THE DATASET
    //*   ?USERID.HRECOVER.DATA.
    //**************************************************************
    //**************************************************************
    //STEP1    EXEC PGM=SORT,REGION=4096K
    //SYSOUT   DD SYSOUT=*
    //SORTIN   DD DSN=?DFSMSHSM.MCDS,DISP=SHR
    //HDELETE  DD DSN=?USERID.HDELETE.DATA,
    //            DISP=(NEW,CATLG),UNIT=SYSDA,
    //            DCB=(LRECL=255,BLKSIZE=0,RECFM=FB,DSORG=PS),
    //            SPACE=(TRK,(5,1),RLSE)
    //HRECOVER DD DSN=?USERID.HRECOVER.DATA,
    //            DISP=(NEW,CATLG),UNIT=SYSDA,
    //            DCB=(LRECL=80,BLKSIZE=0,RECFM=FB,DSORG=PS),
    //            SPACE=(TRK,(5,1),RLSE)
    //**************************************************************
    //* THE INCLUDE STATEMENT SELECTS MCD RECORDS ('00'AT +51)
    //* THAT CONTAIN THE VOLSER OF YOUR RECOVERED ML1 VOLUME
    //* (AT OFFSET 69),AND HAVE THE MCDFASN BIT ON (A VALUE GREATER
    //* THAN X'80'AT OFFSET 75).
    //* THE OUTREC STATEMENT BUILDS HDELETE AND HRECOVER COMMANDS
    //* FOR EACH MCD RECORD SELECTED. THE DATA SET NAME IS COPIED
    //* FROM THE MCD RECORD AT OFFSET 5.
    //**************************************************************
    //* BUILD HDELETE COMMANDS.
    //* BUILD HRECOVER COMMANDS.
    //SYSIN    DD *
        OPTION COPY
        OUTFIL FNAMES=HDELETE,
               INCLUDE=((51,1,BI,EQ,X'00'),AND,
                        (69,6,CH,EQ,C'?VLSER'),AND,
                        (75,1,BI,EQ,B'1.......')),
               CONVERT,OUTREC=(C'HDELETE ',5,44,255:X)
        OUTFIL FNAMES=HRECOVER,
               INCLUDE=((51,1,BI,EQ,X'00'),AND,
                        (69,6,CH,EQ,C'?VLSER'),AND,
                        (75,1,BI,EQ,B'1.......')),
               CONVERT,OUTREC=(C'HRECOVER ',5,44,80:X)
    /*  
  9. Identify all lost backup versions.
    The following is an example of a DFSORT job that identifies backup versions of data sets that are lost and builds HSEND BDELETE commands for those data sets. This job only builds the HSEND BDELETE commands; it does not process them.
    //SMCC JOB
    //**************************************************************
    //* PLEASE CHANGE ALL THE FOLLOWING TO THE APPROPRIATE VALUES:
    //*   ?USERID   - TO YOUR USER ID
    //*   ?DFSMSHSM - TO THE DFSMSHSM PREFIX FOR YOUR BCDS
    //*   ?VLSER    - TO THE VOLSER OF YOUR DAMAGED ML1 VOLUME
    //**************************************************************
    //* THIS JOB EXTRACTS DATA FROM MCC RECORDS TO CREATE
    //* HSEND BDELETE COMMANDS FOR ALL BACKUP VERSIONS THAT WERE
    //* LOST FROM THE ML1 VOLUME.
    //* THE HSEND BDELETE COMMANDS ARE PLACED IN DATA SET NAMED
    //*   ?USERID.BDEL.DATA.
    //**************************************************************
    //* STEP ONE USES THE SORT UTILITY TO EXTRACT MCC RECORDS
    //* FROM BCDS THAT MATCH THE SEARCH CRITERIA.
    //* OUTPUT DATA IS STORED IN A TEMP DATASET.
    //**************************************************************
    //STEP1    EXEC PGM=SORT,REGION=4096K
    //SYSOUT   DD SYSOUT=*
    //SORTIN   DD DISP=SHR,DSN=?DFSMSHSM.BCDS,AMP='BUFND=50'
    //SORTOUT  DD DISP=(NEW,PASS),DSN=&&SORTOUT1,
    //            UNIT=SYSDA,SPACE=(TRK,(15,5),RLSE),
    //            DCB=(LRECL=2048,BLKSIZE=23476,RECFM=VB)
    //SYSIN    DD *
                  SORT FIELDS=COPY
                  INCLUDE COND=(51,1,BI,EQ,X'24',AND,
                                113,6,CH,EQ,C'?VLSER')
                  OPTION VLSHRT
    //**************************************************************
    //* THIS STEP USES SORT TO EXTRACT THE DSNAME AND HSM.DSNAME
    //* FROM THE MCC RECORDS IN THE TEMP DATASET. THIS DATA IS
    //* COMBINED WITH TEXT TO PRODUCE SKELETON COMMANDS IN FORMAT:
    //* " HSEND BDELETE <DSNAME> VERSIONS(0000) <HSM.DSNAME>"
    //* OUTPUT IN DATASET ?USERID.MCC.BDELETE
    //**************************************************************
    //STEP2    EXEC PGM=SORT,REGION=4096K
    //SYSOUT   DD SYSOUT=*
    //SORTIN   DD DISP=(OLD,PASS),DSN=&&SORTOUT1
    //SORTOUT  DD DISP=(NEW,CATLG),DSN=?USERID.MCC.BDELETE,
    //            UNIT=SYSDA,SPACE=(TRK,(10,1),RLSE),
    //            DCB=(LRECL=255,BLKSIZE=0,RECFM=VB,DSORG=PS)
    //SYSIN    DD *
                  SORT FIELDS=COPY
                  OUTREC FIELDS=(1,4,C' HSEND BDELETE ',69,44,
                                  C' VERSIONS(0000) ',5,44)
    //**************************************************************
    //* THIS STEP USES SORT TO EXTRACTS THE BINARY "VERSION" FIELD
    //* AND HSM.DSNAME FROM THE MCC RECORDS IN THE TEMP DATASET.
    //* OUTPUT OF THIS STEP IS TEMP DATASET &&VERS1
    //**************************************************************
    //STEP3    EXEC PGM=SORT,REGION=4096K
    //SYSOUT   DD SYSOUT=*
    //SORTIN   DD DISP=(OLD,PASS),DSN=&&SORTOUT1
    //SORTOUT  DD DISP=(NEW,PASS),DSN=&&VERS1,UNIT=SYSDA,
    //            SPACE=(TRK,(10,1),RLSE)
    //SYSIN    DD *
                  SORT FIELDS=COPY
                  OUTFIL CONVERT,OUTREC=(X,5,44,3X,139,2,BI,
                                  EDIT=(+TTTTTTTTTTTTTTT),121:X)
    //**************************************************************
    //* THIS STEP USERS SORT TO FORMAT THE OUTPUT FROM THE PREVIOUS
    //* STEP TO RESEMBLE THE HSEND BDELETE COMMANDS FROM STEP TWO.
    //* OUTPUT IN DATASET ?USERID.MCC.VERS2
    //**************************************************************
    //STEP4    EXEC PGM=SORT,REGION=4096K
    //SYSOUT   DD SYSOUT=*
    //SORTIN   DD DISP=(OLD,PASS),DSN=&&VERS1,UNIT=SYSDA
    //SORTOUT  DD DISP=(NEW,CATLG),DSN=?USERID.MCC.VERS2,
    //            UNIT=SYSDA,SPACE=(TRK,(10,1),RLSE),
    //            DCB=(LRECL=251,BLKSIZE=0,RECFM=FA,DSORG=PS)
    //SYSIN    DD *
                  SORT FIELDS=COPY
                  OUTREC FIELDS=(69X,61,4,2X,2,44,251:X)
    //**************************************************************
    //* THIS STEP USES IDCAMS TO CONVERT THE FIXED-LENGTH RECORDS
    //* OF ?USERID.MCC.VERS2 TO VARIABLE-LENGTH RECORDS COMPATIBLE
    //* WITH ?USERID.MCC.BDELETE SO THESE TWO DATA SETS CAN BE
    //* FURTHER PROCESSED TOGETHER.
    //**************************************************************
    //STEP5    EXEC PGM=IDCAMS,COND=(0,NE)
    //SYSPRINT DD SYSOUT=*
    //IN       DD DISP=OLD,DSN=?USERID.MCC.VERS2
    //OUT      DD DISP=(NEW,CATLG),DSN=?USERID.VB2.VERSION,
    //            UNIT=SYSDA,SPACE=(TRK,(1,1),RLSE),
    //            DCB=(LRECL=255,BLKSIZE=23476,RECFM=VB)
    //SYSIN    DD *
                  REPRO INFILE(IN) OUTFILE(OUT)
    /*
    //**************************************************************
    //* THIS STEP USES SORT TO COMBINE THE .BDELETE AND .VERSION
    //* DATASETS BASED ON THE HSM.DSNAME CONTROL FIELD.
    //* THE VERSION FIELDS ARE SUM'D AND THE FIRST RECORD KEPT.
    //* THEN THE HSM.DSNAME FIELD IS DROPPED LEAVING THE RECORDS
    //* IN THE FINAL FORMAT:
    //* " HSEND BDELETE <DSNAME> VERSIONS(XXXX)"
    //* OUTPUT IN DATASET ?USERID.BDEL.DATA
    //**************************************************************
    //STEP6    EXEC PGM=SORT,REGION=4096K,COND=(0,NE)
    //SYSOUT   DD SYSOUT=*
    //SORTIN   DD DISP=OLD,DSN=?USERID.MCC.BDELETE
    //         DD DISP=OLD,DSN=?USERID.VB2.VERSION
    //SORTOUT  DD DISP=(NEW,CATLG),DSN=?USERID.BDEL.DATA,
    //            UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE),
    //            DCB=*.SORTIN
    //SYSIN    DD *
                  SORT FIELDS=(80,44,CH,A)
                  SUM FIELDS=(74,4,ZD)
                  OUTREC FIELDS=(1,4,5,75)
                  OPTION ZDPRINT
    /*
  10. Identify which of the lost backup-version data sets were the most recent backup versions of the original data sets.

    The following is an example of a DFSORT job that identifies these data sets, and also builds HSEND BACKDS commands for each of the identified data sets. This job only builds the HSEND BACKDS commands; it does not process them.

    You will have to assess whether to create new backup versions at this time. You may also want to inform the owners of the data sets that the most recent backup versions of their data sets were lost.
    //SMCB JOB
    //**************************************************************
    //*PLEASE CHANGE ALL THE FOLLOWING TO THE APPROPRIATE VALUES:
    //*  ?USERID   - TO YOUR USER ID
    //*  ?DFSMSHSM - TO THE DFSMSHSM PREFIX FOR YOUR BCDS
    //*  ?VLSER    - TO THE VOLSER OF YOUR DAMAGED ML1 VOLUME
    //**************************************************************
    //* THIS STEP USES SORT UTILITY TO LOCATE THE MOST
    //* RECENT OF ANY BACKUP VERSIONS THAT WERE LOST FROM THE
    //* DAMAGED ML1 VOLUME.
    //* IT BUILDS HSEND BACKDS COMMANDS FOR EACH BACKUP VERSION.
    //* THE HSEND BACKDS COMMANDS ARE PLACED IN THE DATA SET
    //* ?USERID.BACKDS.CMDS.
    //**************************************************************
    //STEP1    EXEC PGM=SORT,REGION=4096K
    //SYSOUT   DD SYSOUT=*
    //SORTIN   DD DSN=?DFSMSHSM.BCDS,DISP=SHR
    //CMDS     DD DSN=?USERID.BACKDS.CMDS,
    //            DISP=(NEW,CATLG), UNIT=SYSDA,
    //            DCB=(LRECL=255,BLKSIZE=0,RECFM=FB,DSORG=PS),
    //            SPACE=(TRK,(5,1),RLSE)
    //* BUILD HSEND BACKDS COMMANDS.
    //**************************************************************
    //* THE INCLUDE STATEMENT SELECTS MCB RECORDS THAT CONTAIN
    //* THE OUTREC STATEMENT BUILDS AN HSEND BACKDS COMMAND
    //* FOR EACH DATA SET FOUND.
    //**************************************************************
    //SYSIN    DD *
        SORT FIELDS=(COPY)
        OUTFIL FNAMES=CMDS,
               INCLUDE=((51,1,BI,EQ,X'20'),AND,
                        (69,6,CH,EQ,C'?VLSER')),
               CONVERT,OUTREC=(C' HSEND BACKDS ',5,44,255:X)
    /* 
  11. Delete all lost migrated data sets by issuing the HDELETE commands that were generated in step 8. This step corrects the MCDS so it no longer lists the lost migration data sets as residing on the ML1 volume, and deletes the catalog entries for the data sets.
  12. Recover all lost migrated data sets by issuing the HRECOVER commands that were generated in step 8. This step recovers the migrated data sets that were lost on the damaged ML1 from backup copies. The data sets are recovered to a level-0 volume.
  13. Delete all backup versions that were lost by issuing the HSEND BDELETE commands that were generated in step 9. This step corrects the BCDS so it no longer lists the lost backup version data sets as residing on the ML1 volume.
  14. Identify all lost VTOC-copy data sets.
    ISMF can be used to easily identify which VTOC-copy data sets are lost. The data sets with the following message are no longer on the ML1 volume:
    DATA SET NOT FOUND ON VOLUME: volser
    The backup VTOC-copy data set is named as below:

    bprefix.VTOC.Tssmmhh.Vvolser.Dyyddd

    The dump VTOC-copy data set is named as below:

    bprefix.DUMPVTOC.Tssmmhh.Vvolser.Dyyddd

  15. Delete the catalog entries for those VTOC-copy data sets that no longer exist on the ML1 volume.
  16. Reinitialize the ML1 volume. This will delete all residual data.
  17. Define an SDSP data set, if you want one on the ML1 volume.
    1. If you had an SDSP data set on the damaged volume, you need to delete the catalog entry for that data set by issuing a DELETE NOSCRATCH command.
    2. Issue the IDCAMS DEFINE command to define a new SDSP data set for the ML1 volume.
  18. Change the ML1 volume so it can be selected for migration output by issuing the ADDVOL command with the NODRAIN parameter. For example, issue this command:
    ADDVOL volser UNIT(unittype) MIGRATION(ML1 NODRAIN)
    Be sure to specify other parameters as needed, such as SDSP and AUTODUMP.