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 backup | Nome do SAVF gerado |
|---|---|
| 15/01/2024 | BKP240115 |
| 31/03/2024 | BKP240331 |
| 01/12/2024 | BKP241201 |
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.