You Can View User Feedback To This Tip
We run this code over several libraries on a long weekend. This tip consists of two CL programs and one RPG program.
The first CL program creates a work file of the files in a given library. The RPG program reads the work file and calculates a percent of deleted records to control the file reorganization process.
The second CL program reorganizes the file meeting the percentage that is coded in the RPG program.
Code
CL Program 1
----------------------------------------------------------------
PGM
MONMSG CPF9999
ADDLIBLE LIB(QTEMP)
MONMSG CPF9999
SBMJOB CMD(CALL PGM(CENDJOB)) JOBQ(QBATCH) +
OUTQ(PGMROUTQ) /* IN HOUSE PROGRAM TO
END ALL INTERACTIVE
JOBS*/
ENDSBS SBS(SLEEPER) OPTION(*IMMED) /* END ANY JOBQ'S
THAT WOULD HAVE JOBS RUNNING
WITH THE FILES YOU WILL BE
REORGANIZING */
MONMSG CPF9999
DSPFD FILE(MYLIB1/*ALL) TYPE(*MBRLIST) +
OUTPUT(*OUTFILE) FILEATR(*PF) +
OUTFILE(QTEMP/FZRGZMPF)
OVRDBF FILE(QAFDMBRL) TOFILE(QTEMP/FZRGZMPF)
CALL PGM(RZRGZP02)
DLTOVR FILE(QAFDMBRL)
CLRPFM FILE(FZRGZMPF)
/* IF YOU DESIRE MORE THAN ONE LIBRARY KEEP COPYING
THIS ROUTINE IN CL PROGRAM */
DSPFD FILE(MYLIB2/*ALL) TYPE(*MBRLIST) +
OUTPUT(*OUTFILE) FILEATR(*PF) +
OUTFILE(QTEMP/FZRGZMPF)
OVRDBF FILE(QAFDMBRL) TOFILE(QTEMP/FZRGZMPF)
CALL PGM(RZRGZP02)
DLTOVR FILE(QAFDMBRL)
CLRPFM FILE(FZRGZMPF)
ENDPGM
RPG Program
-------------------------------------------------------
FQAFDMBRLIF E DISK
C *INLR DOUEQ'1'
C READ QWHFDML LR
C *INLR IFEQ '0'
C*
C* DETERMINE IF THE FILE IS MORE THAN 5% DELETED RECORDS *
C*
C MLNDTR ADD MLNRCD TOTRCD 120 ACTIVE + DEL
C TOTRCD IFNE 0
C MLNDTR DIV TOTRCD PRCNT 74 DEL/REC
C ELSE
C Z-ADD0 PRCNT
C END
C* HARD CODE YOUR PERCENTAGE FIGURE HERE
C MLNDTR IFGT 0 HAS DELETED
C PRCNT IFGE .05 HAS 5% DLT
C*
C* CALL PROGRAM TO REORGANIZE THE FILE *
C*
C CALL 'CZRGZP02'
C PARM MLFILE
C PARM MLLIB
C PARM MLNAME
C END END IF GE 5
C END END *IN80=0
C END END DOUEQ
Second CL program
------------------------------------------------------------------------
PGM PARM(&FILE &LIB &MBR)
DCL VAR(&FILE) TYPE(*CHAR) LEN(10)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&MBR) TYPE(*CHAR) LEN(10)
RGZPFM FILE(&LIB/&FILE) MBR(&MBR)
MONMSG MSGID(CPF3202)
MONMSG MSGID(CPF2981)
ENDPGM
USER FEEDBACK TO THIS TIP
- I have succesfully implemented the same procedure using only 1 CL program. There is no need for the RPG program, the stuff that the RPG does can be done by the CL. The RGZPFM can be placed inside the IF condition. Do not reorganize if there is no DELETED record or it's less than X% of the total records. Also, you can run this without ending the subsystems (this is critical in a 24 X 7 environment), put a MONMSG on the RGZPFM command. The only side effect is that the file will not be reorged if a job is using it.Bert Ramos