Reorganize physical files automatically
This tip consists of two CL programs and one RPG program.
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.
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
- 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