Monitorar aplicativos em Mainframe não precisa ser um gargalo operacional. A conferência manual, além de consumir tempo precioso, abre margem para falhas invisíveis — especialmente onde a quantidade de processos ativos é elevada.
A chave para um monitoramento resiliente é a automação. Criar rotinas em Natural elimina a conferencia manual, garantindo a precisão total na verificação do ambiente.
Vamos aprender a configurar um JCL e codificar dois programas em Natural que monitoram, em tempo real, as STCs essenciais. O resultado é um acompanhamento robusto, com menos carga de trabalho e maior segurança para os serviços críticos do seu ambiente.
Esse é o JCL completo
//AAFSNSTC JOB (AAF,TSS),KATIA,CLASS=S,MSGCLASS=A
//*UQ ALLOW
//* ----------------------------------------------------------------
//* CHECANDO OS APLICATIVOS ONLINE/OFFLINE NO MAINFRAME
//* 150 LINHAS - 133 COLUNAS
//* ----------------------------------------------------------------
//SDSF EXEC PGM=SDSF,PARM='++150,133'
//ISFOUT DD DSN=AAF.S.OPER1,DISP=SHR
//ISFIN DD *
SET CONSOLE BATCH
SET DELAY 600
ULOG
/D A,L
END
//* ----------------------------------------------------------------
//* FILTRO NO NATURAL
//* ----------------------------------------------------------------
//FILTRO EXEC NATURAL,PARM1='SYS=P,MT=0,STACK=(LOGON ADABAS8)'
//CMWKF01 DD DSN=AAF.S.OPER1,DISP=SHR
//CMWKF02 DD DSN=AAF.S.OPER2,DISP=SHR
//SYSOUT DD SYSOUT=*
//CMPRINT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//CMPRT01 DD SYSOUT=*
//SYSIN DD *
AAFPTSS9
//* ----------------------------------------------------------------
//* COLOCANDO EM ORDEM ALFABETICA OS APLICATIVOS
//* ----------------------------------------------------------------
//SORT EXEC PGM=SORT
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=AAF.S.OPER2,DISP=SHR
//SORTWK1 DD UNIT=SYSDA,DISP=(,DELETE),SPACE=(CYL,(4),RLSE),
// VOL=SER=WRK001
//SORTOUT DD DSN=AAF.S.OPER3,DISP=SHR
//SYSIN DD *
SORT FIELDS=(1,8,CH,A)
RECORD TYPE=F,LENGTH=(40)
//* ----------------------------------------------------------------
//* LISTANDO OS APLICATIVOS
//* ----------------------------------------------------------------
//NATD EXEC NATURAL,PARM1='SYS=P,MT=0,STACK=(LOGON ADABAS8)'
//CMWKF01 DD DSN=AAF.S.OPER3,DISP=SHR
//CMWKF02 DD DSN=AAF.S.OPER1,DISP=SHR
//SYSOUT DD SYSOUT=*
//CMPRINT DD SYSOUT=G
//SYSPRINT DD SYSOUT=*
//CMPRT01 DD SYSOUT=*
//SYSIN DD *
AAFPRSTC
//* ----------------------------------------------------------------
A parte muito importante que pega o comando D A,L e grava em um dataset e usa os dois programas natural acima para mostrar que aplicativos estão online - No primeiro step tem essa parte -- PARM='++150,133' -- significa que o resultado do comando (D A,L) vai separar 150 linhas com 133 de colunas para o resultado do comando, se você tem muitos aplicativos que dê mais de 150 linhas - Resultado depois de rodar o job acima - os aplicativos que estão online vai mostrar de uma forma bem simples, os aplicativos que estiverem offline vão aparecer nas primeiras linhas
1Logon accepted to library ADABAS8.
1NEXT AAFPRSTC
1PAG 1
0 AADPRMM ONLINE
DB2P0020 ONLINE
DB2P0030 ONLINE
DB2P0040 ONLINE
DB2P0050 ONLINE
DB2P0060 ONLINE
DB2P0070 ONLINE
DB2P0080 ONLINE
DB2P0082 ONLINE
DB2P0100 ONLINE
DB2P0110 ONLINE
DB2P0120 ONLINE
DB2P0130 ONLINE
DB2P0140 ONLINE
DB2P0141 ONLINE
DB2P0150 ONLINE
DB2P0160 ONLINE
DB2P0170 ONLINE
DB2P0180 ONLINE
DB2P0190 ONLINE
DB2P0210 ONLINE
DB2P0230 ONLINE
DB2P0240 ONLINE
DB2P0241 ONLINE
DB2P0242 ONLINE
SERVA240 ONLINE
SERVB230 ONLINE
SERVC240 ONLINE
SERVE240 ONLINE
SERVF230 ONLINE
SERVH240 ONLINE
BROKEDET ONLINE
BROKELIN ONLINE
BROKENFR ONLINE
BROKENID ONLINE
BROKENIT ONLINE
BROKERCH ONLINE
BROKERNV ONLINE
SERVK080 ONLINE
SERVM240 ONLINE
SERVN240 ONLINE
SERVR230 ONLINE
SERVR240 ONLINE
SERVR241 ONLINE
SERVR242 ONLINE
SERVR243 ONLINE
SERVR244 ONLINE
SERVR245 ONLINE
SERVR246 ONLINE
SERVR247 ONLINE
SERVR248 ONLINE
SERVR249 ONLINE
SERVR250 ONLINE
SERVR251 ONLINE
SERVUTSS ONLINE
COMPLETD ONLINE
COMPLETP ONLINE
FTP1 ONLINE
REFSMTP ONLINE
REFSNMP ONLINE
REFTCPIP ONLINE
REFTELNT ONLINE
REFTRVS ONLINE
REFTVTAM ONLINE
AOPD ONLINE
AOPHINVD ONLINE
AOPIPPD ONLINE
AOPLOGD ONLINE
AOPLPD ONLINE
AOPNETD ONLINE
AOPNETSP ONLINE
AOPOUTD ONLINE
AOPPRWAY ONLINE
AOPSDBD ONLINE
AOPSSID ONLINE
AOPSUBD ONLINE
AOPWSMD ONLINE
1PAG 2
0 RACF ONLINE
RMF ONLINE
RMFGAT ONLINE
TSO ONLINE
AAFPTSS9 - Primeiro programa que vamos fazer um filtro, vamos ler do dataset o comando D A,L e vamos pegar os aplicativos
0010 * -------------------------------------------------------------------- *
0020 * FUNCAO : CHECANDO OS APLICATIVOS ONLINE NO MAINFRAME *
0030 * CRIADO : KATIA UETI/CLAUDEMAR MARTINS *
0040 * DATA : 27/04/2016 *
0050 * -------------------------------------------------------------------- *
0060 *
0070 *
0080 * -------------------------------------------------------------------- *
0090 DEFINE DATA LOCAL
0100 01 #FLAG-ON (N01)
0110 01 #FLAG (A02)
0120 01 #NUM (N03)
0130 * -------------------------------------------------------------------- *
0140 01 #LINHA (A133)
0150 01 REDEFINE #LINHA
0160 02 FILLER 04X
0170 02 #JOBS (A04)
0180 02 FILLER 125X
0190 01 REDEFINE #LINHA
0200 02 FILLER 04X
0210 02 #NOME1 (A08)
0220 02 REDEFINE #NOME1
0230 03 #PREFIX1 (A02)
0240 03 #SUFIX1 (A06)
0250 02 FILLER 24X
0260 02 #PROC1 (A01)
0270 02 FILLER 02X
0280 02 #NOME2 (A08)
0290 02 REDEFINE #NOME2
0300 03 #PREFIX2 (A02)
0310 03 #SUFIX2 (A06)
0320 02 FILLER 24X
0330 02 #PROC2 (A01)
0340 02 FILLER 61X
0350 * -------------------------------------------------------------------- *
0360 01 #NOME-ARQ (A40)
0370 01 REDEFINE #NOME-ARQ
0380 02 #NOME-APLICAT (A08)
0390 02 FILLER (A32)
0400 * -------------------------------------------------------------------- *
0410 END-DEFINE
0420 FORMAT(1) PS=60
0430 RESET #FLAG #FLAG-ON #NUM
0440 * -------------------------------------------------------------------- *
0450 READ WORK FILE 1 #LINHA
0460 * -------------------------------------------------------------------- *
0470 IF #JOBS = 'JOBS'
0480 MOVE 'OK' TO #FLAG
0490 ESCAPE TOP
0500 END-IF
0510 * -------------------------------------------------------------------- *
0520 IF #FLAG = 'OK'
0530 IF #JOBS = 'JOBS' AND #NUM GT 0
0540 MOVE 1 TO #FLAG-ON
0550 ESCAPE BOTTOM
0560 END-IF
0570 * -------------------------------------------------------------------- *
0580 * MONITORAR TODOS OS APLICATIVOS RE - COLUNA UM *
0590 * -------------------------------------------------------------------- *
0600 * IF #PREFIX1 = 'RE' AND #PROC1 = 'S'
0610 * ADD 1 TO #NUM
0620 * MOVE #NOME1 TO #NOME-APLICAT
0630 * WRITE WORK FILE 2 #NOME-ARQ
0640 **** WRITE 'TSS4 = ' #NOME-ARQ
0650 * END-IF
0660 * -------------------------------------------------------------------- *
0670 * MONITORAR TODOS OS APLICATIVOS RE - COLUNA DOIS *
0680 * -------------------------------------------------------------------- *
0690 * IF #PREFIX2 = 'RE' AND #PROC2 = 'S'
0700 * ADD 1 TO #NUM
0710 * MOVE #NOME2 TO #NOME-APLICAT
0720 * WRITE WORK FILE 2 #NOME-ARQ
0730 **** WRITE 'TSS4 = ' #NOME-ARQ
0740 * END-IF
0750 * -------------------------------------------------------------------- *
0760 * COLUNA 1 - TODOS OS APLICATIVOS QUE MONITORAMOS *
0770 * -------------------------------------------------------------------- *
0780 IF #NOME1
0790 = 'AADPTLMS' OR = 'DB2P0020' OR = 'DB2P0030' OR = 'DB2P0040' OR
0800 = 'DB2P0050' OR = 'DB2P0060' OR = 'DB2P0070' OR = 'DB2P0080' OR
0810 = 'DB2P0082' OR = 'DB2P0100' OR = 'DB2P0110' OR = 'DB2P0120' OR
0820 = 'DB2P0130' OR = 'DB2P0140' OR = 'DB2P0150' OR = 'DB2P0160' OR
0830 = 'DB2P0170' OR = 'DB2P0180' OR = 'DB2P0190' OR = 'DB2P0210' OR
0840 = 'DB2P0230' OR = 'DB2P0240' OR = 'DB2P0241' OR = 'DB2P0242' OR
0850 = 'SERVA240' OR = 'SERVC240' OR = 'SERVE240' OR = 'SERVF230' OR
0860 = 'BROKEDET' OR = 'BROKELIN' OR = 'BROKENID' OR = 'BROKENIT' OR
0870 = 'BROKERCH' OR = 'BROKERNV' OR = 'SERVK080' OR = 'SERVM240' OR
0880 = 'SERVN240' OR = 'SERVR230' OR = 'SERVR240' OR = 'SERVR241' OR
0890 = 'SERVR242' OR = 'SERVR243' OR = 'SERVR244' OR = 'SERVR245' OR
0900 = 'SERVR246' OR = 'SERVR247' OR = 'SERVR248' OR = 'SERVR249' OR
0910 = 'SERVR250' OR = 'SERVUTSS' OR = 'COMPLETD' OR = 'COMPLETP' OR
0920 = 'REFSMTP ' OR = 'REFSNMP ' OR = 'REFTCPIP' OR = 'REFTRVS ' OR
0930 = 'REFTVTAM' OR = 'AOPD ' OR = 'AOPHINVD' OR = 'AOPIPPD ' OR
0940 = 'AOPLOGD ' OR = 'AOPLPD ' OR = 'AOPNETD ' OR = 'AOPNETSP' OR
0950 = 'AOPOUTD ' OR = 'AOPPRWAY' OR = 'AOPSDBD ' OR = 'AOPSSID ' OR
0960 = 'AOPSUBD ' OR = 'AOPWSMD ' OR = 'RMF ' OR = 'RMFGAT ' OR
0970 = 'TSO ' OR = 'RACF ' OR = 'REFTELNT' OR = 'REDPRMM ' OR
0980 = 'AOPPRWAY' OR = 'SERVB230' OR = 'FTP1 ' OR = 'DB2P0141' OR
0990 = 'SERVH240' OR = 'BROKENFR' OR = 'SERVR251'
1000 ADD 1 TO #NUM
1010 MOVE #NOME1 TO #NOME-APLICAT
1020 WRITE WORK FILE 2 #NOME-ARQ
1030 **** WRITE 'TSS4 = ' #NOME-ARQ
1040 END-IF
1050 * -------------------------------------------------------------------- *
1060 * COLUNA 2 - TODOS OS APLICATIVOS QUE MONITORAMOS *
1070 * -------------------------------------------------------------------- *
1080 IF #NOME2
1090 = 'AADPTLMS' OR = 'DB2P0020' OR = 'DB2P0030' OR = 'DB2P0040' OR
1100 = 'DB2P0050' OR = 'DB2P0060' OR = 'DB2P0070' OR = 'DB2P0080' OR
1110 = 'DB2P0082' OR = 'DB2P0100' OR = 'DB2P0110' OR = 'DB2P0120' OR
1120 = 'DB2P0130' OR = 'DB2P0140' OR = 'DB2P0150' OR = 'DB2P0160' OR
1130 = 'DB2P0170' OR = 'DB2P0180' OR = 'DB2P0190' OR = 'DB2P0210' OR
1140 = 'DB2P0230' OR = 'DB2P0240' OR = 'DB2P0241' OR = 'DB2P0242' OR
1150 = 'SERVA240' OR = 'SERVC240' OR = 'SERVE240' OR = 'SERVF230' OR
1160 = 'BROKEDET' OR = 'BROKELIN' OR = 'BROKENID' OR = 'BROKENIT' OR
1170 = 'BROKERCH' OR = 'BROKERNV' OR = 'SERVK080' OR = 'SERVM240' OR
1180 = 'SERVN240' OR = 'SERVR230' OR = 'SERVR240' OR = 'SERVR241' OR
1190 = 'SERVR242' OR = 'SERVR243' OR = 'SERVR244' OR = 'SERVR245' OR
1200 = 'SERVR246' OR = 'SERVR247' OR = 'SERVR248' OR = 'SERVR249' OR
1210 = 'SERVR250' OR = 'SERVUTSS' OR = 'COMPLETD' OR = 'COMPLETP' OR
1220 = 'REFSMTP ' OR = 'REFSNMP ' OR = 'REFTCPIP' OR = 'REFTRVS ' OR
1230 = 'REFTVTAM' OR = 'AOPD ' OR = 'AOPHINVD' OR = 'AOPIPPD ' OR
1240 = 'AOPLOGD ' OR = 'AOPLPD ' OR = 'AOPNETD ' OR = 'AOPNETSP' OR
1250 = 'AOPOUTD ' OR = 'AOPPRWAY' OR = 'AOPSDBD ' OR = 'AOPSSID ' OR
1260 = 'AOPSUBD ' OR = 'AOPWSMD ' OR = 'RMF ' OR = 'RMFGAT ' OR
1270 = 'TSO ' OR = 'RACF ' OR = 'REFTELNT' OR = 'REDPRMM ' OR
1280 = 'AOPPRWAY' OR = 'SERVB230' OR = 'FTP1 ' OR = 'DB2P0141' OR
1290 = 'SERVH240' OR = 'BROKENFR' OR = 'SERVR251'
1300 ADD 1 TO #NUM
1310 MOVE #NOME2 TO #NOME-APLICAT
1320 WRITE WORK FILE 2 #NOME-ARQ
1330 **** WRITE 'TSS4 = ' #NOME-ARQ
1340 END-IF
1350 * -------------------------------------------------------------------- *
1360 END-IF
1370 END-WORK
1380 END
AAFPRSTC - agora vamos listar no nosso job os aplicativos que estão online
0010 * -------------------------------------------------------------------- *
0020 * FUNCAO - VERIFICAR OS APLICATIVOS QUE ESTAO ONLINE/OFFLINE *
0030 * AUTOR - CLAUDEMAR MARTINS DE SA *
0040 * -------------------------------------------------------------------- *
0050 DEFINE DATA
0060 LOCAL
0070 * --- ADICIONANDO MAIS UM APLICATIVO AUMENTE O VALOR CONST
0080 * --- TEMOS ATUALMENTE 81 APLICATIVOS PARA MONITORAR
0090 *
0100 01 #TOTAL-APPS (I2) CONST <81>
0110 01 #REGISTRO-ENTRADA (A80)
0120 01 #LISTA-PESQUISA (A8/1:#TOTAL-APPS)
0130 INIT
0140 *
0150 * --- APLICATIVOS A SEREM MONITORADOS - TEMOS 81 STCs
0160 *
0170 <'AADPTLMS','DB2P0020','DB2P0030','DB2P0040','DB2P0050',
0180 'DB2P0060','DB2P0070','DB2P0080','DB2P0082','DB2P0100','DB2P0110',
0190 'DB2P0120','DB2P0130','DB2P0140','DB2P0141','DB2P0150','DB2P0160',
0200 'DB2P0170','DB2P0180','DB2P0190','DB2P0210','DB2P0230','DB2P0240',
0210 'DB2P0241','DB2P0242','SERVA240','SERVB230','SERVC240','SERVE240',
0220 'SERVF230','SERVH240','BROKEDET','BROKELIN','BROKENFR','BROKENID',
0230 'BROKENIT','BROKERCH','BROKERNV','SERVK080','SERVM240','SERVN240',
0240 'SERVR230','SERVR240','SERVR241','SERVR242','SERVR243','SERVR244',
0250 'SERVR245','SERVR246','SERVR247','SERVR248','SERVR249','SERVR250',
0260 'SERVR251','SERVUTSS','COMPLETD','COMPLETP','FTP1 ','REFSMTP ',
0270 'REFSNMP ','REFTCPIP','REFTELNT','REFTRVS ','REFTVTAM','AOPD ',
0280 'AOPHINVD','AOPIPPD ','AOPLOGD ','AOPLPD ','AOPNETD ','AOPNETSP',
0290 'AOPOUTD ','AOPPRWAY','AOPSDBD ','AOPSSID ','AOPSUBD ','AOPWSMD ',
0300 'RACF ','RMF ','RMFGAT ','TSO '>
0310 *
0320 * -------------------------------------------------------------------- *
0330 *
0340 01 #JA-ENCONTRADO (L/1:#TOTAL-APPS) INIT
0350 01 #I (I2)
0360 END-DEFINE
0370 *
0380 * -------------------------------------------------------------------- *
0390 *
0400 FORMAT LS=183 PS=0
0410 * EJECT OFF
0420 * SET CONTROL 'f+'
0430 * SET CONTROL 'H'
0440 *
0450 * --- 1. FASE DE LEITURA (APENAS IDENTIFICACAO) ---
0460 *
0470 READ WORK FILE 1 #REGISTRO-ENTRADA
0480 FOR #I = 1 TO #TOTAL-APPS
0490 IF #JA-ENCONTRADO(#I)
0500 ESCAPE TOP
0510 END-IF
0520 * -------------------------------------------------------------------- *
0530 * -------------------------------------------------------------------- *
0540 IF #REGISTRO-ENTRADA = SCAN #LISTA-PESQUISA(#I)
0550 #JA-ENCONTRADO(#I) := TRUE
0560 ESCAPE BOTTOM
0570 END-IF
0580 END-FOR
0590 END-WORK
0600 *
0610 * --- PRIMEIRO OS APLICATIVOS OFFLINE ---
0620 *
0630 FOR #I = 1 TO #TOTAL-APPS
0640 IF NOT #JA-ENCONTRADO(#I)
0650 *
0660 WRITE ' ' #LISTA-PESQUISA(#I) (AL=10)
0670 ' ==== OFFLINE ===='
0680 END-IF
0690 END-FOR
0700 *
0710 * --- SEGUNDO OS APLICATIVOS ONLINE ---
0720 *
0730 FOR #I = 1 TO #TOTAL-APPS
0740 IF #JA-ENCONTRADO(#I)
0750 WRITE ' ' #LISTA-PESQUISA(#I) (AL=10)
0760 ' ONLINE '
0770 WRITE WORK FILE 2 #LISTA-PESQUISA(#I)
0780 END-IF
0790 END-FOR
0800 END
Datasets que foram criados para o nosso JCL
//AACCBR14 JOB (ALAD,DISA),'SCHED',CLASS=7,MSGCLASS=A
//*UQ ALLOW
//* ------------------------------------------------------------
//* CRIA DATASET NO MAINFRAME
//* ------------------------------------------------------------
//S1 EXEC PGM=IEFBR14
//CATLG1 DD DSN=AAF.S.OPER1,
// DISP=(NEW,CATLG,DELETE),
// DCB=(DSORG=PS,LRECL=133,BLKSIZE=1330,RECFM=FB),
// VOL=SER=DISCO1,SPACE=(CYL,(4,1),RLSE),UNIT=SYSDA
//*
//CATLG1 DD DSN=AAF.S.OPER2,
// DISP=(NEW,CATLG,DELETE),
// DCB=(DSORG=PS,LRECL=133,BLKSIZE=1330,RECFM=FB),
// VOL=SER=DISCO1,SPACE=(CYL,(4,1),RLSE),UNIT=SYSDA
//*
//CATLG1 DD DSN=AAF.S.OPER3,
// DISP=(NEW,CATLG,DELETE),
// DCB=(DSORG=PS,LRECL=133,BLKSIZE=1330,RECFM=FB),
// VOL=SER=DISCO1,SPACE=(CYL,(4,1),RLSE),UNIT=SYSDA
//*
//CATLG1 DD DSN=AAF.S.OPER4,
// DISP=(NEW,CATLG,DELETE),
// DCB=(DSORG=PS,LRECL=133,BLKSIZE=1330,RECFM=FB),
// VOL=SER=DISCO1,SPACE=(CYL,(4,1),RLSE),UNIT=SYSDA
//*