InícioScripts › Backup de Biblioteca

Script CLP — Backup de Biblioteca

Backup parametrizado de biblioteca para Save File com nome automático por data (BKPYYMMDD). Inclui tratamento de erro e notificação ao operador.

Como Usar

/* Criar e compilar */
STRSEU SRCFILE(SCRIPTLIB/QCLSRC) SRCMBR(BKPLIB) TYPE(CLP)
CRTCLPGM PGM(SCRIPTLIB/BKPLIB) SRCFILE(SCRIPTLIB/QCLSRC) SRCMBR(BKPLIB)

/* Executar — passe a biblioteca a salvar e onde gravar o SAVF */
CALL PGM(SCRIPTLIB/BKPLIB) PARM('PRODLIB' 'BACKUPLIB')

/* Agendar de seg a sex às 22:00 */
ADDJOBSCDE JOB(BKPPRODLIB) CMD(CALL PGM(SCRIPTLIB/BKPLIB) PARM('PRODLIB' 'BKPLIB')) FRQ(*WEEKLY) SCDDAY(*MON *TUE *WED *THU *FRI) SCDTIME('22:00:00')

Nomenclatura do Save File

O script cria automaticamente um Save File com nome BKP + YYMMDD:

Data do backupNome do SAVF gerado
15/01/2024BKP240115
31/03/2024BKP240331
01/12/2024BKP241201

Código-fonte CLP

/*===========================================================*/
/* BKPLIB.CLP — Backup de Biblioteca para Save File         */
/* Parâmetros: &BIBLIOTECA &BKPLIB                           */
/* Uso: CALL PGM(SCRIPTLIB/BKPLIB) PARM('PRODLIB' 'BKPLIB') */
/* Versão 1.0 — AS/400 Lab                                   */
/*===========================================================*/
PGM PARM(&BIBLIOTECA &BKPLIB)

DCL VAR(&BIBLIOTECA) TYPE(*CHAR) LEN(10)
DCL VAR(&BKPLIB)     TYPE(*CHAR) LEN(10)
DCL VAR(&DATA)       TYPE(*CHAR) LEN(10)
DCL VAR(&DATA6)      TYPE(*CHAR) LEN(6)
DCL VAR(&HORA)       TYPE(*CHAR) LEN(8)
DCL VAR(&SAVFNAME)   TYPE(*CHAR) LEN(10)
DCL VAR(&MSG)        TYPE(*CHAR) LEN(200)

/* Monitoramento global de erros */
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERRO))

/* Obter data e hora */
RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATA)
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&HORA)

/* Extrair YYMMDD e montar nome do SAVF */
CHGVAR VAR(&DATA6)   VALUE(%SST(&DATA 3 6))
CHGVAR VAR(&SAVFNAME) VALUE('BKP' *CAT &DATA6)

/* Notificar início */
CHGVAR VAR(&MSG) VALUE('INICIO BACKUP: ' *CAT &BIBLIOTECA *CAT +
       ' -> ' *CAT &BKPLIB *CAT '/' *CAT &SAVFNAME *CAT +
       ' (' *CAT &DATA *CAT ' ' *CAT &HORA *CAT ')')
SNDMSG MSG(&MSG) TOUSR(QSYSOPR) MSGTYPE(*INFO)

/* Remover SAVF anterior da mesma data se existir */
DLTOBJ OBJ(&BKPLIB/&SAVFNAME) OBJTYPE(*SAVF)
MONMSG MSGID(CPF2105)   /* Ignorar se não existir */

/* Criar novo Save File */
CHGVAR VAR(&MSG) VALUE('Backup ' *CAT &BIBLIOTECA *CAT ' - ' *CAT &DATA)
CRTSAVF FILE(&BKPLIB/&SAVFNAME) TEXT(&MSG)

/* Executar backup */
SAVLIB LIB(&BIBLIOTECA)  +
       DEV(*SAVF)         +
       SAVF(&BKPLIB/&SAVFNAME) +
       UPDHST(*YES)       +
       ACCPTH(*YES)       +
       TGTRLS(*CURRENT)

/* Notificar sucesso */
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&HORA)
CHGVAR VAR(&MSG) VALUE('BACKUP OK: ' *CAT &BIBLIOTECA *CAT +
       ' -> ' *CAT &BKPLIB *CAT '/' *CAT &SAVFNAME *CAT +
       ' HORA: ' *CAT &HORA)
SNDMSG MSG(&MSG) TOUSR(QSYSOPR) MSGTYPE(*INFO)
GOTO CMDLBL(FIM)

/* Tratamento de erro */
ERRO:
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&HORA)
CHGVAR VAR(&MSG) VALUE('*** ERRO BACKUP: ' *CAT &BIBLIOTECA *CAT +
       ' - VERIFIQUE O JOB LOG - HORA: ' *CAT &HORA *CAT ' ***')
SNDMSG MSG(&MSG) TOUSR(QSYSOPR) MSGTYPE(*ESCAPE)

FIM:
ENDPGM

Verificando o Backup Gerado

/* Ver o Save File criado */
DSPSAVF FILE(BKPLIB/BKP240115)

/* Listar todos os SAVFs na biblioteca de backup */
WRKOBJ OBJ(BKPLIB/*ALL) OBJTYPE(*SAVF)

/* Restaurar em biblioteca de teste */
RSTLIB SAVLIB(PRODLIB) DEV(*SAVF) SAVF(BKPLIB/BKP240115) RSTLIB(PRODLIB_TESTE)
Dica: Combine com o script de monitoramento para ter uma rotina noturna completa: backup às 22:00, monitoramento às 07:00.