Em ambientes mainframe com muitos aplicativos e serviços ativos, o monitoramento constante dos aplicativos pode se tornar uma tarefa cansativa e sujeita a falhas. Em uma conferência manual, além do tempo gasto, sempre existe o risco de algum aplicativo fora do ar passar despercebido, principalmente em ambientes grandes e com alta quantidade de processos ativos.
Pensando em facilitar esse trabalho e aumentar a confiabilidade do monitoramento, a melhor solução é a automação.
Neste tutorial, vamos montar um JCL e desenvolver dois programas em Natural capazes de realizar automaticamente a conferência das STCs online e offline no ambiente mainframe. Com isso, o processo se torna muito mais rápido, seguro e eficiente, reduzindo o esforço operacional e melhorando o acompanhamento dos serviços essenciais do 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 ENDAAFPRSTC - 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 CONSTDatasets que foram criados para o nosso JCL0080 * --- 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
//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 //*



0 comentários:
Enviar um comentário