Running JCL for RECOVERDM

Submit the RECOVERDM JCL to recover messages that were lost from the queues because an IMS cold start was necessary following system maintenance.

The RECOVERDM procedure recovers messages lost from the queues because an IMS cold start was necessary following system maintenance.

The following figure shows the system operation flow for the RECOVERDM procedure:

Figure 1. RECOVERDM procedure: system operation flow
This figure depicts a series of five boxes that are stacked in a vertical column that represent RECOVERDM procedure's system operation flow. They are connected each to the next, form the top down, by lines with down-pointing arrows. The first box shows the IMS log data sets; SLDS and OLDS. The second box shows step one, the SELECT process. The third box shows step two, the SORTB process. The fourth box shows step three, the LOAD step. And the fifth and final box shows the IMS message queue data set.

Example: RECOVERDM procedure JCL

The following example JCL runs RECOVERDM when programs DFSUARC0 and IQCFCKPT have been used to automatically find the checkpoint.

//IQCRCDM  JOB (ACCOUNTINFO),NORMAL JOBCARD INFO
//*********************************************************************
//*                                                                   *
//*            SAMPLE EXECUTION JCL - RECOVERDM                       *
//*                                                                   *
//*********************************************************************
//*                                                                   *
//*            DELETE OF VSAM DATA SET                                *
//*                                                                   *
//*********************************************************************
//DLTDS    EXEC PGM=IDCAMS
//SYSPRINT DD   SYSOUT=A
//SYSIN    DD  *
    DELETE (QCF.MSGQ)
//*********************************************************************
//*                                                                   *
//*            DEFINE FOR VSAM DATA SET TO STORE MESSAGE QUEUES       *
//*                                                                   *
//*********************************************************************
//DFNDS    EXEC PGM=IDCAMS
//SYSPRINT DD   SYSOUT=A
//* DEFINE FOR VSAM DATA SET SHOULD BE MODIFIED TO MEET YOUR
//* SYSTEM REQUIREMENTS. RECSZ PARAMETER, THE AVERAGE RECORD SIZE,
//* CAN BE SET TO THE LRECL OF THE IMS SHORT MESSAGE
//* QUEUE AND THE MAX VALUE MUST BE EQUAL TO OR GREATER THAN
//* IMS LONG MESSAGE QUEUE.
//* NOTE:
//*      IT IS RECOMMENDED THAT THE MAXIMUM RECORDSIZE BE SET
//*      TO THE MAXIMUM ALLOWED BY VSAM, IE, 32761.
//*      IT IS RECOMMENDED THAT THE CONTROLINTERVALSIZE BE SET
//*      TO THE MAXIMUM ALLOWED BY VSAM, IE, 32768.
//SYSIN    DD  *
    DEFINE CLUSTER (NAME(QCF.MSGQ) -
                STORAGECLASS(PSTANDRD) -
                MANAGEMENTCLASS(PNOBACK) -
                IXD KEYS(4 0) -
                RECSZ(500 32761) -
                SPEED IMBED REPLICATE -
                REUSE SHAREOPTIONS(3 3)) -
        DATA    (NAME(QCF.MSGQ.DATA) -
                CONTROLINTERVALSIZE(32768) -
                CYL(100,20)) -
        INDEX   (NAME(QCF.MSGQ.INDEX) -
                CONTROLINTERVALSIZE(512) -
                TRACKS(1,1))  
//*********************************************************************
//*                                                                   *
//*            SELECT STEP                                            *
//*                                                                   *
//*********************************************************************
//SELECT  EXEC PGM=IQCSELCT,REGION=0M
//STEPLIB  DD  DISP=SHR,DSN=hlqual.SIQCLINK
//QCFIN    DD  *
CHKPT    92359070707
FUNCTION RECOVERDM
//*
//* THIS IS A SAMPLE OF MULTIPLE LOG TAPES WHERE EACH LOG HAS A
//* DIFFERENT DATA SET NAME, THUS REQUIRING SEPARATE DD STATEMENTS.
//*
//LOGIN    DD  DISP=OLD,UNIT=TAPE,LABEL=(1,SL),DSN=LOG1,
//             VOL=SER=IMSLG1
//         DD  DISP=OLD,UNIT=TAPE,LABEL=(1,SL),DSN=LOG2,
//             VOL=SER=IMSLG2
//*
//MSGQ     DD DSN=QCF.MSGQ,
//            AMP=('BUFND=20,BUFNI=10'),
//            DISP=(OLD,KEEP,KEEP)
//*
//*   THE LRECL OF THE LOGOUT DATA SET MUST BE AT LEAST 256
//*   BYTES LONGER THAN THE LRECL OF THE LOGIN DATA SET
//*   TO ACCOMMODATE THE DFSMRQPF PREFIX.
//*   HOWEVER, IT IS RECOMMENDED THAT THE MAXIMUM SIZES, LRECL=32756
//*   AND BLKSIZE=32760, BE USED.
//*
//LOGOUT   DD  DSN=&&LOGOUT,UNIT=SYSDA,SPACE=(CYL,(5,5)),
//             DCB=(LRECL=32756,BLKSIZE=32760,RECFM=VB),
//             DISP=(NEW,PASS)
//SORTINB  DD  DSN=&&SORTINB,UNIT=SYSDA,SPACE=(TRK,(1,1)),
//             DCB=(LRECL=80,RECFM=FB,BLKSIZE=800),DISP=(NEW,PASS)
//QCFPRINT DD  SYSOUT=A
//SNAPDUMP DD  SYSOUT=A
//*********************************************************************
//*                                                                   *
//*            SORTB JOB STEP                                         *
//*                                                                   *
//*********************************************************************
//SORTB   EXEC PGM=SORT,REGION=0K,PARM='CORE=MAX',
//             COND=((0,NE,SELECT))
//SORTLIB  DD  DISP=SHR,DSN=SYS1.SORTLIB
//SORTIN   DD  DISP=(OLD,DELETE),DSN=*.SELECT.LOGOUT
//SORTOUT  DD  DSN=&&SORTOUT,UNIT=SYSDA,SPACE=(CYL,(5,5)),
//         DCB=(LRECL=32756,BLKSIZE=32760,RECFM=VB),
//         DISP=(NEW,PASS)
//SYSOUT   DD  SYSOUT=A
//SORTWK01 DD  UNIT=SYSDA,SPACE=(CYL,(20,10),,CONTIG)
//SORTWK02 DD  UNIT=SYSDA,SPACE=(CYL,(20,10),,CONTIG)
//SORTWK03 DD  UNIT=SYSDA,SPACE=(CYL,(20,10),,CONTIG)
//SORTWK04 DD   UNIT=SYSDA,SPACE=(CYL,(20,10))
//SYSIN    DD  DSN=&&SORTINB,DISP=(OLD,PASS)
//* 
//*********************************************************************
//*                                                                   *
//*           LOAD JOB STEP                                           *
//*                                                                   *
//*********************************************************************
//LOAD     EXEC PGM=IQCINI0$,
//    PARM='BPEINIT=IQCBINI0,BPECFG=IQCIVPCF,IMSPLEX=IPLEX,QCFIMS=IMS1'
//STEPLIB  DD  DISP=SHR,DSN=hlqual.SIQCLINK
//         DD  DISP=SHR,DSN=IMSREL.RESLIB
//*
//QCFPRINT DD SYSOUT=A
//*
//LOAD     DD DISP=SHR,DSN=&&SORTOUT
//*
//* SCRAPLOG IS AN OPTIONAL DD STATEMENT. IT WILL CONTAIN THE 
//* REJECTED MESSAGES FROM THE LOAD STEP. 
//* DCB PARAMETERS SHOULD BE THE SAME AS THOSE FOR THE LOAD 
//* DATA SET.
//* HOWEVER, IT IS RECOMMENDED THAT THE MAXIMUM SIZES FOR LRECL
//* AND BLKSIZE ARE USED.
//*
//SCRAPLOG DD DSN=QCF.SCRAPLOG,UNIT=SYSDA,DISP=(NEW,CATLG),
//         DCB=(LRECL=32756,BLKSIZE=32760,RECFM=VB),
//         SPACE=(CYL,(5,5))
//* 
//SNAPDUMP DD SYSOUT=A 
//* 
//QCFIN DD DSN=USER.PRIVATE.PROCLIB(load),UNIT=SYSDA