Ich übertrage jeden Tag eine vielzahl von Libs auf unser Backupsystem. Hierfür habe ich folgenen Programm erstellt.


Sichern auf dem Quellsystem


Code:
/* ****************************************************************************/ 
/* Programm: SAVSNDLIB                                                     1  */ 
/* Funktion: Sicher einer Lib in SAVF und versenden per FTP                   */ 
/* ****************************************************************************/ 
             PGM        PARM(&LIB &RMTSYS)                                       
             DCL        VAR(&LIB) TYPE(*CHAR) LEN(10)                            
             DCL        VAR(&RMTSYS) TYPE(*CHAR) LEN(8)                          
/* -------------------------------------------------------------------------- */ 
             DLTOBJ     OBJ(QTEMP/SAVSAVF) OBJTYPE(*FILE)                        
             MONMSG     MSGID(CPF0000)                                           
             CRTSAVF    FILE(QTEMP/SAVSAVF) TEXT('Tmp Savf for lib')             
             MONMSG     MSGID(CPF0000)                                           
/* -------------------------------------------------------------------------- */ 
             SAVLIB     LIB(&LIB) DEV(*SAVF) SAVF(QTEMP/SAVSAVF) +               
                          SAVACT(*SYNCLIB) DTACPR(*YES)                          
             MONMSG     MSGID(CPF0000)                                           
/* -------------------------------------------------------------------------- */ 
             CRTSRCPF   FILE(QTEMP/QFTPSRC) RCDLEN(112)                          
             MONMSG     MSGID(CPF0000)                                           
            CPYF       FROMFILE(TOOLS/QFTPSRC) +                     
                         TOFILE(QTEMP/QFTPSRC) FROMMBR(SNDSAVFLIB) +    
                         TOMBR(SNDSAVFLIB) MBROPT(*REPLACE) +           
                         CRTFILE(*YES)                                  
            CPYF       FROMFILE(TOOLS/QFTPSRC) +                     
                         TOFILE(QTEMP/QFTPSRC) FROMMBR(SNDSAVFLOL) +    
                         TOMBR(SNDSAVFLOL) MBROPT(*REPLACE) +           
                         CRTFILE(*YES)                                  
            FTPBATCH   RMTSYS(&RMTSYS) +                                
                         CMDFILE(SNDSAVFLIB/QTEMP/QFTPSRC) +            
                         FTPLOG(SNDSAVFLOL/QTEMP/QFTPSRC) DLTLOG(*NO)   
                                                                        
            ENDPGM

FTP Batch Datei SNDSAVFLIB

Code:
USER  PASSWORD                                                        
BINARY                                                                 
QUOTE RCMD DLTOBJ  QGPL/RCVSAVF  OBJTYPE(*FILE)                        
QUOTE RCMD CRTSAVF QGPL/RCVSAVF                                        
PUT QTEMP/SAVSAVF.SAVF    QGPL/RCVSAVF.SAVF                            
QUOTE RCMD CHGJOB LOG(4 00 *SECLVL) LOGCLPGM(*YES)                     
QUOTE RCMD CALL  PGM(TOOLS/RSTSAVFLIB) PARM('RCVSAVF   QGPL')       
QUIT
FTP LogDatei SNDSAVFLOL

Code:
 DARF NICHT LEER SEIN

Auf dem Zielsystem

Code:
/* ****************************************************************************/  
/* Programm: RCVSNDSAVF                                                       */  
/* Funktion: EMPFANGEN GESENDETEN SAVF VIA FTP                                */  
/* Aufruf:   VIA FTP REMOTE SYSTEM CL SAVSNDSAVF - FTP  RMTCMD                */  
/* ****************************************************************************/  
             PGM        PARM(&SAVFLIB)                                            
                                                                                  
             DCL        VAR(&USRSPC) TYPE(*CHAR) LEN(20) +                        
                          VALUE('SAV001US  QTEMP')                                
             DCL        VAR(&FMTNAM) TYPE(*CHAR) LEN(8) +                         
                          VALUE('SAVF0200')                                       
             DCL        VAR(&SAVFLIB) TYPE(*CHAR) LEN(20)                         
             DCL        VAR(&OBJFLT) TYPE(*CHAR) LEN(10) VALUE('*ALL')            
             DCL        VAR(&TYPFLT) TYPE(*CHAR) LEN(10)  VALUE('*ALL')           
             DCL        VAR(&CNTHND) TYPE(*CHAR) LEN(36)                          
             DCL        VAR(&ERRCOD) TYPE(*CHAR) LEN(4)                           
             DCL        VAR(&DEC9) TYPE(*CHAR) LEN(9)                             
             DCL        &ONED *DEC LEN(9 0) VALUE(1)                              
             DCL        &LEND *DEC LEN(9 0) VALUE(140)                            
            DCL        &STRPOS *CHAR LEN(4)                            
            DCL        &LEN *CHAR LEN(4)                               
            DCL        VAR(&RTNVAR) TYPE(*CHAR) LEN(140)               
            CHGJOB     LOG(4 00 *SECLVL) LOGCLPGM(*YES)                
            MONMSG MSGID(CPF0000)                                      
  /*----------------------------------------------------- */           
  /* Create the user space                                */           
  /*----------------------------------------------------- */           
             DLTUSRSPC  USRSPC(%SST(&USRSPC 11 10)/%SST(&USRSPC 1 +    
                          10))                                         
             MONMSG MSGID(CPF0000)                                     
             CALL       PGM(QUSCRTUS) PARM(&USRSPC '' +                
                          100000 '' '*ALL' '')                         
 /*----------------------------------------------------- */            
 /* Füllen User Space                                    */            
 /*----------------------------------------------------- */            
            CHGVAR     VAR(%BIN(&ERRCOD 1 4)) VALUE(0)                 
            CALL       PGM(QSRLSAVF) PARM(&USRSPC &FMTNAM &SAVFLIB +   
                         &OBJFLT &TYPFLT &CNTHND &ERRCOD)              
 /*----------------------------------------------------- */            
  /* Empfangen User Space                                 */                    
  /*----------------------------------------------------- */                    
             CHGVAR     %BIN(&STRPOS 1 4) &ONED                                 
             CHGVAR     %BIN(&LEN 1 4) &LEND                                    
             CALL       QUSRTVUS PARM(&USRSPC &STRPOS &LEN &RTNVAR)             
                                                                                
             CHGVAR     VAR(&ONED)             VALUE(%BIN(&RTNVAR 125 4))       
             CHGVAR     VAR(&ONED) VALUE(&ONED +1)                              
             CHGVAR     VAR(&LEND)             VALUE(%BIN(&RTNVAR 137 4))       
             CHGVAR     %BIN(&STRPOS 1 4) &ONED                                 
             CHGVAR     %BIN(&LEN 1 4) &LEND                                    
             CALL       QUSRTVUS PARM(&USRSPC &STRPOS &LEN &RTNVAR)             
                                                                                
             CALLSUBR   SUBR(RSTLIB)                                            
                                                                                
/* ****************************************************************************/
             SUBR       SUBR(RSTLIB)                                            
             RSTLIB     SAVLIB(%SST(&RTNVAR 1 10)) DEV(*SAVF) +                 
                           SAVF(%SST(&SAVFLIB 11 10)/%SST(&SAVFLIB 1 +           
                                               10)) MBROPT(*ALL) ALWOBJDIF(*ALL)          
            ENDSUBR                                                 
          ENDPGM

Das Programm SAVSNDLIB rufe ich von einem Programm auf welches die einzelen Libs in der richtigen Reihenfolge übergibt.
Vorteil dieser Programme: Auf dem Remote System muß nur eine SAVF angelegt und das Programm RSTSAVLIB vorhanden. Den Rest steuert das Quellsystem.