Locating the DUMPQ checkpoint for RECOVERDM
Use the program IQCFCKPT to create a job stream to automatically locate the DUMPQ checkpoint so that you can submit a RECOVERDM job to restart IMS after a cold start.
You can use the program IQCFCKPT to create a job stream that will automatically locate the DUMPQ checkpoint. You can then submit a RECOVERDM job to restart IMS after a cold start.
The IMS Log Archive utility (DFSUARC0) creates a user-defined data set containing all DUMPQ log records required for IMS Queue Control Facility to re-create the IMS message queue after a cold start.
IQCFCKPT reads through the data set of IMS log records created by DFSUARC0 and creates the required CHECKPOINT command for the last DUMPQ checkpoint in the data set. IQCFCKPT also creates the appropriate checkpoint control card for the last SNAPQ simple checkpoint or reset checkpoint in the file.
Use the following process to locate the checkpoint and then restart after an IMS cold start.
- Run DFSUARC0 to capture all the DUMPQ records IMS Queue Control Facility needs for running the RECOVERDM procedure
- Run IQCFCKPT to identify and create the IMS Queue Control Facility checkpoint control card
- Run SELECT to select all IMS log records necessary to recover the message queue
- Run SORT to put the records in the proper sequence for insertion to the message queue
- Execute LOAD to the selected, sorted messages back on the message queue
The following example RECOVERDM procedure shows sample JCL to locate DUMPQ checkpoint:
//RECOVER JOB 'RECOVER AFTER DUMPQ',MSGCLASS=H,MSGLEVEL=(1,1),
// TIME=1440,CLASS=S,USER=USRT001,NOTIFY=USRT001
//*
/*ROUTE PRINT THISCPU/IMSTST13
//*
//* Auto Restart after IMS DUMPQ
//* ----------------------------
//*
//********************************************************************
//* DELETE OLD DATASETS *
//********************************************************************
//DELETE EXEC PGM=IEFBR14
//SYSPRINT DD SYSOUT=H
//DD1 DD DSN=USRT001.ARCHLOG.CPFODMPQ,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD2 DD DSN=USRT001.ARCHLOG.DFSSLOGP,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD3 DD DSN=USRT001.ARCHLOG.DFSMRQ,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD4 DD DSN=USRT001.ARCHLOG.MSGQ,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD5 DD DSN=USRT001.ARCHLOG.SNAPQ,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD6 DD DSN=USRT001.ARCHLOG.LOGOUT,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD7 DD DSN=USRT001.ARCHLOG.SCRAPSEL,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD8 DD DSN=USRT001.ARCHLOG.SORTOUTB,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD9 DD DSN=USRT001.ARCHLOG.SCRAPLOG,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//DD10 DD DSN=USRT001.ARCHLOG.ISRTFIL,UNIT=SYSDA,DISP=(MOD,DELETE),
// SPACE=(TRK,(1))
//*
//********************************************************************
//* Run IMS Log Archive Utility to copy DUMPQ records. *
//********************************************************************
//ARCHIVE EXEC PGM=DFSUARC0,PARM='DBRC=NO'
//* PARM='SYS1,DBRC=NO'
//STEPLIB DD DISP=SHR,DSN=IMSBLD.I71RTS52.ARESLIB
//*TEPLIB DD DISP=SHR,DSN=IMSBLD.I810TS25.ARESLIB
//RECON1 DD DSN=IMSTESTS.DSHR.RECON1,DISP=SHR
//RECON2 DD DSN=IMSTESTS.DSHR.RECON2,DISP=SHR
//RECON3 DD DSN=IMSTESTS.DSHR.RECON3,DISP=SHR
//*
//DFSSLDSP DD DISP=SHR,DSN=MRQT.IMS81R.MULTI.DUMPQ,
// VOL=SER=IMSDCL,UNIT=SYSDA
//*
//DFSSLOGP DD DSN=USRT001.ARCHLOG.DFSSLOGP,DISP=(,CATLG),
// DCB=(RECFM=VB,LRECL=22524,BLKSIZE=22528),
// UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE)
//DFSMRQ DD DSN=USRT001.ARCHLOG.DFSMRQ,DISP=(,CATLG),
// DCB=(RECFM=VB,LRECL=22524,BLKSIZE=22528),
// UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE)
//*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
COPY DDNOUT1(DFSMRQ) -
RECORD (O(5) T(X) V(4001) L(2) C(E)) -
RECORD (O(5) T(X) V(4002) L(2) C(E)) -
RECORD (O(5) T(X) V(4098) L(2) C(E)) -
RECORD (O(5) T(X) V(4099) L(2) C(E))
/*
//********************************************************************
//* Locate DUMPQ checkpoint on user-generated log *
//********************************************************************
//FINDCK EXEC PGM=IQCFCKPT,REGION=0M
//STEPLIB DD DISP=SHR,DSN=hlqual.SIQCLINK
//SYSUDUMP DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//CKPTIFIL DD DSN=MRQT.IMS81R.MULTI.DUMPQ,UNIT=SYSDA,
// VOL=SER=IMSDCL,DISP=SHR
//CKPTOFIL DD SYSOUT=*,DCB=(RECFM=FA,LRECL=137)
//CPFOSIMP DD SYSOUT=*,DCB=(RECFM=F,LRECL=80)
//CPFORSRT DD SYSOUT=*,DCB=(RECFM=F,LRECL=80)
//CPFODMPQ DD DSN=USRT001.ARCHLOG.CPFODMPQ,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
// UNIT=SYSDA,SPACE=(TRK,(1)),
// DISP=(,CATLG)
//CPFOSNPQ DD SYSOUT=*,DCB=(RECFM=F,LRECL=80)
//CPFOQDMP DD SYSOUT=*,DCB=(RECFM=F,LRECL=80)
//*
//********************************************************************
//* DEFINE VSAM MSGQ FILE *
//********************************************************************
//MSGQALL EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=H
//SYSIN DD *
DELETE USRT001.ARCHLOG.CLUSTER
SET MAXCC=0
DEFINE CLUSTER (NAME(USRT001.ARCHLOG.CLUSTER) -
VOL(000000) -
IXD KEYS(4 0) -
RECSZ(500 30000) -
SPEED IMBED REPLICATE -
REUSE SHAREOPTIONS(3 3) ) -
DATA (NAME(USRT001.ARCHLOG.DATA) -
CONTROLINTERVALSIZE(32760) -
CYL(01,05) ) -
INDEX (NAME(USRT001.ARCHLOG.INDEX) -
CONTROLINTERVALSIZE(512) -
TRACKS(10,10) )
/*
//*
//********************************************************************
//* QCF SELECT STEP *
//********************************************************************
//SELECT EXEC PGM=IQCSELCT,REGION=0M
//STEPLIB DD DISP=SHR,DSN=hlqual.SIQCLINK
//* DATA FROM IMS LOG ARCHIVE UTILITY
//LOGIN DD DSN=USRT001.ARCHLOG.DFSMRQ,DISP=SHR
//LOGOUT DD DSN=USRT001.ARCHLOG.LOGOUT,UNIT=SYSDA,
// DCB=(LRECL=32756,BLKSIZE=32760,RECFM=VB),
// DISP=(,CATLG),VOL=SER=222222,SPACE=(CYL,(1,1),RLSE)
//MSGQ DD DSN=USRT001.ARCHLOG.CLUSTER,
// AMP=('BUFND=20,BUFNI=10'),
// DISP=(OLD,KEEP,KEEP)
//SCRAPSEL DD DUMMY
//SORTINB DD DSN=&&SORTINB,SPACE=(TRK,(1,1)),DISP=(NEW,PASS),
// UNIT=SYSVIO,
// DCB=(LRECL=80,RECFM=FB,BLKSIZE=800)
//SYSUDUMP DD SYSOUT=H
//QCFIN DD DSN=USRT001.ARCHLOG.CPFODMPQ,DISP=SHR
// DD DSN=IMSVS.ARCHLOG.QCFIN,DISP=SHR
//QCFPRINT DD SYSOUT=H
//SNAPDUMP DD SYSOUT=H
//********************************************************************
//* SORT QCF SELECTED LOG RECORDS TO IN COLD STARTED IMS *
//********************************************************************
//SORTB EXEC PGM=SORT,REGION=0M,PARM='CORE=MAX',
// COND=(0,NE,SELECT)
//SORTLIB DD DISP=SHR,DSN=SYS1.SORTLIB
//SORTIN DD DISP=SHR,DSN=USRT001.ARCHLOG.LOGOUT,
// UNIT=SYSDA,VOL=SER=222222
//SORTOUT DD DSN=USRT001.ARCHLOG.ISRTFIL,
// UNIT=SYSDA,SPACE=(TRK,(5,2)),
// DCB=(LRECL=32756,BLKSIZE=32760,RECFM=VB),
// DISP=(NEW,CATLG),VOL=SER=000000
//SYSOUT DD SYSOUT=H
//SORTWK01 DD UNIT=SYSVIO,SPACE=(CYL,(1,1))
//SORTWK02 DD UNIT=SYSVIO,SPACE=(CYL,(1,1))
//SORTWK03 DD UNIT=SYSVIO,SPACE=(CYL,(1,1))
//SORTWK04 DD UNIT=SYSVIO,SPACE=(CYL,(1,1))
//SYSIN DD DSN=&&SORTINB,DISP=(OLD,PASS)
//*
//********************************************************************
//* SORTED QCF SELECTED DUMPQ LOG RECORDS
//********************************************************************
//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=QCF.UNLOAD
//*
//* 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
In step FINDCK, program IQCFCKPT prepares the CHECKPOINT command that is used by the RECOVERDM function. This statement is stored in data set DSN=USRT001.ARCHLOG.CPFODMPQ (DDNAME CPFODMPQ in the same step).
The CPFODMPQ data set, concatenated with the IMSVS.ARCHLOG.QCFIN data set, is the QCFIN for the IQCSELCT program in the SELECT step.
In the IMSVS.ARCHLOG.QCFIN data set, you should prepare the FUNCTION and SELECT statements.
The following example shows how to do this for IMSVS.ARCHLOG.QCFIN:
FUNCTION RECOVERDM
SELECT TYPE=DIO