Problem solve Get help with specific problems with your technologies, process and projects.

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       

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

Dig Deeper on iSeries CL programming

Start the conversation

Send me notifications when other members comment.

Please create a username to comment.

-ADS BY GOOGLE

SearchDataCenter

Close