|
Here you go Phil, copied to the list for the archives. command: RGZLIB LIBR(library) DELREC(10) DELPCT(1) LIST(Y) file member is reorged if deleted records exceeds DELREC parm file member is reorged if percentage of deleted to active exceeds DELPCT parm prints a list of all physical file members in library - and the status of reorg attempt if LIST parm = "Y" allocates file *excl, waits 10 secs - if successful, reorgs file. Does not trap for any other errors during file reorg - it only reports that it was unsuccessful. reorgs KEYFILE(*FILE) if file is keyed. Compile everything with default values source file(member): QDDSSRC(RGZLIBPR) SRCTYPE(PRTF) REF(QAFDMBR ) R PAGHDG SKIPB(002) 1'Report:' 9'RGZLIBR' 38'Periodic Data File Reorganization' 110'Run Date:' 120DATE EDTCDE(Y) SPACEA(001) 1'Page#:' 9PAGNBR EDTCDE(Z) 110'Run Time:' 120TIME SPACEA(002) 1'Library:' $LIB 10A +2 +6'Record Threshold:' $DREC 9S 0 +1EDTCDE(Z) +6'Percentage Threshold:' $DPCT 3S 0 +1EDTCDE(Z) SPACEA(002) 30'Active' 45'Deleted' 54'Deleted' SPACEA(001) 1'File Name' 12'Member Name' 30'Records' 45'Records' 54'Percent' 63'Reorganization Status' SPACEA(001) 1'---------' 12'-----------' 30'-------' 45'-------' 54'-------' 63'---------------------' SPACEA(001) R DTLLIN MBFILE R O 1 MBNAME R O 12 MBNRCD R O 24EDTCDE(J) MBNDTR R O 39EDTCDE(J) $PCT 3S 0O 56EDTCDE(J) $MSG 60 O 63 SPACEA(001) --------End of source member---------- source file(member): QRPGLESRC(RGZLIBR) SRCTYPE(RPGLE) * RGZLIBR - Read DSPFD outfile of file members in library, * and reorg them based the number of deleted records * or a percentage of total records deleted to active. * Richard Baird FQAFDMBR IP E DISK FRGZLIBPR O E PRINTER infds(PrtFeedBack) * printer feedback (overflow) DPrtFeedBack DS D $CurrLine 367 368I 0 D $CurrPage 369 372I 0 * Variable to build command for QCMDEXC D@Cmd S 275A * Procedure interface for QCMDEXC D qCmdExc PR EXTPGM('QCMDEXC') D Cmd 275A OPTIONS(*VARSIZE) CONST D CmdLen 15P 5 CONST * input parameters D@Lib S 10A D@DRec S 9P 0 D@DPct S 3P 0 D@List S 1A D$overflow S 2s 0 INZ(58) C *Entry plist C parm @Lib C parm @DRec C parm @DPct C parm @List * if physical file and *dta. C if MBFTYP = 'P' and C MBDTAT = 'D' * calculate percentage of deleted records. C select C when MBNDTR > 0 and MBNRCD = 0 C eval $pct = 99 C when MBNDTR = 0 or MBNRCD = 0 C eval $pct = 0 C when ((MBNDTR / MBNRCD) * 100) > 999 C eval $pct = 999 C other C eval $pct = ((MBNDTR / MBNRCD) * 100) C endsl * decide if file has reached threashold to reorganize. C select * file has no active records but has some deleted records. C when MBNRCD = 0 and C MBNDTR > 0 C exsr $RgzPfm * file has more deleted records than threashold C when @DRec > 0 and C MBNDTR >= @DRec C exsr $RgzPfm * file has a percentage of deleted records greater than threashold C when @DPct > 0 and C MBNRCD > 0 and C $pct >= @DPct C exsr $RgzPfm C when @List = 'Y' C exsr $WrtNoReorg C endsl C end *--------------------------------------------------------------------* * $RgzPfm - reorganize physical file member. *--------------------------------------------------------------------* C $RgzPfm begsr * attempt to allocate object C eval @Cmd = 'ALCOBJ OBJ((' + C %trim(MBLIB ) + '/' + C %trim(MBFILE ) + C ' *FILE *EXCL ' + C %trim(MBNAME ) + ')) + C WAIT(10)' C callp(e) QCmdExc(@Cmd : %size(@Cmd)) * attempt failed. write error to report and skip file. C if %error C exsr $WrtError1 C else * build command to reorganize member. C eval @Cmd = 'RGZPFM FILE(' + C %trim(MBLIB ) + '/' + C %trim(MBFILE ) + ') MBR(' + C %trim(MBNAME ) + ')' * if file is keyed, reorg by primary key. C if MBACCP = 'K' C eval @Cmd = %trim(@Cmd) + C ' KEYFILE(*FILE)' C end * execute reorg command C callp(e) QCmdExc(@Cmd : %size(@Cmd)) * reorg unsuccessful or successful - write to report. C if %error C exsr $WrtError2 C else C exsr $WrtSuccess C end * regardless of reorg success - de-allocate object. C eval @Cmd = 'DLCOBJ OBJ((' + C %trim(MBLIB ) + '/' + C %trim(MBFILE ) + C ' *FILE *EXCL ' + C %trim(MBNAME ) + '))' C callp(e) QCmdExc(@Cmd : %size(@Cmd)) C end C endsr *--------------------------------------------------------------------* * $WrtError1 - allocate object failed. *--------------------------------------------------------------------* C $WrtError1 begsr C eval $Msg = 'Could not allocate file. + C File could be in use or + C authority problem.' C write DTLLIN C exsr $ovrflw C endsr *--------------------------------------------------------------------* * $WrtError2 - reorg of phys file member failed. *--------------------------------------------------------------------* C $WrtError2 begsr C eval $Msg = 'Could not reorg file. + C Possible authority problem.' C write DTLLIN C exsr $ovrflw C endsr *--------------------------------------------------------------------* * $WrtSuccess - reorg of phys file member was successful. *--------------------------------------------------------------------* C $WrtSuccess begsr C eval $Msg = 'File was reorganized + C successfully.' C write DTLLIN C exsr $ovrflw C endsr *--------------------------------------------------------------------* * $WrtNoReorg - if requested, list even lines that weren't selected. *--------------------------------------------------------------------* C $WrtNoReorg begsr C eval $Msg = 'File reorg was not needed + C for this file.' C write DTLLIN C exsr $ovrflw C endsr *--------------------------------------------------------------------* * $ovrflw - check for printer overflow *--------------------------------------------------------------------* C $ovrflw begsr C if $CurrLine > $overflow C write PAGHDG C end C endsr *--------------------------------------------------------------------* * *inzsr - runs once at very beginning of program *--------------------------------------------------------------------* C *inzsr begsr C eval $lib = @lib C eval $DRec = @DRec C eval $DPct = @DPct C write PAGHDG C endsr --------End of source member---------- source file(member): QCLSRC(RGZLIBCL) SRCTYPE(CLP) PGM PARM(&LIB &DREC &DPCT &LIST) DCL VAR(&LIB ) TYPE(*CHAR) LEN(10) DCL VAR(&DREC ) TYPE(*DEC) LEN(9 0) DCL VAR(&DPCT ) TYPE(*DEC) LEN(3 0) DCL VAR(&LIST ) TYPE(*CHAR) LEN(1) CHKOBJ OBJ(&LIB) OBJTYPE(*LIB) MONMSG MSGID(CPF0000) EXEC(DO) SNDPGMMSG MSG('Library does not exist. Command + Cancelled') GOTO CMDLBL(EXIT) ENDDO DSPFD FILE(&LIB/*ALL) TYPE(*MBR) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/QAFDMBR) OVRDBF FILE(QAFDMBR) TOFILE(QTEMP/QAFDMBR) CALL PGM(RGZLIBR) PARM(&LIB &DREC &DPCT &LIST) DLTOVR FILE(QAFDMBR) DLTF FILE(QTEMP/QAFDMBR) EXIT: ENDPGM --------End of source member---------- source file(member): QCMDSRC(RGZLIB) SRCTYPE(CMD) CMD PROMPT('Reorg Files in Library') PARM KWD(LIBR) TYPE(*NAME) LEN(10) MIN(1) + PROMPT('Library Name:') PARM KWD(DELREC) TYPE(*DEC) LEN(9 0) + PROMPT('Deleted Records threshold') PARM KWD(DELPCT) TYPE(*DEC) LEN(3 0) + PROMPT('Deleted Pct threshold') PARM KWD(LIST) TYPE(*CHAR) LEN(1) DFT(N) + PROMPT('List files reorged? Y/N') --------End of source member----------
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.