Conceitos JCL MVS Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 1 Apresentação Obrigado por usar esta apresentação. Você está livre para fazer isso. Eu agradeço se fizer referência ao autor ao utilizá-la. Agradeço se você me enviar qualquer correção que ache necessária para otimizar a compreensão do leitor. O mesmo se aplica a erros técnicos que você encontrar; por favor me ajude a deixar este material sem erros. Alberto Romano Schiesari – São Paulo - Brasil www.profars.com [email protected] Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 2 Sumário Principais sistemas operacionais IBM Linha MVS Execução da demanda de serviços Fluxo geral JES2 Spool de entrada e spool de saída Spool de entrada Submissão de jobs - Roscoe Enfileiramento de jobs no spool de entrada Conteúdo de cada job no spool de entrada Initiators Spool de saída JCL JOB EXEC DD Busca em bibliotecas PROCS Apêndice - Mainframes IBM Apêndice - CONTROL’s Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 3 Conceitos Principais sistemas operacionais IBM (as datas citadas são aproximadas) ver http://publib.boulder.ibm.com/infocenter/zos/basics/index.jsp Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 4 Conceitos – Principais sistemas operacionais IBM Linha “DOS” ou “VSE” DOS (1966) DOS/VS (1972) DOS/VSE (80’s) VSE/ESA (1991) z/VSE (2005) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 5 Conceitos – Principais sistemas operacionais IBM Principais sistemas operacionais IBM Linha “VM” VM/370 (1972) VM/SP (1980) VM/XA (1988) VM/ESA (1990) z/VM (2000) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 6 Conceitos – Principais sistemas operacionais IBM Conceitos Principais sistemas operacionais IBM Linha “real-time” (transacionais) ACP (1969) TPF (1979) z/TPF (2005) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 7 Conceitos – Principais sistemas operacionais IBM Conceitos Principais sistemas operacionais IBM Linha Unix-like UTS (1981) AIX/370 (1990) AIX/ESA (1991) LINUX (1999) Open Solaris (2008) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 8 Conceitos – Principais sistemas operacionais IBM Conceitos Principais sistemas operacionais IBM Linha MVS MFT (1966) ; OS/VS1 (1972) (fim) MVT (1967) OS/VS2 R1 (SVS) (1972) 24-bit addressing; Single Address Space MVS (OSVS2 R2) (1974) 24-bit addressing; Múltiplos Address Spaces MVS/370 (1981) . MVS/XA (83) Extended Architecture MVS/ESA (1988) Enterprise System Architeture; 31-bit addressing OS/390 (1995) . z/OS (2000) ; 24-,31- 64-bit addressing z/OS 1.10 (Sep 2008) (aqui = 1.09) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 9 Conceitos – Principais sistemas operacionais IBM Conceitos Cada sistema operacional tem sua linguagem para elaborar “scripts” e para ser instrumento formal de (a) solicitação de serviços ao S.O. pelo usuário (b) retorno de resultados e mensagens do S.O. para o usuário Essa linguagem, no caso do MVS e s.o.’s derivados é genericamente denominada JCL (Job Control Language = Linguagem de Controle de Serviços) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 10 Conceitos – Principais sistemas operacionais IBM Conceitos A título de curiosidade: exemplo de JCL para a linha DOS baixa plataforma (arquivos .bat ) @echo off cls :a ECHO Compilando %1 IF EXIST %1.OBJ DEL %1.OBJ COBOL %1; ANIM COPYLIST > %1.LST IF ERRORLEVEL 1 ECHO *** Erro LINK %1+%COBDIR%\ADIS+%COBDIR%\ADISKEY+%COBDIR%\ADISINIT; >> %1.LST rem TYPE %1.LST shift if not "%1" == "" goto a @ECHO Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 11 Conceitos – Principais sistemas operacionais IBM Conceitos A título de curiosidade: exemplo de JCL para a linha UNIX (Shell Script) #!/bin/ksh #--------------------------------------------------------------------# # Rotina: rsyil02.sh - Salva arquivo de retorno do Mainframe # #--------------------------------------------------------------------# BN=` basename $0 ` DN=` dirname $0 ` . $DN/raet.functions FILE=/comunicacao/bi/recebidos/rsybi02 if [ -f $FILE.txt ] ; then if [ -f $FILE.txt ] ; then salvacopia $FILE.txt || exit $? expurga $FILE.txt 12 || exit $? else echo " Erro. Arquivo $FILE.txt nao existe" exit 1 fi \mv -f $FILE.txt $FILE else echo " Movimento Inexistente para o dia." exit 0 fi Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 12 Conceitos – Principais sistemas operacionais IBM Conceitos A título de curiosidade: exemplo de JCL para a linha VSE >SUB,R,N >* BKPD047 - BACKUP D047 TO T047 * $$ JOB JNM=BKPD047,CLASS=8,USER='44-R.WALKO' * $$ PRT CLASS=B,DISP=H // JOB BKPD047 BACKUP D047 TO T047 // DLBL D047,'D047.ADPDCS.INPUT ',,VSAM,CAT=PRODCAT,BUFSP=40960 // TLBL FILEB,'T047,U' // EXEC EASYTREV INCLUDE EZBKVSES D047 VS VB 750 8352 UNLOAD /* /& * $$ EOJ http://gsf-soft.com/Prism-CS/Samples/BKPD047.shtml Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 13 Conceitos – Principais sistemas operacionais IBM Conceitos A título de curiosidade: o equivalente para a linha MVS //BKPD047 JOB (BKPD047),' ',CLASS=A,MSGCLASS=X, // MSGLEVEL=(1,1),REGION=6M //* //JOBLIB INCLUDE MEMBER=JOBLIB //STEP0010 EXEC PGM=SORT //* MODULE EASYTREV PROCESSED BY PLUG-IN LCPEZT //* VS VS I PRODCAT D047 'D047.ADPDCS.INPUT' //SORTIN DD DSN=MVS.D047.ADPDCS.INPUT,DISP=SHR //* MT O FILEB 'T047,U' //SORTOUT DD DSN=MVS.T047, // DISP=(NEW,CATLG,DELETE), // UNIT=TAPE //* PR O //SYSOUT DD SYSOUT=* //* CD I //SYSIN DD * *INCLUDE EZBKVSES D047 VS VB 750 8352 UNLOAD SORT FIELDS=COPY RECORD TYPE=V,LENGTH=750 /* // http://gsf-soft.com/Prism-CS/Samples/BKPD047.shtml Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 14 Linha MVS – execução da demanda de serviços Execução da demanda de serviços Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 15 Linha MVS – principais componentes para serviços CUIDADO! ACHTUNG! Tudo o que você ver/ler/escutar é válido para aplicações BATCH ! Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 16 Linha MVS – principais componentes para serviços CUIDADO! ACHTUNG! Tudo o que você ver/ler/escutar é válido para aplicações BATCH ! Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 17 Linha MVS – principais componentes para serviços Fluxo geral SISTEMA Entrada (pedido de execução) de serviços Sumário Pag.Ant. Saída dos resultados (basicamente: impressão em papel ou “em terminal”) Alberto Romano Schiesari – www.profars.com 18 Linha MVS – principais componentes para serviços Fluxo geral SISTEMA Como entram os serviços? Entrada (pedido de execução) de serviços Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 19 Linha MVS – principais componentes para serviços Fluxo geral SISTEMA Como saem os resultados? Saída dos resultados (basicamente: impressão em papel ou “em terminal”) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 20 Linha MVS – principais componentes para serviços Fluxo geral Existe um software específico para executar essas funções de entrada das demandas e saída de resultados. É o JES2. (Job Entry Subsystem) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 21 JES2 Portanto: JES2 Componentes do JES2 que recebem as “entradas” Entrada (pedido de execução) de serviços Sumário Pag.Ant. Componentes do JES2 que dão saída aos resultados Saída dos resultados (basicamente: impressão em papel ou “em terminal”) Alberto Romano Schiesari – www.profars.com 22 JES2 Em outras palavras: Sistema Operacional z/OS Componente 1 ... Componente 2 ... JES2 Componente n ... Aplicativo 1 Entrada (pedido de execução) de serviços Aplicativo 2 ... Aplicativo n (ex.:CICS) ... Aplicativo x (ex.: DB2) ... Aplicativo z ... Sumário Pag.Ant. Saída dos resultados (basicamente: impressão em papel ou “em terminal”) Alberto Romano Schiesari – www.profars.com 23 JES2 Por exemplo: Sistema Operacional z/OS Componente 1 ... Componente 2 ... JES2 Componente n ... Aplicativo 1 Entrada de serviços via terminal (sub) Aplicativo 2 ... Aplicativo n (ex.:CICS) ... Aplicativo x (ex.: DB2) ... Aplicativo z ... Sumário Pag.Ant. Saída dos resultados via terminal (browse de sysout de job) Alberto Romano Schiesari – www.profars.com 24 JES2 Mas... Devemos lembrar que: Sistema Operacional z/OS Componente 1 ... Componente 2 ... JES2 Componente n ... Aplicativo 1 Aplicativo 2 ... Aplicativo n (ex.:CICS) ... Terminais para SUB (PRECISAM estar associados a um aplicativo !!!) Sumário Pag.Ant. Aplicativo x (ex.: DB2) ... Aplicativo z ... Terminais para BROWSE (PRECISAM estar associados a um aplicativo !!!) Alberto Romano Schiesari – www.profars.com 25 JES2 Mas... Devemos lembrar que: Sistema Operacional z/OS Componente 1 ... Componente 2 ... JES2 Componente n ... Aplicativo 1 Aplicativo 2 ... Aplicativo n (ex.:CICS) ... Qual aplicativo é responsável por este terminal? Sumário Pag.Ant. Aplicativo x (ex.: DB2) ... Aplicativo z ... Qual aplicativo é responsável por este terminal? Alberto Romano Schiesari – www.profars.com 26 JES2 Pode ser o Roscoe... JES2 ROSCOE O Roscoe é quem submete serviços para o JES2 Sumário Pag.Ant. O Roscoe é quem trata os resultados, “pegando-os” do JES2 Alberto Romano Schiesari – www.profars.com 27 JES2 Ou o TSO... JES2 TSO O TSO é quem submete serviços para o JES2 Sumário Pag.Ant. O TSO é quem trata os resultados, “pegando-os” do JES2 Alberto Romano Schiesari – www.profars.com 28 JES2 Mas, seja um ou seja outro... JES2 Roscoe ou TSO O terminal é só a interface visual Sumário Pag.Ant. O terminal é só a interface visual Alberto Romano Schiesari – www.profars.com 29 JES2 Os dados, na verdade, estão onde? JES2 Roscoe ou TSO Onde está o stream que preparamos e submetemos? Sumário Pag.Ant. Onde está a sysout que acessamos para ver? Alberto Romano Schiesari – www.profars.com 30 JES2 Em disco ! Nas áreas de spool ! JES2 Roscoe ou TSO Área de spool de saída Área de spool de entrada Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 31 Entrada de serviços Vamos ver inicialmente alguns detalhes do processo de spool de entrada JES2 Sumário Área de spool de entrada Roscoe ou TSO Pag.Ant. Alberto Romano Schiesari – www.profars.com 32 Entrada de serviços - ROSCOE OBS.: usando o ROSCOE (as coisas acontecem desta forma) Roscoe Área de manipulação do Roscoe (AWS) (criação / FETCH/ATTACH) LIB’s do Roscoe (organização de dados proprietária) (quando for dado SAVE or UPDATE) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 33 Entrada de serviços - ROSCOE OBS.: ou o TSO (os dados são manipulados diretamente nos arquivos “normais”) TSO Membro de um PDS Arquivo sequencial Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 34 Entrada de serviços - ROSCOE OBS.: nós nos referiremos à manipulação dos dados a submeter usando esta figura TSO/Roscoe Sumário Dados editados a submeter Pag.Ant. Alberto Romano Schiesari – www.profars.com 35 Entrada de serviços - ROSCOE Passo 1 = edição dados a submeter TSO/Roscoe Sumário Dados editados a submeter Pag.Ant. Alberto Romano Schiesari – www.profars.com 36 Entrada de serviços - ROSCOE Passo 1 = edição dados a submeter Sumário TSO/Roscoe Pag.Ant. //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG //C.SYSIN DD * PROGRAMA START 0 ENTRAR BAL R14,ROTMAIN PROG PROPRIAMENTE DITO SAIR DC A(0) SAVEAREA DO ENDERECO VOLTA ROTMAIN ST R14,*-4 SALVA ENDERECO VOLTA OPEN (AGENCIAS,INPUT) ABRE ARQUIVO LEITURA BAL 14,LEREG LE REGISTRO CLI FLAGFIM,C'Y' END OF FILE? BE ACABAR SE SIM, TERMINAR O PROGRAMA AP LIDOS,=P'1' CONTA REGISTROS LIDOS B LEITURA VOLTA A LER ACABAR CLOSE (AGENCIAS) FECHA ARQUIVO L R14,ROTMAIN-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA DC A(0) SAVEAREA DO ENDERECO DE VOLTA LEREG ST R14,*-4 SALVA ENDERECO DE VOLTA B SAILER VAI PARA SAIDA FIMAG MVI FLAGFIM,C'Y' MARCA QUE ARQUIVO ACABOU SAILER L R14,LEREG-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA * DECLARACAO DE ARQUIVOS E AREAS RELAT DCB LRECL=133,DSORG=PS,RECFM=FA,DDNAME=SYSPRINT,MACRF=PM AGENCIAS DCB LRECL=80,DSORG=PS,DDNAME=AGENCIAS,MACRF=GM,EODAD=FIMAG FLAGFIM DC C'N' FLAG INDICA FIM ARQ ENTRADA LAG DS CL80 AREA PARA LEITURA ARQUIVO END , ULTIMO STMT FONTE //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * 0001NOME DA AGENCIA 0001---------* 0002NOME DA AGENCIA 0002---------* 0003NOME DA AGENCIA 0003---------* 0004NOME DA AGENCIA 0004---------* Alberto Romano Schiesari – www.profars.com 37 Entrada de serviços - ROSCOE Vendo de outro jeito... TSO/Roscoe Statement JOB Componentes do primeiro step (compilação = execução do programa montador Assembler) Componentes do segundo step (linkedição = execução do programa linkeditor) Componentes do terceiro step (meu programa) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 38 Entrada de serviços - ROSCOE Analisando c-u-i-d-a-d-o-s-a-m-e-n-t-e os dados a submeter... Sumário TSO/Roscoe Pag.Ant. //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG //C.SYSIN DD * PROGRAMA START 0 ENTRAR BAL R14,ROTMAIN PROG PROPRIAMENTE DITO SAIR DC A(0) SAVEAREA DO ENDERECO VOLTA ROTMAIN ST R14,*-4 SALVA ENDERECO VOLTA OPEN (AGENCIAS,INPUT) ABRE ARQUIVO LEITURA BAL 14,LEREG LE REGISTRO CLI FLAGFIM,C'Y' END OF FILE? BE ACABAR SE SIM, TERMINAR O PROGRAMA AP LIDOS,=P'1' CONTA REGISTROS LIDOS B LEITURA VOLTA A LER ACABAR CLOSE (AGENCIAS) FECHA ARQUIVO L R14,ROTMAIN-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA DC A(0) SAVEAREA DO ENDERECO DE VOLTA LEREG ST R14,*-4 SALVA ENDERECO DE VOLTA B SAILER VAI PARA SAIDA FIMAG MVI FLAGFIM,C'Y' MARCA QUE ARQUIVO ACABOU SAILER L R14,LEREG-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA * DECLARACAO DE ARQUIVOS E AREAS RELAT DCB LRECL=133,DSORG=PS,RECFM=FA,DDNAME=SYSPRINT,MACRF=PM AGENCIAS DCB LRECL=80,DSORG=PS,DDNAME=AGENCIAS,MACRF=GM,EODAD=FIMAG FLAGFIM DC C'N' FLAG INDICA FIM ARQ ENTRADA LAG DS CL80 AREA PARA LEITURA ARQUIVO END , ULTIMO STMT FONTE //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * 0001NOME DA AGENCIA 0001---------* 0002NOME DA AGENCIA 0002---------* 0003NOME DA AGENCIA 0003---------* 0004NOME DA AGENCIA 0004---------* Alberto Romano Schiesari – www.profars.com 39 Entrada de serviços - ROSCOE Por outro “ângulo”, vendo o stream como um todo ... TSO/Roscoe //PSTARS3T JOB (1234),'ALBERTO', // CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG //C.SYSIN DD * Dados do dataset SYSIN do step C //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * Dados do dataset AGENCIAS do step G Em vermelho = JCL Em azul = dados Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 40 Entrada de serviços - ROSCOE Por outro “prisma”, vendo por tipo de dados ... TSO/Roscoe //PSTARS3T JOB (1234),‘ALBERTO', // CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG //C.SYSIN DD * //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * Dados do arquivo SYSIN do Step C Dados do arquivo AGENCIAS do Step G Em vermelho = JCL Em azul = dados Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 41 Entrada de serviços - ROSCOE Voltando à relação entre o Roscoe e o JES... Sumário TSO/Roscoe Pag.Ant. //PSTARS3T JOB (9526),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG //C.SYSIN DD * PROGRAMA START 0 ENTRAR BAL R14,ROTMAIN PROG PROPRIAMENTE DITO SAIR DC A(0) SAVEAREA DO ENDERECO VOLTA ROTMAIN ST R14,*-4 SALVA ENDERECO VOLTA OPEN (AGENCIAS,INPUT) ABRE ARQUIVO LEITURA BAL 14,LEREG LE REGISTRO CLI FLAGFIM,C'Y' END OF FILE? BE ACABAR SE SIM, TERMINAR O PROGRAMA AP LIDOS,=P'1' CONTA REGISTROS LIDOS B LEITURA VOLTA A LER ACABAR CLOSE (AGENCIAS) FECHA ARQUIVO L R14,ROTMAIN-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA DC A(0) SAVEAREA DO ENDERECO DE VOLTA LEREG ST R14,*-4 SALVA ENDERECO DE VOLTA B SAILER VAI PARA SAIDA FIMAG MVI FLAGFIM,C'Y' MARCA QUE ARQUIVO ACABOU SAILER L R14,LEREG-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA * DECLARACAO DE ARQUIVOS E AREAS RELAT DCB LRECL=133,DSORG=PS,RECFM=FA,DDNAME=SYSPRINT,MACRF=PM AGENCIAS DCB LRECL=80,DSORG=PS,DDNAME=AGENCIAS,MACRF=GM,EODAD=FIMAG FLAGFIM DC C'N' FLAG INDICA FIM ARQ ENTRADA FLAG DS CL80 AREA PARA LEITURA ARQUIVO END , ULTIMO STMT FONTE //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * 0001NOME DA AGENCIA 0001---------* 0002NOME DA AGENCIA 0002---------* 0003NOME DA AGENCIA 0003---------* 0004NOME DA AGENCIA 0004---------* Alberto Romano Schiesari – www.profars.com 42 Entrada de serviços - ROSCOE O Roscoe submete (entrega) o stream vindo da AWS para o JES... JES2 Área de spool de entrada Sumário SUB Pag.Ant. TSO/Roscoe Dados editados a submeter Alberto Romano Schiesari – www.profars.com 43 Entrada de serviços - ROSCOE O componente do JES que “lê” o que alguém (por ex. o Roscoe) submete é (são) a(s) READER(s) / INTERPRETER(s) JES2 Área de spool de entrada Reader Sumário SUB TSO/Roscoe AWS Pag.Ant. Alberto Romano Schiesari – www.profars.com 44 Entrada de serviços - ROSCOE Tem diversas readers, que atendem a todos os componentes que submetem JOBs; ao ler, elas já fazem uma validaçãozinha antes de gravar na área de spool (por isso o interpreter) JES2 Área de spool de entrada Readers Datasets “normais” SUB Sumário Pag.Ant. TSO Roscoe AWS SUB Alberto Romano Schiesari – www.profars.com 45 Entrada de serviços Vamos ver melhor essa tal de área de spool de entrada JES2 Área de spool de entrada Readers Datasets “normais” SUB Sumário Pag.Ant. TSO Roscoe AWS SUB Alberto Romano Schiesari – www.profars.com 46 Entrada de serviços Área de spool de entrada : a unidade de “arquivamento” é o JOB JOB0001 JOB0002 JOB0003 JOB0004 JOB0006 JOB0007 JOB0008 Etc... Sumário Pag.Ant. JOB0005 Alberto Romano Schiesari – www.profars.com 47 Entrada de serviços Os JOBS são enfileirados na ordem de chegada; cada um recebe um número identificador, que vai acompanhá-lo até o fim de sua vida JOB0001 JOB0002 JOB0003 JOB0004 JOB0006 JOB0007 JOB0008 Etc... Sumário Pag.Ant. JOB0005 Alberto Romano Schiesari – www.profars.com 48 Entrada de serviços Os JOBS ficam na fila aguardando execução. JOB0001 JOB0002 JOB0003 JOB0004 JOB0006 JOB0007 JOB0008 Etc... Sumário Pag.Ant. JOB0005 Alberto Romano Schiesari – www.profars.com 49 Entrada de serviços Vamos ver um pouquinho mais detalhadamente como eles ficam armazenados. Detalhemos um deles (JOB0001): JOB0001 TODOS os registros (statements) de JCL (um único arquivo) Sumário Pag.Ant. Para cada arquivo in-stream contido no que foi submetido, é criado um arquivo identificado por meio do nome do step + nome do DD Alberto Romano Schiesari – www.profars.com 50 Entrada de serviços Exemplo: se for submetido o stream (ref. JOB0001) //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC PGM=PGTST01,PARM=‘TOT=YES' //STEP2 EXEC PGM=PGTST02 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 51 Entrada de serviços O spool de entrada referente ao JOB0001 vai ficar assim: //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC PGM=PGTST01,PARM=‘TOT=YES' //STEP2 EXEC PGM=PGTST02 JOB0001 //PSTARS3T JOB (123),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC PGM=PGTST01,PARM=‘TOT=YES‘ //STEP2 EXEC PGM=PGTST02 Não vai ter arquivos referente a dados in-stream pois não há nenhum dado in-stream Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 52 Entrada de serviços Exemplo: se for submetido o stream (ref. JOB0002) //PSTARS3T //STEP1 //STEP2 //STEP3 //SYSOUT //SYSPRINT //SYSIN DD DELETE Sumário JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O EXEC PGM=PGTST01,PARM=‘TOT=YES' EXEC PGM=PGTST02 EXEC PGM=IDCAMS DD SYSOUT=* DD SYSOUT=* * DES.ALB.A001 PURGE /* DELETA DATASET */ Pag.Ant. Alberto Romano Schiesari – www.profars.com 53 Entrada de serviços O spool de entrada referente ao JOB0002 vai ficar assim: //PSTARS3T //STEP1 //STEP2 //STEP3 //SYSOUT //SYSPRINT //SYSIN DD DELETE JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O EXEC PGM=PGTST01,PARM=‘TOT=YES' EXEC PGM=PGTST02 EXEC PGM=IDCAMS DD SYSOUT=* DD SYSOUT=* * DES.ALB.A001 PURGE /* DELETA DATASET */ JOB0002 //PSTARS3T //STEP1 //STEP2 //STEP3 //SYSOUT //SYSPRINT //SYSIN DD JOB EXEC EXEC EXEC DD DD * (1234),'ALBERTO',CLASS=T,MSGCLASS=O PGM=PGTST01,PARM=‘TOT=YES' PGM=PGTST02 PGM=IDCAMS SYSOUT=* SYSOUT=* Step=STEP3 ; DD=SYSIN DELETE Sumário DES.ALB.A001 PURGE Pag.Ant. /* DELETA DATASET */ Alberto Romano Schiesari – www.profars.com 54 Entrada de serviços Voltemos ao nosso JOB original, aquele com os 3 steps (compilação, linkedição e execução de um programa em Assembler); supor que seu número seja JOB1234 //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG //C.SYSIN DD * PROGRAMA START 0 ENTRAR BAL R14,ROTMAIN PROG PROPRIAMENTE DITO SAIR DC A(0) SAVEAREA DO ENDERECO VOLTA ROTMAIN ST R14,*-4 SALVA ENDERECO VOLTA OPEN (AGENCIAS,INPUT) ABRE ARQUIVO LEITURA BAL 14,LEREG LE REGISTRO CLI FLAGFIM,C'Y' END OF FILE? BE ACABAR SE SIM, TERMINAR O PROGRAMA AP LIDOS,=P'1' CONTA REGISTROS LIDOS B LEITURA VOLTA A LER ACABAR CLOSE (AGENCIAS) FECHA ARQUIVO L R14,ROTMAIN-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA DC A(0) SAVEAREA DO ENDERECO DE VOLTA LEREG ST R14,*-4 SALVA ENDERECO DE VOLTA B SAILER VAI PARA SAIDA FIMAG MVI FLAGFIM,C'Y' MARCA QUE ARQUIVO ACABOU SAILER L R14,LEREG-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA * DECLARACAO DE ARQUIVOS E AREAS RELAT DCB LRECL=133,DSORG=PS,RECFM=FA,DDNAME=SYSPRINT,MACRF=PM AGENCIAS DCB LRECL=80,DSORG=PS,DDNAME=AGENCIAS,MACRF=GM,EODAD=FIMAG FLAGFIM DC C'N' FLAG INDICA FIM ARQUIVO ENTRADA LAG DS CL80 AREA PARA LEITURA ARQUIVO END , ULTIMO STMT FONTE //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * 0001NOME DA AGENCIA 0001---------* 0002NOME DA AGENCIA 0002---------* 0003NOME DA AGENCIA 0003---------* 0004NOME DA AGENCIA 0004---------* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 55 Entrada de serviços Ele tem JCL e dados in-stream //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG //C.SYSIN DD * PROGRAMA START 0 ENTRAR BAL R14,ROTMAIN PROG PROPRIAMENTE DITO SAIR DC A(0) SAVEAREA DO ENDERECO VOLTA ROTMAIN ST R14,*-4 SALVA ENDERECO VOLTA OPEN (AGENCIAS,INPUT) ABRE ARQUIVO LEITURA BAL 14,LEREG LE REGISTRO CLI FLAGFIM,C'Y' END OF FILE? BE ACABAR SE SIM, TERMINAR O PROGRAMA AP LIDOS,=P'1' CONTA REGISTROS LIDOS B LEITURA VOLTA A LER ACABAR CLOSE (AGENCIAS) FECHA ARQUIVO L R14,ROTMAIN-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA DC A(0) SAVEAREA DO ENDERECO DE VOLTA LEREG ST R14,*-4 SALVA ENDERECO DE VOLTA B SAILER VAI PARA SAIDA FIMAG MVI FLAGFIM,C'Y' MARCA QUE ARQUIVO ACABOU SAILER L R14,LEREG-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA * DECLARACAO DE ARQUIVOS E AREAS RELAT DCB LRECL=133,DSORG=PS,RECFM=FA,DDNAME=SYSPRINT,MACRF=PM AGENCIAS DCB LRECL=80,DSORG=PS,DDNAME=AGENCIAS,MACRF=GM,EODAD=FIMAG FLAGFIM DC C'N' FLAG INDICA FIM ARQUIVO ENTRADA LAG DS CL80 AREA PARA LEITURA ARQUIVO END , ULTIMO STMT FONTE //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * 0001NOME DA AGENCIA 0001---------* 0002NOME DA AGENCIA 0002---------* 0003NOME DA AGENCIA 0003---------* 0004NOME DA AGENCIA 0004---------* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 56 Entrada de serviços O spool de entrada referente ao JOB1234 vai ficar (quase...) assim: JOB1234 //PSTARS3T JOB (1234),‘ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG //C.SYSIN DD * //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * Step=C ; DD=SYSIN PROGRAMA START 0 ENTRAR BAL R14,ROTMAIN PROG PROPRIAMENTE DITO SAIR DC A(0) SAVEAREA DO ENDERECO VOLTA ROTMAIN ST R14,*-4 SALVA ENDERECO VOLTA OPEN (AGENCIAS,INPUT) ABRE ARQUIVO LEITURA BAL 14,LEREG LE REGISTRO CLI FLAGFIM,C'Y' END OF FILE? BE ACABAR SE SIM, TERMINAR O PROGRAMA AP LIDOS,=P'1' CONTA REGISTROS LIDOS B LEITURA VOLTA A LER ACABAR CLOSE (AGENCIAS) FECHA ARQUIVO L R14,ROTMAIN-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA DC A(0) SAVEAREA DO ENDERECO DE VOLTA LEREG ST R14,*-4 SALVA ENDERECO DE VOLTA B SAILER VAI PARA SAIDA FIMAG MVI FLAGFIM,C'Y' MARCA QUE ARQUIVO ACABOU SAILER L R14,LEREG-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA * DECLARACAO DE ARQUIVOS E AREAS RELAT DCB LRECL=133,DSORG=PS,RECFM=FA,DDNAME=SYSPRINT,MACRF=PM AGENCIAS DCB LRECL=80,DSORG=PS,DDNAME=AGENCIAS,MACRF=GM,EODAD=FIMAG FLAGFIM DC C'N' FLAG INDICA FIM ARQUIVO ENTRADA LAG DS CL80 AREA PARA LEITURA ARQUIVO END , Sumário Step=G ; DD=AGENCIAS 0001NOME 0002NOME 0003NOME 0004NOME DA DA DA DA AGENCIA AGENCIA AGENCIA AGENCIA 0001---------* 0002---------* 0003---------* 0004---------* ULTIMO STMT FONTE Pag.Ant. Alberto Romano Schiesari – www.profars.com 57 Entrada de serviços Na verdade, a parte de JCL já fica EXPANDIDA (detalhes ao vermos PROCs) JOB1234 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG XXASMACLG PROC XXC EXEC PGM=ASMA90 XXSYSLIB DD DSN=SYS1.MACLIB,DISP=SHR XXSYSUT1 DD DSN=&&SYSUT1,SPACE=(4096,(120,120),,,ROUND), XX UNIT=SYSALLDA,DCB=BUFNO=1 XXSYSPRINT DD SYSOUT=* XXSYSLIN DD DSN=&&OBJ,SPACE=(3040,(40,40),,,ROUND), XX UNIT=SYSALLDA,DISP=(MOD,PASS), XX DCB=(BLKSIZE=3040,LRECL=80,RECFM=FB,BUFNO=1) //C.SYSIN DD * XXL EXEC PGM=HEWL,PARM='MAP,LET,LIST',COND=(8,LT,C) XXSYSLIN DD DSN=&&OBJ,DISP=(OLD,DELETE) XX DD DDNAME=SYSIN XXSYSLMOD DD DISP=(,PASS),UNIT=SYSALLDA,SPACE=(CYL,(1,1,1)), XX DSN=&&GOSET(GO) XXSYSUT1 DD DSN=&&SYSUT1,SPACE=(1024,(120,120),,,ROUND), XX UNIT=SYSALLDA,DCB=BUFNO=1 XXSYSPRINT DD SYSOUT=* XXG EXEC PGM=*.L.SYSLMOD,COND=((8,LT,C),(8,LT,L)) //G.SYSPRINT DD SYSOUT=* //G.SYSOUT DD SYSOUT=* //G.AGENCIAS DD * Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 58 Entrada de serviços FINALMENTE !!! O JOB1234 fica deste jeitinho: JOB1234 1 2 3 4 5 6 //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG XXASMACLG PROC XXC EXEC PGM=ASMA90 XXSYSLIB DD DSN=SYS1.MACLIB,DISP=SHR XXSYSUT1 DD DSN=&&SYSUT1,SPACE=(4096,(120,120),,,ROUND), XX UNIT=SYSALLDA,DCB=BUFNO=1 7 XXSYSPRINT DD SYSOUT=* 8 XXSYSLIN DD DSN=&&OBJ,SPACE=(3040,(40,40),,,ROUND), XX UNIT=SYSALLDA,DISP=(MOD,PASS), XX DCB=(BLKSIZE=3040,LRECL=80,RECFM=FB,BUFNO=1) 9 //C.SYSIN DD * 10 XXL EXEC PGM=HEWL,PARM='MAP,LET,LIST',COND=(8,LT,C) 11 XXSYSLIN DD DSN=&&OBJ,DISP=(OLD,DELETE) 12 XX DD DDNAME=SYSIN 13 XXSYSLMOD DD DISP=(,PASS),UNIT=SYSALLDA,SPACE=(CYL,(1,1,1)), XX DSN=&&GOSET(GO) 14 XXSYSUT1 DD DSN=&&SYSUT1,SPACE=(1024,(120,120),,,ROUND), XX UNIT=SYSALLDA,DCB=BUFNO=1 15 XXSYSPRINT DD SYSOUT=* 16 XXG EXEC PGM=*.L.SYSLMOD,COND=((8,LT,C),(8,LT,L)) 17 //G.SYSPRINT DD SYSOUT=* 18 //G.SYSOUT DD SYSOUT=* 19 //G.AGENCIAS DD * Step=C ; DD=SYSIN PROGRAMA START 0 ENTRAR BAL R14,ROTMAIN PROG PROPRIAMENTE DITO SAIR DC A(0) SAVEAREA DO ENDERECO VOLTA ROTMAIN ST R14,*-4 SALVA ENDERECO VOLTA OPEN (AGENCIAS,INPUT) ABRE ARQUIVO LEITURA BAL 14,LEREG LE REGISTRO CLI FLAGFIM,C'Y' END OF FILE? BE ACABAR SE SIM, TERMINAR O PROGRAMA AP LIDOS,=P'1' CONTA REGISTROS LIDOS B LEITURA VOLTA A LER ACABAR CLOSE (AGENCIAS) FECHA ARQUIVO L R14,ROTMAIN-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA DC A(0) SAVEAREA DO ENDERECO DE VOLTA LEREG ST R14,*-4 SALVA ENDERECO DE VOLTA B SAILER VAI PARA SAIDA FIMAG MVI FLAGFIM,C'Y' MARCA QUE ARQUIVO ACABOU SAILER L R14,LEREG-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA * DECLARACAO DE ARQUIVOS E AREAS RELAT DCB LRECL=133,DSORG=PS,RECFM=FA,DDNAME=SYSPRINT,MACRF=PM AGENCIAS DCB LRECL=80,DSORG=PS,DDNAME=AGENCIAS,MACRF=GM,EODAD=FIMAG FLAGFIM DC C'N' FLAG INDICA FIM ARQUIVO ENTRADA LAG DS CL80 AREA PARA LEITURA ARQUIVO END , ULTIMO STMT FONTE Step=G ; DD=AGENCIAS 0001NOME 0002NOME 0003NOME 0004NOME Sumário Pag.Ant. DA DA DA DA AGENCIA AGENCIA AGENCIA AGENCIA 0001---------* 0002---------* 0003---------* 0004---------* Alberto Romano Schiesari – www.profars.com 59 Entrada de serviços OK? Decore direitinho esse formato! Vamos voltar a falar sobre isso. JOB1234 1 dataset com todo o JCL, já expandido Sumário Pag.Ant. Step=ssssssss ; DD=dddddddd 1 dataset para cada arquivo instream Alberto Romano Schiesari – www.profars.com 60 Entrada de serviços Voltando ao que interessa, havia uma fila de JOBS esperando para execução... JOB0001 JOB0002 JOB0003 JOB0004 JOB0006 JOB0007 JOB0008 Etc... Sumário Pag.Ant. JOB0005 Alberto Romano Schiesari – www.profars.com 61 Execução de serviços Para que os jobs sejam executados, entram em ação outros componentes do sistema: os INITIATOR’s Sistema Operacional z/OS Componente 1 ... Seleção para execução Initiator’s JOBS da área de spool de entrada JES2 Componente n ... Aplicativo 1 Aplicativo 2 ... Aplicativo n (ex.:CICS) ... Aplicativo x (ex.: DB2) ... Aplicativo z ... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 62 Execução de serviços Eles (os INITIATOR’s) tem por função selecionar o(s) job(s) que estão em espera e iniciar sua execução. Initiator’s JOBS da área de spool de entrada Seleção para execução Qual o critério que eles usam para selecionar? A CLASSE do job. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 63 Execução de serviços Cada initiator atende algumas classes pré-definidas. Ex. INIT 1 = atende jobs de classes A, B e C INIT 2 = atende jobs de classes D, E e F Spool de entrada: fila de jobs à espera para execução JOB0001 (classe A) JOB0002 (classe B) INIT 1 : atende jobs de classes A, B e C; no exemplo, é ele quem irá selecionar os jobs 0001 e 0002. JOB0003 (classe R) JOB0004 (classe D) JOB0005 (classe E) INIT 2 : atende jobs de classes D, E e F; no exemplo, é ele quem irá selecionar os jobs 0004 e 0005. JOB0006 (classe T) Etc... Sumário Enquanto não houver INIT que atenda às classes R e/ou T, os jobs 0003 e 0006 não serão executados (selecionados para execução) Pag.Ant. Alberto Romano Schiesari – www.profars.com 64 Execução de serviços Exemplo: veja a lista de INITs conforme exibida pelo DIS INIT do Roscoe: > APPLID(EMPROSCD) USER(OB3,ARS243) > ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 INIT 1 ACTIVE JOB00716 ADP#6IA (1) PVAG1 0:17:13 C=12345 INIT 2 ACTIVE JOB01873 NDVJD000 (1) COPYDIR 0:05:04 C=21345 INIT 3 ACTIVE JOB00809 SCO#END (1) NDVRBAT 0:01:15 C=32154 INIT 4 INACTIVE C=0 INIT 5 INACTIVE C=85 INIT 6 ACTIVE JOB00789 OCC#SCL (9) NDVRBAT 0:05:05 C=9 INIT 7 INACTIVE C=QP INIT 8 ACTIVE JOB00812 FIN#T305 (S) STEP002 0:01:00 C=QS INIT 9 INACTIVE C=QR INIT 10 ACTIVE JOB00605 CPC#BUS (A) NDVRBAT 0:28:38 C=YA INIT 11 ACTIVE JOB00771 SCO#ALB (Y) NDVRBAT 0:08:08 C=YU INIT 12 ACTIVE JOB00819 NDVJPKPR (Z) BC1JPCKG 0:00:05 C=ZB INIT 13 INACTIVE C=CT INIT 14 INACTIVE C=ZN INIT 15 ACTIVE JOB00782 SCO#A005 (W) STEP1 0:06:13 C=W Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 65 Execução de serviços Ex.: INIT 1 = atende jobs de classes A, B e C. A PRIORIDADE DE SELEÇÃO é, em princípio, FIFO. Neste caso, será selecionado primeiro o JOB0001 e depois o JOB0002 Spool de entrada: fila de jobs à espera para execução JOB0001 (classe A) JOB0002 (classe B) INIT 1 : atende jobs de classes A, B e C; no exemplo, é ele quem irá selecionar os jobs 0001 e 0002. JOB0003 (classe R) Prioridade de seleção: em princípio = FIFO JOB0004 (classe D) JOB0005 (classe E) JOB0006 (classe T) Etc... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 66 Execução de serviços INIT 1 escolheu (selecionou) o JOB0001 Spool de entrada: fila de jobs à espera para execução JOB0001 (classe A) INIT 1 : selecionou o JOB0001 para execução JOB0002 (classe B) JOB0003 (classe R) JOB0004 (classe D) JOB0005 (classe E) JOB0006 (classe T) Etc... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 67 Execução de serviços Ele vai pegar as informações referentes a cada step (pedido de execução de um programa [EXEC] + informações sobre os arquivos usados pelo programa [DD] ) e fazer algumas coisinhas. Spool de entrada: fila de jobs à espera para execução JOB0001 (classe A) Tratar CADA STEP JOB0002 (classe B) JOB0003 (classe R) JOB0004 (classe D) JOB0005 (classe E) JOB0006 (classe T) Etc... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 68 Execução de serviços 1º. step : - Identificar qual o programa a executar (pega do PGM=xxxxxxxx) - Verificar o DISP de cada DD: -- Se for DISP=OLD ou DISP=SHR ou DISP=MOD, verificar se ele existe, se não está reservado para outro usuário, etc... - Se for DISP=NEW, criá-lo (já existe? cabe? Etc...) - Pede para o LOADER carregar o programa da biblioteca adequada (tem STEPLIB? Tem JOBLIB?) Deixa tudo preparadinho para o OPEN do programa... (*) (*) a não ser que o programa use DYNALLOC... É o caso do CICS... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 69 Execução de serviços Abrindo parênteses... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 70 Execução de serviços Alocação de arquivos: (a) fora do programa, antes do início de sua execução (pelo initiator); a base é o statement DD (b) no programa (dinamicamente); neste caso: - não deve ter DD - a alocação é feita por um serviço (macro / SVC) solicitado ao sistema, denominado DYNALLOC (dynamic allocation = alocação dinâmica); o programa deve efetuar o tratamento caso a alocação não consiga ser feita Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 71 Execução de serviços Fechando parênteses... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 72 Execução de serviços 1º. step : Tudo OK? Então pode chamar o programa para ser executado. Pede para o LOADER carregar o programa e transfere o controle (lembra da PSW? do entry-point?) para a primeira instrução do programa. Ou seja (falando em Assemblês): é o init quem dá o BALR 14,15 para o início de nosso programa. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 73 Execução de serviços 1º. step : Nosso programa é executado. Ele ser executado significa que a CPU executará instruções dele. Mas... Tem dezenas de outros que estão também brigando para que suas instruções sejam executadas pela CPU. Aí entra em jogo a PRIORIDADE DE EXECUÇÃO ou PRIORIDADE DE DESPACHO (dispatching priority). Ela determina quais as “mordomias” de prioridade que meu programa terá no algoritmo que determina quanto a CPU vai dedicar para cada programa concorrente pelo seu uso. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 74 Execução de serviços 1º. step : E se ele ler um arquivo que foi fornecido via DD * ? Quando for dado o OPEN, o método de acesso recebe a informação (preparada pelo JES2) de que o arquivo está “aguardando” no spool de entrada do job (identificado pelo nome do step e nome do DD). Portanto, nosso programa, nesse caso, vai ler direto da área de spool de entrada. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 75 Execução de serviços 1º. step : JOB1234 1 2 3 4 5 6 //PSTARS3T JOB (1234),'ALBERTO',CLASS=T,MSGCLASS=O //STEP1 EXEC ASMACLG XXASMACLG PROC XXC EXEC PGM=ASMA90 XXSYSLIB DD DSN=SYS1.MACLIB,DISP=SHR XXSYSUT1 DD DSN=&&SYSUT1,SPACE=(4096,(120,120),,,ROUND), XX UNIT=SYSALLDA,DCB=BUFNO=1 7 XXSYSPRINT DD SYSOUT=* 8 XXSYSLIN DD DSN=&&OBJ,SPACE=(3040,(40,40),,,ROUND), XX UNIT=SYSALLDA,DISP=(MOD,PASS), XX DCB=(BLKSIZE=3040,LRECL=80,RECFM=FB,BUFNO=1) 9 //C.SYSIN DD * 10 XXL EXEC PGM=HEWL,PARM='MAP,LET,LIST',COND=(8,LT,C) 11 XXSYSLIN DD DSN=&&OBJ,DISP=(OLD,DELETE) 12 XX DD DDNAME=SYSIN 13 XXSYSLMOD DD DISP=(,PASS),UNIT=SYSALLDA,SPACE=(CYL,(1,1,1)), XX DSN=&&GOSET(GO) 14 XXSYSUT1 DD DSN=&&SYSUT1,SPACE=(1024,(120,120),,,ROUND), XX UNIT=SYSALLDA,DCB=BUFNO=1 15 XXSYSPRINT DD SYSOUT=* 16 XXG EXEC PGM=*.L.SYSLMOD,COND=((8,LT,C),(8,LT,L)) 17 //G.SYSPRINT DD SYSOUT=* 18 //G.SYSOUT DD SYSOUT=* 19 //G.AGENCIAS DD * Step=C ; DD=SYSIN PROGRAMA START 0 ENTRAR BAL R14,ROTMAIN PROG PROPRIAMENTE DITO SAIR DC A(0) SAVEAREA DO ENDERECO VOLTA ROTMAIN ST R14,*-4 SALVA ENDERECO VOLTA OPEN (AGENCIAS,INPUT) ABRE ARQUIVO LEITURA BAL 14,LEREG LE REGISTRO CLI FLAGFIM,C'Y' END OF FILE? BE ACABAR SE SIM, TERMINAR O PROGRAMA AP LIDOS,=P'1' CONTA REGISTROS LIDOS B LEITURA VOLTA A LER ACABAR CLOSE (AGENCIAS) FECHA ARQUIVO L R14,ROTMAIN-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA DC A(0) SAVEAREA DO ENDERECO DE VOLTA LEREG ST R14,*-4 SALVA ENDERECO DE VOLTA B SAILER VAI PARA SAIDA FIMAG MVI FLAGFIM,C'Y' MARCA QUE ARQUIVO ACABOU SAILER L R14,LEREG-4 RESTAURA ENDERECO VOLTA BR R14 VOLTA * DECLARACAO DE ARQUIVOS E AREAS RELAT DCB LRECL=133,DSORG=PS,RECFM=FA,DDNAME=SYSPRINT,MACRF=PM AGENCIAS DCB LRECL=80,DSORG=PS,DDNAME=AGENCIAS,MACRF=GM,EODAD=FIMAG FLAGFIM DC C'N' FLAG INDICA FIM ARQUIVO ENTRADA LAG DS CL80 AREA PARA LEITURA ARQUIVO END , O programa lê daqui! Sumário Pag.Ant. ULTIMO STMT FONTE Step=G ; DD=AGENCIAS 0001NOME 0002NOME 0003NOME 0004NOME DA DA DA DA AGENCIA AGENCIA AGENCIA AGENCIA 0001---------* 0002---------* 0003---------* 0004---------* Alberto Romano Schiesari – www.profars.com 76 Execução de serviços 1º. step : Nosso programa termina. Falando em Assemblês, quando ele der o BR 14 derradeiro, o controle volta para o initiator; especificamente para um subcomponentezinho chamado terminator (também não foi desenvolvido por Casseta & Planeta Ltda): vê como foi o término (normal, anormal), o Return Code, fecha os arquivos não fechados, etc. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 77 Execução de serviços 2º. step em diante: O processo é repetido para todos os steps do JOB, acrescentando-se o teste do Return Code para saber se o step deve ou não ser executado (COND=...) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 78 Execução de serviços OK? Entrada de jobs OK? Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 79 Execução de serviços Hora de ver como funciona o spool de saída Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 80 Saída de resultados (relatórios) “Um monte de gente” acessa dados no spool de saída JES2 Área de spool de saída Roscoe(CA software) ou TSO (IBM software) Control (software da BMC software) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 81 Saída de resultados (relatórios) Quem “grava” no spool de saída ? JES2 Área de spool de saída Aplicativos Sistema Operacional e seus componentes (inclusive o JES2) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 82 Saída de resultados (relatórios) Todo mundo que “imprime” alguma coisa... Aplicativos e sistema operacional. JES2 Área de spool de saída Aplicativos Sistema Operacional e seus componentes (inclusive o JES2) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 83 Saída de resultados (relatórios) Mas... na verdade, é só o JES quem grava. Sabe por quê? JES2 Área de spool de saída Aplicativos Sistema Operacional e seus componentes (inclusive o JES2) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 84 Saída de resultados (relatórios) Porque todo mundo que “imprime” é interceptado pelo JES e ele redireciona para o spool de saída, do qual ele é o administrador; isso é naturalmente feito se a saída é SYSOUT=treco JES2 Área de spool de saída Aplicativos Sistema Operacional e seus componentes (inclusive o JES2) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 85 Saída de resultados (relatórios) Para onde são direcionadas as saídas do sistema operacional? Para a classe de saída indicada em MSGCLASS=treco JES2 Área de spool de saída Sistema Operacional e seus componentes (inclusive o JES2) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 86 Saída de resultados (relatórios) Para onde são direcionadas as saídas dos aplicativos? Para a classe de saída indicada em SYSOUT=treco JES2 Área de spool de saída Aplicativos Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 87 Saída de resultados (relatórios) Mas o que é esse TRECO ? JES2 ? Aplicativos Sistema Operacional e seus componentes (inclusive o JES2) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 88 Saída de resultados (relatórios) É a classe de saída. JES2 Há n arquivos por job, cada arquivo tem uma classe associada Aplicativos Sistema Operacional e seus componentes (inclusive o JES2) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 89 Saída de resultados (relatórios) O sistema, em princípio (a não ser que especificado em contrário no MSGLEVEL), gera 3 relatórios relativos ao processamento do JCL: JES2.JESMSGLG = log dos eventos relativos ao job (início, fim, etc) JES2.JESJCL = JCL expandido JES2.JESYSMSG = mensagens do initiator e do terminator JOB1234 , file JES2.JESMSGLG, classe R Linha 1 file 1 ... Etc... JOB JOB1234 , file JES2.JESJCL, classe R Linha 1 Relat1 ... Etc... JOB1234 , file JES2.JESYSMSG, classe R Linha 1 Relat2 ... Etc... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 90 Saída de resultados (relatórios) Exemplo ( truncado à direita) de JES2.JESMSGLG = log dos eventos relativos ao job J E S 2 J O B L O G -- S Y S T E M D 1 T -- 15.42.13 JOB04227 ---- FRIDAY, 28 AUG 2009 ---15.42.13 JOB04227 IRR010I USERID D839471 IS ASSIGNED TO THIS JOB. 15.42.13 JOB04227 ******* PSTARS3T *--------------------------Sepro-41* 15.42.13 JOB04227 IEF196I ******* PSTARS3T *--------------------------Se 15.42.13 JOB04227 ******* PSTARS3T * IEFUJV PROCESSING COMPLETE * 15.42.13 JOB04227 IEF196I ******* PSTARS3T * IEFUJV PROCESSING COMPLETE 15.42.13 JOB04227 ******* PSTARS3T *--------------------------Sepro-41* 15.42.13 JOB04227 IEF196I ******* PSTARS3T *--------------------------Se 15.42.13 JOB04227 IEF677I WARNING MESSAGE(S) FOR JOB PSTARS3T ISSUED 15.42.13 JOB04227 ICH70001I D839471 LAST ACCESS AT 15:42:05 ON FRIDAY, 15.42.13 JOB04227 $HASP373 PSTARS3T STARTED - INIT 28 - CLASS T - SYS 15.42.13 JOB04227 IEF403I PSTARS3T - STARTED - TIME=15.42.13 15.42.14 JOB04227 IEF285I SYS1.MACLIB 15.42.14 JOB04227 IEF285I VOL SER NOS= D1T900. 15.42.14 JOB04227 --TIMINGS (M 15.42.14 JOB04227 -JOBNAME STEPNAME PROCSTEP RC EXCP CPU SRB 15.42.14 JOB04227 -PSTARS3T STEP1 C 00 63 .00 .00 15.42.14 JOB04227 -PSTARS3T STEP1 L 00 19 .00 .00 15.42.14 JOB04227 IEF285I SYS09240.T154213.RA000.PSTARS3T.GOSET.H06 15.42.14 JOB04227 -PSTARS3T STEP1 G 00 9 .00 .00 15.42.14 JOB04227 IEF404I PSTARS3T - ENDED - TIME=15.42.14 15.42.14 JOB04227 -PSTARS3T ENDED. NAME-JAGUA #4 ALBERTO TOTAL CPU 15.42.14 JOB04227 $HASP395 PSTARS3T ENDED ------ JES2 JOB STATISTICS -----28 AUG 2009 JOB EXECUTION DATE 116 CARDS READ 640 SYSOUT PRINT RECORDS 0 SYSOUT PUNCH RECORDS 44 SYSOUT SPOOL KBYTES 0.00 MINUTES EXECUTION TIME Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 91 Saída de resultados (relatórios) Exemplo (truncado à direita) de JES2.JESJCL = JCL expandido =============================== T O P ================================= 1 //PSTARS3T JOB (9526,,,20,,1090),'JAGUA #4 ALBERTO', // CLASS=T,TIME=3,MSGCLASS=O 2 //STEP1 EXEC ASMACLG,PARM.G='INFORMACOES VIA PARM' 3 XXASMACLG PROC XX* XX************************************************************* XX* ASMACLG XX* THIS PROCEDURE RUNS THE HIGH LEVEL ASSEMBLER, LINK-EDITS TH XX* NEWLY ASSEMBLED PROGRAM AND RUNS THE PROGRAM AFTER XX* THE LINK-EDIT IS ACCOMPLISHED. XX************************************************************* XX* 4 XXC EXEC PGM=ASMA90 5 XXSYSLIB DD DSN=SYS1.MACLIB,DISP=SHR 6 XXSYSUT1 DD DSN=&&SYSUT1,SPACE=(4096,(120,120),,,ROUND), XX UNIT=SYSALLDA,DCB=BUFNO=1 7 XXSYSPRINT DD SYSOUT=* 8 XXSYSLIN DD DSN=&&OBJ,SPACE=(3040,(40,40),,,ROUND), XX UNIT=SYSALLDA,DISP=(MOD,PASS), XX DCB=(BLKSIZE=3040,LRECL=80,RECFM=FB,BUFNO=1) 9 //C.SYSIN DD * 10 XXL EXEC PGM=HEWL,PARM='MAP,LET,LIST',COND=(8,LT,C) 11 XXSYSLIN DD DSN=&&OBJ,DISP=(OLD,DELETE) 12 XX DD DDNAME=SYSIN 13 XXSYSLMOD DD DISP=(,PASS),UNIT=SYSALLDA,SPACE=(CYL,(1,1,1)), XX DSN=&&GOSET(GO) 14 XXSYSUT1 DD DSN=&&SYSUT1,SPACE=(1024,(120,120),,,ROUND), XX UNIT=SYSALLDA,DCB=BUFNO=1 15 XXSYSPRINT DD SYSOUT=* 16 XXG EXEC PGM=*.L.SYSLMOD,COND=((8,LT,C),(8,LT,L)) 17 //G.SYSPRINT DD SYSOUT=* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 92 Saída de resultados (relatórios) Exemplo (truncadas à direita) de JES2.JESYSMSG = mensagens do initiator e do terminator STMT NO. MESSAGE 2 IEFC001I PROCEDURE ASMACLG WAS EXPANDED USING SYSTEM LIBRARY JE 16 IEF686I DDNAME REFERRED TO ON DDNAME KEYWORD IN PRIOR STEP WAS ICH70001I D839471 LAST ACCESS AT 15:42:05 ON FRIDAY, AUGUST 28, 2009 IEF236I ALLOC. FOR PSTARS3T C STEP1 IEF237I BE10 ALLOCATED TO SYSLIB IGD101I SMS ALLOCATED TO DDNAME (SYSUT1 ) DSN (SYS09240.T154213.RA000.PSTARS3T.SYSUT1.H06 ) STORCLAS (SCVIO) MGMTCLAS ( ) DATACLAS ( ) VOL SER NOS= VIO IEF237I JES2 ALLOCATED TO SYSPRINT IGD101I SMS ALLOCATED TO DDNAME (SYSLIN ) DSN (SYS09240.T154213.RA000.PSTARS3T.OBJ.H06 ) STORCLAS (SCVIO) MGMTCLAS ( ) DATACLAS ( ) VOL SER NOS= VIO IEF237I JES2 ALLOCATED TO SYSIN IEF142I PSTARS3T C STEP1 - STEP WAS EXECUTED - COND CODE 0000 IEF285I SYS1.MACLIB KEPT IEF285I VOL SER NOS= D1T900. IGD105I SYS09240.T154213.RA000.PSTARS3T.SYSUT1.H06 DELETED, DDNAME=SY IEF285I D839471.PSTARS3T.JOB04227.D0000102.? SYSOUT IGD106I SYS09240.T154213.RA000.PSTARS3T.OBJ.H06 PASSED, DDNAME=SY IEF285I D839471.PSTARS3T.JOB04227.D0000101.? SYSIN IEF373I STEP/C /START 2009240.1542 IEF374I STEP/C /STOP 2009240.1542 CPU 0MIN 00.01SEC SRB 0MIN IEF236I ALLOC. FOR PSTARS3T L STEP1 IGD103I SMS ALLOCATED TO DDNAME SYSLIN IEF237I DMY ALLOCATED TO IGD101I SMS ALLOCATED TO DDNAME (SYSLMOD ) DSN (SYS09240.T154213.RA000.PSTARS3T.GOSET.H06 ) STORCLAS (SCVIO) MGMTCLAS ( ) DATACLAS ( ) VOL SER NOS= VIO Sumário Pag.Ant. Continua na próxima página Alberto Romano Schiesari – www.profars.com 93 Saída de resultados (relatórios) Exemplo (truncadas à direita) de JES2.JESYSMSG = mensagens do initiator e do terminator Continuação IGD101I SMS ALLOCATED TO DDNAME (SYSUT1 ) DSN (SYS09240.T154213.RA000.PSTARS3T.SYSUT1.H06 ) STORCLAS (SCVIO) MGMTCLAS ( ) DATACLAS ( ) VOL SER NOS= VIO IEF237I JES2 ALLOCATED TO SYSPRINT IEF142I PSTARS3T L STEP1 - STEP WAS EXECUTED - COND CODE 0000 IGD105I SYS09240.T154213.RA000.PSTARS3T.OBJ.H06 DELETED, DDNAME=SY IGD106I SYS09240.T154213.RA000.PSTARS3T.GOSET.H06 PASSED, DDNAME=SY IGD105I SYS09240.T154213.RA000.PSTARS3T.SYSUT1.H06 DELETED, DDNAME=SY IEF285I D839471.PSTARS3T.JOB04227.D0000103.? SYSOUT IEF373I STEP/L /START 2009240.1542 IEF374I STEP/L /STOP 2009240.1542 CPU 0MIN 00.00SEC SRB 0MIN IEF236I ALLOC. FOR PSTARS3T G STEP1 IEF237I VIO ALLOCATED TO PGM=*.DD IEF237I JES2 ALLOCATED TO SYSPRINT IEF142I PSTARS3T G STEP1 - STEP WAS EXECUTED - COND CODE 0000 IEF285I SYS09240.T154213.RA000.PSTARS3T.GOSET.H06 KEPT IEF285I D839471.PSTARS3T.JOB04227.D0000104.? SYSOUT IEF373I STEP/G /START 2009240.1542 IEF374I STEP/G /STOP 2009240.1542 CPU 0MIN 00.00SEC SRB 0MIN IGD105I SYS09240.T154213.RA000.PSTARS3T.GOSET.H06 DELETED, DDNAME=SY IEF375I JOB/PSTARS3T/START 2009240.1542 IEF376I JOB/PSTARS3T/STOP 2009240.1542 CPU 0MIN 00.01SEC SRB 0MIN Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 94 Saída de resultados (relatórios) Vejamos o exemplo de um aplicativo que “imprime” 2 relatórios: //RELAT1 DD SYSOUT=* , //RELAT2 DD SYSOUT=B e tem no JOB o parâmetro MSGCLASS=R JOB1234, JES2.JESMSGLG, classe R JOB1234, JES2.JESJCL, classe R Sistema Operacional JOB1234, JES2.JESMSGLG, classe R JOB1234 , STEP 1, DD RELAT1, classe R Linha 1 Relat1 Linha 2 relat1 ... Etc... Aplicativo (MEU programa) JOB1234 , STEP1, DD RELAT2, classe B Linha 1 Relat2 Linha 2 relat2 ... Etc... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 95 Saída de resultados (relatórios) De forma semelhante à entrada, há componentes do sistema que atendem à demanda de impressão (real) dos arquivos enfileirados no spool de saída. São as WRITERS, que atendem baseadas na classe da SYSOUT. Elas são programas que lêem arquivos do spool de saída e os “imprimem” em algum dispositivo. JOB1234, JES2.JESMSGLG, classe R JOB1234, JES2.JESJCL, classe R JOB1234, JES2.JESMSGLG, classe R JOB1234 , DD RELAT1, classe R Linha 1 Relat1 Linha 2 relat1 ... Etc... JOB1234 , DD RELAT2, classe B Linha 1 Relat2 Linha 2 relat2 ... Etc... Sumário Pag.Ant. Writer que atende classe R Writer que atende classe B Alberto Romano Schiesari – www.profars.com 96 Saída de resultados (relatórios) Muitas vezes a saída NÃO É uma impressora. O usuário quer ver o relatório num terminal. É o caso de SYSOUTs que acessamos via Roscoe, TSO ou CONTROL-V. JOB1234, JES2.JESMSGLG, classe R JOB1234, JES2.JESJCL, classe R JOB1234, JES2.JESMSGLG, classe R JOB1234 , DD RELAT1, classe R Linha 1 Relat1 Linha 2 relat1 ... Etc... JOB1234 , DD RELAT2, classe B Linha 1 Relat2 Linha 2 relat2 ... Etc... Sumário Pag.Ant. Writer que atende classe R Writer que atende classe B Alberto Romano Schiesari – www.profars.com 97 JCL Hora de ver de fato o JCL Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 98 JCL JCL = Job Control Language = Linguagem de controle de serviços = linguagem para pedir ao sistema operacional a execução de serviços Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 99 JCL Como toda linguagem decente, o JCL tem comandos. Há 3 principais: JOB, EXEC e DD Antes de ve-los, vamos ver algumas coisas básicas Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 100 JCL – Sintaxe básica Sintaxe básica Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 101 JCL – Sintaxe básica // nas posições 1 e 2 Comentários: //* nas posições 1 a 3 Sempre: Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 102 JCL – Sintaxe básica Continuação de statements · statement a ser continuado : deve terminar com uma vírgula (para indicar que vai haver mais parâmetros) · no statement seguinte (onde é feita a continuação) o início da continuação pode ser feito em qualquer posição desde a 4 até a 16 (não pode continuar desde a 3 nem depois da 16) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 103 JCL – Sintaxe básica Continuação de statements Exemplo (as duas primeiras linhas são réguas para referência da posição dos caracteres nos statements) : . 1 2 3 4 5 6 7.. 123456789012345678901234567890123456789012345678901234567890123456789012 //ENTRADA DD DSN=SYS5.LINKLIB, // DISP=SHR BIBLIOTECA DE UTILITARIOS HOME MADE //ENTRADA DD DSN=SYS5.LINKLIB, // DISP=SHR COMENTARIO //ENTRADA DD DSN=SYS5.LINKLIB, // DISP=SHR COMENTARIO //ENTRADA DD DSN=SYS5.LINKLIB, // DISP=SHR Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 104 JCL – Sintaxe básica Continuação de statements Problemas mais comuns . 1 2 3 4 5 6 7.. 123456789012345678901234567890123456789012345678901234567890123456789012 //ENTRADA DD // DISP=SHR DSN=SYS5.LINKLIB BIBLIOTECA DE UTILITARIOS HOME MADE Neste caso faltou a virgula após o DSN; portanto o DISP=SHR não foi considerado como fazendo parte do statement DD e sim um statement separado ; observar que apesar de não acusar erro de jcl no DD ENTRADA, o sistema vai entender que o arquivo SYS5.LINKLIB deve ser criado, pois faltou o DISP para ele; vai entender também que o statement seguinte está errado pois a operação é inválida (DISP=SHR). Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 105 JCL – Sintaxe básica Continuação de statements Problemas mais comuns . 1 2 3 4 5 6 7.. 123456789012345678901234567890123456789012345678901234567890123456789012 //ENTRADA // DD DISP=SHR DSN=SYS5.LINKLIB, COMENTARIO Neste caso a continuação está na col 17 (depois da 16) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 106 JCL – Sintaxe básica Continuação de statements Problemas mais comuns . 1 2 3 4 5 6 7.. 123456789012345678901234567890123456789012345678901234567890123456789012 //ENTRADA DD //DISP=SHR COMENTARIO DSN=SYS5.LINKLIB, Neste caso a continuação está na col 3 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 107 JCL – Sintaxe básica Continuação de statements Problemas mais comuns . 1 2 3 4 5 6 7.. 123456789012345678901234567890123456789012345678901234567890123456789012 //ENTRADA DD DISP=SHR DSN=SYS5.LINKLIB, Neste caso, o statement de continuação não tem o // nas colunas 1 e 2 : o sistema entende que o statement DD de nome ENTRADA irá continuar na linha seguinte (pois termina com um parâmetro seguido de vírgula) , mas a linha seguinte nem é de jcl (é considerada uma linha de dados de um arquivo de ddname SYSIN) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 108 JCL – Sintaxe básica Conteúdo dos statements q q Identificação = // nas colunas 1 e 2 Nome = mínimo 1 e máximo 8 posições; início na posição 3; precisa ter pelo menos um espaço em branco depois q Operação = JOB ou EXEC ou DD (ou PROC ou PEND ou IF ou END-IF); precisa ter pelo menos um espaço em branco depois q Parâmetros; podem ser: posicionais : dependem da posição ou keyword : palavra chave seguida do sinal de = v Se tiver só posicionais, colocá-los na ordem (posição) adequada v Se tiver só keyword, colocar em qualquer ordem v Se tiver ambos, colocar primeiro os posicionais (na ordem adequada) e depois os keyword (em qualquer ordem) q Comentários; precisa ter pelo menos um espaço em branco após os operandos, antes dos comentários Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 109 O JOB como um todo – visão geral O JOB como um todo – visão geral Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 110 JOB – Visão geral Visão geral Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 111 JOB – Visão geral Delimitador de início do JOB JOB EXEC do primeiro step DD 1 do primeiro step . Primeiro Step . DD n do primeiro step EXEC do segundo step JOB DD 1 do segundo step . Segundo Step . DD n do segundo step EXEC do terceiro step DD 1 do terceiro step . Terceiro Step . DD n do terceiro step O delimitador de fim do JOB é o início do outro JOB (antigamente precisava de um statement com // nas posições 1 e 2, seguido de brancos) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 112 JOB – Visão geral Para os steps: Lembrar que, em princípio, os DDs são opcionais (se o programa não usar arquivos ou se usar só arquivos alocados com alocação dinâmica) Mas o EXEC é obrigatório; é ele quem define o step. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 113 JOB – Visão geral Isso significa, por exemplo, que, se o EXEC do segundo step tiver algum erro e não for identificado como EXEC, os DD’s do segundo step vão ficar valendo para o primeiro step... //ABCARS01 JOB ... //STEP1 EXEC PGM=PGM01 //DDA1 DD ... //DDB1 DD ... //DDC1 DD ... //STEP2 ESEC PGM=PGM02 //DDA2 DD ... //DDB2 DD ... //DDC2 DD ... //STEP3 EXEC PGM=PGM03 //DDA3 DD ... //DDB3 DD ... //DDC3 DD ... Sumário Pag.Ant. Como o segundo EXEC está errado, ele não “marca” o início de um segundo step Alberto Romano Schiesari – www.profars.com 114 JOB – Visão geral Exemplo de JOB batch solicitando SELECT de uma base de dados e respectiva saída //ARSARS01 JOB (1234),’ALBERTO’,MSGCLASS=X,CLASS=R //STEP001 EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=6M //STEPLIB DD DSN=SYS1.DSNDB1D.SDSNLOAD,DISP=SHR // DD DSN=SYS1.DSNDB1D.RUNLIB.LOAD,DISP=SHR //DBRMLIB DD DSN=SYS1.DSNDB1D.DBRMLIB.DATA,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSTSIN DD * PAGE 1 DSN SYSTEM(DB1D) ***INPUT STATEMENT: RUN PROGRAM(DSNTEP2) PLAN(DSNTEP2) SELECT CD_AGE, NM_AGE LIB('SYS1.DSNDB1D.RUNLIB.LOAD') – FROM DB2T.ZZZ100_CADAGE PARMS('/ALIGN(MID)') WHERE CD_AGE > 20 AND CD_AGE < 100; END //SYSIN DD * +----------------------------------+ SELECT CD_AGE, NM_AGE | CD_AGE | NM_AGE | FROM DB2T.ZZZ100_CADAGE +----------------------------------+ WHERE CD_AGE > 20 AND CD_AGE < 100; 1_| 30 | BARUERI | 2_| 40 | S.JOSE R.PRETO | 3_| 50 | SAO CARLOS | 4_| 60 | PINHEIROS | 5_| 70 | PERDIZES | 6_| 80 | MARAMBAIA | 7_| 90 | JAGUARETE | +----------------------------------+ Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 115 JCL - Comandos Comandos Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 116 JCL - Comandos Como toda linguagem decente, o JCL tem comandos. Há 3 principais: JOB, EXEC e DD Vejamos inicialmente esses 3 comandos Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 117 JOB JOB Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 118 JOB Sintaxe : //nomejob JOB parâmetros_posicionais,parâmetros_keyword Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 119 JOB Exemplo : //PDR001P2 JOB (B281),ALBERTO,MSGCLASS=X,CLASS=R 2 parâmetros posicionais Sumário Pag.Ant. 2 parâmetros keyword Alberto Romano Schiesari – www.profars.com 120 JOB Parâmetros posicionais Normalmente tem informações a respeito do responsável pelo job e para contabilização. Obrigatório a ordem exata de especificação. Consultar padrões da instalação. //PDR001P2 JOB (B281),ALBERTO,MSGCLASS=X,CLASS=R 2 parâmetros posicionais Sumário Pag.Ant. 2 parâmetros keyword Alberto Romano Schiesari – www.profars.com 121 JOB Parâmetros keyword Informações a respeito do job, fornecidas por meio de palavras-chave; isso permite que possam estar em qualquer ordem. //PDR001P2 JOB (B281),ALBERTO,MSGCLASS=X,CLASS=R 2 parâmetros posicionais Sumário Pag.Ant. 2 parâmetros keyword Alberto Romano Schiesari – www.profars.com 122 JOB Parâmetros keyword CLASS= Sumário indica a classe de execução do job; cada classe é atendida por 1 (ou mais) initiators; a quantidade de init’s, quais as classes que cada um atende, quais ficam “abertos” atendendo à demanda de jobs, é determinada pelo pessoal de suporte e de produção. Pag.Ant. Alberto Romano Schiesari – www.profars.com 123 JOB Parâmetros keyword TIME= Sumário indica o tempo máximo de CPU do JOB; 1440 = indica que não há tempo máximo Pag.Ant. Alberto Romano Schiesari – www.profars.com 124 JOB Parâmetros keyword MSGCLASS= Sumário indica a classe da sysout das mensagens exibidas (conforme solicitado pelo MSGLEVEL) Pag.Ant. Alberto Romano Schiesari – www.profars.com 125 JOB Parâmetros keyword MSGVEVEL= Sumário indica o que deve ser listado. Especifica-se MSGLEVEL=(a,b) sendo a : mensagens de JCL 0 = somente o statement JOB 1 = exibir tudo: statements JCL submetidos + statements JCL gerados pelo sistema 2 = exibir somente statements JCL submetidos b : mensagens de alocação 0 = não exibir 1 = exibir Pag.Ant. Alberto Romano Schiesari – www.profars.com 126 JOB Parâmetros keyword NOTIFY= indica o id do usuário de TSO que deve ser notificado quando o job terminar REGION= indica o tamanho da REGION que deve ser atribuida ao JOB RESTART= Indica o nome do step a partir do qual o JOB deve (re)iniciar TYPRUN= indica o tipo de submissão desejada : SCAN = valida se o JCL está OK mas não executa nenhum programa HOLD = deixa o job em espera até ser liberado para execução Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 127 EXEC EXEC Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 128 EXEC Sintaxe : //nomestep EXEC parâmetro_posicional,parâmetros_keyword Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 129 EXEC Exemplo : //VALIDAR EXEC P756,COND=EVEN,PARM.S1=‘T=YES’ 1 parâmetro posicional Sumário Pag.Ant. 2 parâmetros keyword Alberto Romano Schiesari – www.profars.com 130 EXEC Parâmetro posicional Só há 1; é opcional. É um nome, que indica o nome de PROC a executar. Se for usado, os parâmetros keywor PROC= e PGM= não podem ser usados. //STPR1 EXEC PD001 1 parâmetro posicional Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 131 EXEC Parâmetros keyword Informações a respeito do step, fornecidas por meio de palavras-chave; isso permite que possam estar em qualquer ordem. //ST01 EXEC PGM=LISTABND,COND=ONLY 2 parâmetros keyword Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 132 EXEC COND= indica a(s) condição(ões) de execução ou não do step COND=EVEN executa o step MESMO QUE algum anterior tenha cancelado COND=ONLY executa o step SOMENTE SE algum anterior tenha cancelado COND=(n,cond) NÃO EXECUTA o step se n satisfizer a condição especificada em qualquer step anterior COND=(n,cond,step) NÃO EXECUTA o step se n satisfizer a condição especificada no step cujo nome foi indicado Cond pode ser : LT ou GT ou EQ ou NE Exemplos.: COND=(4,LT) se 4 for menor que o return code de qualquer step anterior, NÃO EXECUTA ou seja : se algum step anterior emitiu return code maior que 4, NÃO EXECUTA COND=((4,LT,COMP),(4,LT,LKED)) (se 4 for menor que o return code do step COMP E se 4 for menor que o return code do step LKED) NÃO EXECUTA ou seja : (se o step COMP emitiu return code maior que 4 OU se o step LKED emitiu return code maior que 4) NÃO EXECUTA Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 133 EXEC PARM= Sumário indica os dados que devem ser passados como parâmetro(s) para o programa chamado para executar Ex.: PARM='NOSEQ,QUOTE,OFFSET,LIB' PARM='30/12/2003' Pag.Ant. Alberto Romano Schiesari – www.profars.com 134 EXEC PGM= indica o nome do programa a ser executado PROC= indica o nome da proc a ser executada. Se não especificado nem PGM= nem PROC= assume PROC= Exemplos : //STEP1 EXEC TST01 //STEP2 EXEC PROC=TST01 //STEP1 EXEC PGM=TST01 Sumário Pag.Ant. executa a PROC denominada TST01 executa a PROC denominada TST01 executa programa denominado TST01 Alberto Romano Schiesari – www.profars.com 135 DD DD (Data Definition) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 136 DD Sintaxe : //nomearq DD parâmetros_posicionais,parâmetros_keyword Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 137 DD Exemplo : //ENTRADA DD *,DCB=(LRECL=80) 1 parâmetro posicional Sumário Pag.Ant. 1 parâmetro keyword Alberto Romano Schiesari – www.profars.com 138 DD Parâmetros posicionais Há 3, e são exclusivos entre si. Ou seja, pode-se especificar apenas 1 parâmetro posicional) //ARQ1 //ARQ2 //ARQ3 DD DD DD * DATA DUMMY 1 parâmetro posicional Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 139 DD Parâmetros posicionais: DD * Indica que o(s) registro(s) a partir do proximo (seguinte) forma(m) um arquivo que está in-stream. O último registro do arquivo é o anterior àquele próximo que tenha // nas posições 1 e 2. //ARQ1 DD * REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 Arquivo in-stream com ddname ARQ1 REGISTRO DE DADOS 3 //ARQ2 DD Sumário DSN=ARQUIVO.TESTEX,DISP=SHR Pag.Ant. Alberto Romano Schiesari – www.profars.com 140 DD Parâmetros posicionais: DD * Mais exemplos: //ARQ1 DD * REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 Arquivo in-stream com ddname ARQ1 REGISTRO DE DADOS 3 //ARQ2 DD * REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 Arquivo in-stream com ddname ARQ2 REGISTRO DE DADOS 3 //ARQ2 DD * REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 Arquivo in-stream com ddname ARQ3 REGISTRO DE DADOS 3 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 141 DD Parâmetros posicionais: DD * Mais exemplos: //* ARQUIVO A SEGUIR = MOVIMENTO DO DIA //ARQ4 DD * REGISTRO DE DADOS 1 Arquivo in-stream com ddname ARQ4 REGISTRO DE DADOS 2 REGISTRO DE DADOS 3 //* ARQUIVO A SEGUIR = CONTROLE //ARQ5 DD * 22/07/2009 Sumário Pag.Ant. Arquivo in-stream com ddname ARQ5 Alberto Romano Schiesari – www.profars.com 142 DD Parâmetros posicionais: DD * Mais exemplos: //ARQ4 DD * //* ARQUIVO A SEGUIR = MOVIMENTO REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 REGISTRO DE DADOS 3 //ARQ5 DD * Não dá erro, mas é Erro!!! //* ARQUIVO A SEGUIR = CONTROLE 22/07/2009 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 143 DD Parâmetros posicionais: DD * Mais exemplos: //ARQ4 DD * //* ARQUIVO A SEGUIR = MOVIMENTO REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 REGISTRO DE DADOS 3 //ARQ5 DD * //* ARQUIVO A SEGUIR = CONTROLE 22/07/2009 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 144 DD Parâmetros posicionais: DD Mais exemplos: Vai começar um arquivo in-stream... //ARQ4 DD * Este (por ter //) é entendido pelo sistema como fim de dados do arquivo in-stream ARQ4 (o qual fica com zero registros); e é um statement “normal” de JCL Aqui o sistema encontra um registro que NÃO É JCL; ele assume que é o primeiro registro de um arquivo in-stream e assume que o DDNAME é SYSIN. * //* ARQUIVO A SEGUIR = MOVIMENTO REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 REGISTRO DE DADOS 3 //ARQ5 DD * Vai começar um arquivo in-stream... //* ARQUIVO A SEGUIR = CONTROLE 22/07/2009 Sumário Este (por ter //) é entendido pelo sistema como fim de dados do arquivo in-stream ARQ5 (o qual fica com zero registros); e é um statement “normal” de JCL Aqui o sistema encontra um registro que NÃO É JCL; ele assume que é o primeiro registro de um arquivo in-stream e assume que o DDNAME é SYSIN (e sobrepõe o anterior) . Pag.Ant. Alberto Romano Schiesari – www.profars.com 145 DD Parâmetros posicionais: DD * Ou seja: isto //ARQ4 DD * //* ARQUIVO A SEGUIR = MOVIMENTO REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 REGISTRO DE DADOS 3 //ARQ5 DD * //* ARQUIVO A SEGUIR = CONTROLE 22/07/2009 é entendido assim: ARQ4 = (arquivo com zero registros) ARQ5 = (arquivo com zero registros) SYSIN = arquivo com 1 registro ( 22/07/2009) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 146 DD Parâmetros posicionais: DD DATA Similar ao DD *. Indica que o(s) registro(s) a partir do proximo (seguinte) forma(m) um arquivo que está in-stream. O último registro do arquivo é aquele que contém o delimitador declarado no parâmetro keyword DLM. //ARQ1 DD DATA,DLM=‘EOF*’ REGISTRO DE DADOS 1 REGISTRO DE DADOS 2 REGISTRO DE DADOS 3 Registros do arquivo in-stream com ddname ARQ1 // ESTE NÃO EH JCL ! EOF* //ARQ2 DD Sumário DSN=ARQUIVO.TESTEX,DISP=SHR Pag.Ant. Alberto Romano Schiesari – www.profars.com 147 DD Parâmetros posicionais: DD DUMMY Só para arquivos de entrada; que vão ser lidos no programa. Indica que o arquivo não existe. O sistema “finge” para o método de acesso, quando for feita a abertura/leitura/fechamento do arquivo, que é um arquivo vazio (com zero registros). Ou seja: abre normalmente, na primeira leitura já é disparada a condição de EOF, fecha normalmente. Bom nos casos em que o programa exige o arquivo (abre, lê, fecha), mas na execução em específico não vai usar os dados. //ARQ1 DD DUMMY //ARQ2 DD DSN=ARQUIVO.TESTEX,DISP=SHR Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 148 DD Parâmetros keyword Informações a respeito do step, fornecidas por meio de palavras-chave; isso permite que possam estar em qualquer ordem. //ST01 EXEC PGM=LISTABND,COND=ONLY 2 parâmetros keyword Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 149 DD DSN Sumário Data Set Name = indica o nome externo (para o sistema operacional) do arquivo Ex.: //SYSIN DD DSN=DESENV.TST.ALBERTO,DISP=SHR Pag.Ant. Alberto Romano Schiesari – www.profars.com 150 DD DCB Sumário indica as características do arquivo Sub-parâmetros : DSORG= (Data Set ORGanization) indica a organização do arquivo. Principais opções : PO (Partitioned Organization = Particionado = PDS) PS (Physical Sequential = Sequencial) EXPDT= (EXPiration DaTe = data de expiração) = indica a data a partir da qual o arquivo pode ser deletado RETPD= (RETention PerioD = período de retenção ) indica o período de tempo durante o qual o arquivo não está expirado, não podendo ser deletado LRECL= (Logical RECord Length) indica o tamanho, em bytes, do registro lógico RECFM= (RECord ForMat) indica o formato dos registros do arquivo. Principais opções : FB = Fixed Blocked F = Fixed (Unblocked) FBA = Fixed Blocked Asa FA = Fixed (Unblocked) Asa V = Variable (Unblocked) VB = Variable blocked U = Undefined BLKSIZE= (BLocKSIZE) indica o tamanho, em bytes, do registro físico Ex.: //SYSIN DD DUMMY,DCB=(LRECL=80,RECFM=FB,BLKSIZE=800) Pag.Ant. Alberto Romano Schiesari – www.profars.com 151 DD LRECL Indica o tamanho do registro lógico RECFM Indica o formato dos registros : F, FB, V, VB BLKSIZE Indica o tamnaho dos blocos (registros físicos) DSORG Indica a organização do arquivo : PS, PO EXPDT Indica a data de expiração do arquivo RETPD Sumário Indica o período durante o qual o arquivo não está expirado Pag.Ant. Alberto Romano Schiesari – www.profars.com 152 DD DISP Sumário Disposition DISP=(a,b,c) indica a ação a ser tomada referente ao arquivo a = NEW (arquivo será criado) ou OLD (arquivo já existe e será manipulado com exclusividade) ou SHR (shared - arquivo já existe e será compartilhada) ou MOD (arquivo já existe e será estendido) b = CATLG (arquivo será catalogado ao final, se final normal) ou UNCATLG (arquivo será descatalogado ao final, se normal) ou DELETE (arquivo será deletado ao final, se normal) KEEP (arquivo será mantido ao final, se normal) PASS (arquivo temporário será passado para steps subsequentes) c = CATLG (arquivo será catalogado ao final, se final anormal) ou UNCATLG (arquivo será descatalogado ao final, se anormal) ou DELETE (arquivo será deletado ao final, se anormal) KEEP (arquivo será mantido ao final, se anormal) Pag.Ant. Alberto Romano Schiesari – www.profars.com 153 DD UNIT Indica onde o arquivo deve ser alocado. Em geral : SYSDA, 3390 SYSOUT SYSOUT=class SYSOUT=(class,,formsname) SYSOUT=(class,writername,formsname) SYSOUT=(class,writername) SYSOUT=(class,INTRDR) Ex.: //SYSOUT DD SYSOUT=* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 154 DD SPACE Sumário SPACE= (a,(b,c),RLSE) ou SPACE= (d,(b,c),RLSE) indica a quantidade de espaço em disco a ser alocada para o arquivo . a = TRK ou CYL ou ABSTR unidade de alocação : trilhas, cilindros, ou a = TRK ou CYL ou ABSTR ou rec_len unidade de alocação; trilhas, cilindros, ou tamanho do registro lógico b = quantidade da área primária c = quantidade da área secundária (opcional) d = tamanho do registro lógico RLSE = (ReLeaSE) (opcional) se sobrar espaço, liberar Pag.Ant. Alberto Romano Schiesari – www.profars.com 155 DD KEYOFF= KEY OFFset = indica o deslocamento do campo chave dentro do registro lógico para arquivos VSAM KSDS KEYLEN= KEY LENgth = indica o tamanho do campo chave no registro lógico para arquivos VSAM KSDS RECORG= RECord ORGanization = indica qual a organização do arquivo VSAM : KS (KSDS), ES (ESDS), RR (RRDS) ou LS (Linear Space) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 156 DD Exemplos : //SAIDA // // DD DSN=ATAAABPS.EPC.SE62, DISP=(NEW,CATLG,DELETE),SPACE=(TRK,(100,50)), UNIT=SYSDA,DCB=LRECL=83 //ENTRADA DD DSN=ATAAABPS.EPC.SLB005,DISP=SHR //EPCASLBS DD // // // // DSN=ATAAABPS.EPC.SE64(+1), DISP=(NEW,CATLG,DELETE), SPACE=(TRK,(100,50)), UNIT=SYSDA, DCB=LRECL=83 //EPCASLBS DD // // // // DSN=ATAAABPS.EPC.SE64(+1), DISP=(NEW,CATLG,DELETE), SPACE=(TRK,(100,50)), UNIT=SYSDA, DCB=(LRECL=83,BLKSIZE=830) //VKSDS1 DD DSN=DSVAABVS.LSG.A889.ALBERTO,DISP=(,CATLG,DELETE), // SPACE=(CYL,(10,10)),LRECL=100,KEYOFF=10, // KEYLEN=12,RECORG=KS Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 157 Busca em bibliotecas Busca em bibliotecas Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 158 Busca em bibliotecas Existem no sistema listas de bibliotecas (libraries) que devem ser pesquisadas quando algum membro precisa ser localizado. Basicamente essas listas são: Programas executáveis JCL Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 159 Busca de programas executáveis Busca de programas executáveis Bibliotecas do sistema operacional SYS1.LINKLIB etc Bibliotecas do usuário Ex.: SYS9.LINKLIB SYS9.EMPLK01 SYS8.USRRHLIB SYS7.EASYLIB etc Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 160 Busca de programas executáveis Busca de programas executáveis Normalmente, as bibliotecas do sistema operacional são buscadas automaticamente SYS1.LINKLIB etc As bibliotecas do usuário são buscadas se: - Estiverem na lista de busca automática (tempo de busca...) - Forem especificadas no JOBLIB ou STEPLIB Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 161 Busca de programas executáveis Busca de programas executáveis JOBLIB / STEPLIB São DD’s especiais que indicam que deve haver busca de executáveis nas bibliotecas neles indicadas. O JOBLIB deve ser especificado no início do JOB, e vale para todos os EXEC’s do JOB (a busca do executável nessa biblioteca deve ser feita apenas para esse step). O STEPLIB deve ser especificado logo após o EXEC de um programa, e vale para esse step (a busca do executável nessa biblioteca deve ser feita para esse step). Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 162 Busca de programas executáveis Busca de programas executáveis JOBLIB exemplo //JOBEXEMP JOB (1234),’ALBERTO’,CLASS=A //JOBLIB DD DSN=SYS9.MYLIB,DISP=SHR //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A //STEPX2 EXEC PGM=PGTST02 //DD1 DD DSN=ARQUIVOX,DISP=SHR //SYSOUT DD SYSOUT=A //STEPX3 EXEC PGM=PGTST03 //SYSIN DD DSN=ARQUIVOX,DISP=SHR //RELAT DD SYSOUT=A Sumário Pag.Ant. - Os programas PGTST01, PGTST02 e PGTST03 serão buscados em SYS9.MYLIB Alberto Romano Schiesari – www.profars.com 163 Busca de programas executáveis Busca de programas executáveis STEPLIB exemplo //JOBEXEMP JOB (1234),’ALBERTO’,CLASS=A //STEPX1 EXEC PGM=PGTST01 //STEPLIB DD DSN=SYS8.MYLIBX,DISP=SHR //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A //STEPX2 EXEC PGM=PGTST02 //STEPLIB DD DSN=SYS8.MYLIBY,DISP=SHR //DD1 DD DSN=ARQUIVOX,DISP=SHR //SYSOUT DD SYSOUT=A //STEPX3 EXEC PGM=PGTST03 //STEPLIB DD DSN=SYS8.MYLIBZ,DISP=SHR //SYSIN DD DSN=ARQUIVOX,DISP=SHR //RELAT DD SYSOUT=A Sumário Pag.Ant. - O programa PGTST01 será buscado em SYS8.MYLIBX - O programa PGTST02 será buscado em SYS8.MYLIBY - O programa PGTST03 será buscado em SYS8.MYLIBZ Alberto Romano Schiesari – www.profars.com 164 Busca de JCL Busca de JCL Bibliotecas do sistema operacional SYS1.PROCLIB etc Bibliotecas do usuário Ex.: SYS9.PROCLIB SYS9.EMPROC1 SYS8.USRPROCL SYS7.PRODPROC etc Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 165 Busca de JCL Busca de JCL Normalmente, as bibliotecas do sistema operacional são buscadas automaticamente SYS1.PROCLIB etc As bibliotecas do usuário são buscadas se: - Estiverem na lista de busca automática - Forem especificadas no JCLLIB Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 166 Busca de JCL Busca de JCL (procedures – PROCS) JCLLIB / INCLUDE É um DD especial que indica que deve haver busca de PROCs nas bibliotecas nele indicadas. O JCLLIB deve ser especificado no início do JOB. Para incluir no JCL os statements (de JCL) de um membro da biblioteca indicada no JCLLIB, usar o INCLUDE. Ver exemplo a seguir. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 167 Busca de JCL Busca de JCL (procedures) JCLLIB / INCLUDE: exemplo //LSG#@ARS JOB ('ALBERTO'),'ALBERTO',CLASS=1,MSGCLASS=X // JCLLIB ORDER=(JCL.SIST.SRC) // INCLUDE MEMBER=BIBPROD //*------------------------------------//STEP1 EXEC PGM=P001 //STEP2 EXEC PGM=P003 //STEP3 EXEC PGM=P004 Se o membro BIBPROD do arquivo JCL.SIST.SRC tiver o statement //STEPAUX JCL efetivamente submetido será: EXEC PGM=EXIBHORA o //LSG#@ARS JOB ('ALBERTO'),'ALBERTO',CLASS=1,MSGCLASS=X //* JCLLIB ORDER=(JCL.SIST.SRC) //STEPAUX EXEC PGM=EXIBHORA //*------------------------------------//STEP1 EXEC PGM=P001 //STEP2 EXEC PGM=P003 //STEP3 EXEC PGM=P004 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 168 Busca de JCL Busca de JCL (procedures) JCLLIB / INCLUDE: outro exemplo //LSG#@ARS JOB ('ALBERTO'),'ALBERTO',CLASS=1,MSGCLASS=X // JCLLIB ORDER=(JCL.SIST.SRC) // INCLUDE MEMBER=BIBDESEN //*------------------------------------//STEP1 EXEC PGM=P001 //STEP2 EXEC PGM=P003 //STEP3 EXEC PGM=P004 Se o membro BIBDESEN do arquivo JCL.SIST.SRC tiver o statement //STEPAUX JCL efetivamente submetido será: EXEC PGM=IEFBR14 o //LSG#@ARS JOB ('ALBERTO'),'ALBERTO',CLASS=1,MSGCLASS=X //* JCLLIB ORDER=(JCL.SIST.SRC) //STEPAUX EXEC PGM=IEFBR14 //*------------------------------------//STEP1 EXEC PGM=P001 //STEP2 EXEC PGM=P003 //STEP3 EXEC PGM=P004 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 169 PROCS PROCS Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 170 PROCS Procs = procedimentos = conjunto de statements não-JOB e não-dados. Podem ser: q CATALOGADAS q IN-STREAM Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 171 PROCS q Sumário Procs CATALOGADAS Pag.Ant. Alberto Romano Schiesari – www.profars.com 172 PROCS São aquelas que são - preparadas - catalogadas numa PROCLIB - chamadas para execução nos jobs - Não pode ter statement JOB - Precisa iniciar com PROC - Precisa terminar com PEND - Não pode ter dados in-stream Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 173 PROCS Procs catalogadas: são aquelas que são - preparadas - catalogadas numa PROCLIB - chamadas para execução nos jobs - Preparando: editar no Roscoe ou TSO e salvar. Ex. //PROCDEMO PROC //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A // PEND - É um JCL (quase) normal! - Não pode ter statement JOB - Precisa iniciar com PROC - Precisa terminar com PEND - Não pode ter dados in-stream Este tem 3 steps (STEPX1, STEPX2 e STEPX3) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 174 PROCS Procs catalogadas: são aquelas que são - preparadas - catalogadas numa PROCLIB - chamadas para execução nos jobs - Catalogando: copiar para uma proclib. Ex. //CATAL EXEC PGM=IEBCOPY //SAIDA DD DSN=SYS9.PROCLIB(PROCDEMO) //ENTRA DD DATA,DLM=‘FINAL’ //PROCDEMO PROC //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A // PEND FINAL Sumário Pag.Ant. - Cópia simples para um membro da proclib desejada Alberto Romano Schiesari – www.profars.com 175 PROCS Procs catalogadas: são aquelas que são - preparadas - catalogadas numa PROCLIB - chamadas para execução nos jobs - Chamando para execução. Ex. //ARSARS01 JOB (1234),’ALBERTO’,CLASS=T,MSGCLASS=R //S1 EXEC PROC=PROCDEMO PRIMEIRA CHAMADA //S2 EXEC PROCDEMO SEGUNDA CHAMADA //STEPX1.ENTRADA DD * dados in-stream para o arquivo ENTRADA do step STEPX1 da proc PROCDEMO //S3 EXEC PROCDEMO TERCEIRA CHAMADA - A reader / interpreter vai até a PROCLIB para saber como EXPANDIR a PROC Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 176 PROCS q Sumário Procs IN-STREAM Pag.Ant. Alberto Romano Schiesari – www.profars.com 177 PROCS São aquelas que são - declaradas no início de um JOB - chamadas para execução nesse mesmo JOB - Não pode ter statement JOB - Precisa iniciar com PROC - Precisa terminar com PEND - Não pode ter dados in-stream Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 178 PROCS Procs catalogadas: são aquelas que são - declaradas no início de um JOB - chamadas para execução nesse mesmo JOB - Declaradas no início de um JOB. Ex. //ARSARS01 JOB (1234),’ALBERTO’,CLASS=T,MSGCLASS=R //PROCDEMO PROC //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A - PROC declarada //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR do JOB //SAIDA DD SYSOUT=A //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A // PEND //S1 EXEC PROC=PROCDEMO //* PRIMEIRA CHAMADA //S2 EXEC PROCDEMO //* SEGUNDA CHAMADA //STEPX1.ENTRADA DD * dados in-stream para o arquivo ENTRADA do step STEPX1 da proc PROCDEMO //S3 EXEC PROCDEMO //* TERCEIRA CHAMADA Sumário Pag.Ant. logo no início Alberto Romano Schiesari – www.profars.com 179 PROCS Procs catalogadas: são aquelas que são - declaradas no início de um JOB - chamadas para execução nesse mesmo JOB - Chamadas para execução nesse mesmo JOB. Ex. //ARSARS01 JOB (1234),’ALBERTO’,CLASS=T,MSGCLASS=R //PROCDEMO PROC //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR - A reader / interpreter NÃO //SAIDA DD SYSOUT=A VAI até a PROCLIB para saber //STEPX1 EXEC PGM=PGTST01 como EXPANDIR a PROC; //ENTRADA DD DSN=ARQUIVOX,DISP=SHR //SAIDA DD SYSOUT=A - A expansão é feita //STEPX1 EXEC PGM=PGTST01 //ENTRADA DD DSN=ARQUIVOX,DISP=SHR “consultando” a PROC-PEND //SAIDA DD SYSOUT=A no mesmo JOB // PEND //S1 EXEC PROC=PROCDEMO //* PRIMEIRA CHAMADA //S2 EXEC PROCDEMO //* SEGUNDA CHAMADA - PROC chamada para execução //STEPX1.ENTRADA DD * dados in-stream para o arquivo ENTRADA do nesse mesmo JOB step STEPX1 da proc PROCDEMO //S3 EXEC PROCDEMO //* TERCEIRA CHAMADA Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 180 PROCS – parâmetros simbólicos Procs – parâmetros simbólicos Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 181 PROCS – parâmetros simbólicos Na PROC a seguir : //SSSPRO1 //STEPA //DD1 //RELAT1 //STEPB //RELAT2 //STEPC //RELAT3 // PROC EXEC DD DD EXEC DD EXEC DD PEND PGM=PPPX1 DSN=ARQALB.DATA.DISP=SHR SYSOUT=A PGM=PPPX2 SYSOUT=A PGM=PPPX3 SYSOUT=A Toda vez que ela for chamada, os relatórios de ddname RELAT1, RELAT2 e RELAT3 terão saída em classe A. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 182 PROCS – parâmetros simbólicos Para haver flexibilidade quanto a isso, pode-se deixar a classe passível de ser modificada quando a PROC for chamada. Para isso, usa-se os parâmetros simbólicos: //SSSPRO1 //STEPA //DD1 //RELAT1 //STEPB //RELAT2 //STEPC //RELAT3 // PROC EXEC DD DD EXEC DD EXEC DD PEND PGM=PPPX1 DSN=ARQALB.DATA.DISP=SHR SYSOUT=&RELCLA PGM=PPPX2 SYSOUT=&RELCLA PGM=PPPX3 SYSOUT=&RELCLA Isso significa que a classe não está indicada. - Ela deve ter um valor default ou - Ela deve ser especificada na chamada da proc (se não, o valor default será assumido) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 183 PROCS – parâmetros simbólicos Se não houver valor default: erro de JCL. Supor essa proc in-stream: //JOBEXEMP JOB (1234),’ALBERTO’,CLASS=B //SSSPRO1 PROC //STEPA EXEC PGM=PPPX1 //DD1 DD DSN=ARQALB.DATA.DISP=SHR //RELAT1 DD SYSOUT=&RELCLA //STEPB EXEC PGM=PPPX2 //RELAT2 DD SYSOUT=&RELCLA //STEPC EXEC PGM=PPPX3 //RELAT3 DD SYSOUT=&RELCLA // PEND //* //S1 EXEC SSSPR01 Na expansão da PROC, na sua chamada para o STEP S1, vai dar erro pois na expansão da PROC, o sistema não irá saber qual classe deve atribuir ao arquivo dos DD’s RELAT1, RELAT2 e RELAT3 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 184 PROCS – parâmetros simbólicos Uma forma de estabelecer o valor default é indicá-lo na declaração da PROC, no statement PROC //JOBEXEMP JOB (1234),’ALBERTO’,CLASS=B //SSSPRO1 PROC RELCLA=* //STEPA EXEC PGM=PPPX1 //DD1 DD DSN=ARQALB.DATA.DISP=SHR //RELAT1 DD SYSOUT=&RELCLA //STEPB EXEC PGM=PPPX2 //RELAT2 DD SYSOUT=&RELCLA //STEPC EXEC PGM=PPPX3 //RELAT3 DD SYSOUT=&RELCLA // PEND //* //S1 EXEC SSSPR01 O sistema entende que os 3 DD’s serão de SYSOUT=* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 185 PROCS – parâmetros simbólicos Para alterar o valor default (override): deve-se indicar o valor desejado na chamada da PROC. //JOBEXEMP JOB (1234),’ALBERTO’,CLASS=B //SSSPRO1 PROC RELCLA=* //STEPA EXEC PGM=PPPX1 //DD1 DD DSN=ARQALB.DATA.DISP=SHR //RELAT1 DD SYSOUT=&RELCLA //STEPB EXEC PGM=PPPX2 //RELAT2 DD SYSOUT=&RELCLA //STEPC EXEC PGM=PPPX3 //RELAT3 DD SYSOUT=&RELCLA // PEND //* //S1 EXEC SSSPR01,RELCLA=A O sistema entende que os 3 DD’s serão de SYSOUT=A Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 186 PROCS – parâmetros simbólicos Para alterar o valor default (override) deve-se indicar o valor desejado na chamada da PROC. //JOBEXEMP JOB (1234),’ALBERTO’,CLASS=B //SSSPRO1 PROC RELCLA=* //STEPA EXEC PGM=PPPX1 //DD1 DD DSN=ARQALB.DATA.DISP=SHR //RELAT1 DD SYSOUT=&RELCLA //STEPB EXEC PGM=PPPX2 //RELAT2 DD SYSOUT=&RELCLA //STEPC EXEC PGM=PPPX3 //RELAT3 DD SYSOUT=&RELCLA // PEND //* //S1 EXEC SSSPR01,RELCLA=A //S2 EXEC SSSPR01 O sistema entende que os 3 DD’s do step S1 serão de SYSOUT=A e que os 3 DD’s do step S2 serão de SYSOUT=* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 187 PROCS – parâmetros simbólicos Para alterar o valor default (override) A indicação do valor desejado pode ser aplicada somente ao(s) DD(s) desejado(s): //JOBEXEMP JOB (1234),’ALBERTO’,CLASS=B //SSSPRO1 PROC RELCLA=* O sistema entende que: //STEPA EXEC PGM=PPPX1 RELAT1 do STEPA de S1 //DD1 DD DSN=ARQALB.DATA.DISP=SHR RELAT1 do STEPB de S1 //RELAT1 DD SYSOUT=&RELCLA RELAT1 do STEPC de S1 //STEPB EXEC PGM=PPPX2 RELAT1 do STEPA de S2 //RELAT2 DD SYSOUT=&RELCLA RELAT1 do STEPB de S2 //STEPC EXEC PGM=PPPX3 RELAT1 do STEPC de S2 //RELAT3 DD SYSOUT=&RELCLA // PEND //* //S1 EXEC SSSPR01,RELCLA.STEPA=A,RELCLA.STEPC=R //S2 EXEC SSSPR01,RELCLA.STEPB=X Sumário Pag.Ant. : : : : : : SYSOUT=A SYSOUT=* SYSOUT=R SYSOUT=* SYSOUT=X SYSOUT=* Alberto Romano Schiesari – www.profars.com 188 PROCS – parâmetros simbólicos Portanto: para efetuar override de valores default de parâmetros simbólicos, deve-se especificar na chamada da PROC: . ddname stepname=xxx Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 189 PROCS – parâmetros simbólicos Outra forma de alterar o default, válida num trecho do (ou em todo) JOB, é via comando SET: Sintaxe : //[nome] SET variavel_simbolica=[valor] //SSSPRO1 PROC //STEPA EXEC PGM=PPPX1 //DD1 DD DSN=... //SYSPRINT DD SYSOUT=&RELCLA //STEPB EXEC PGM=PPPX2 //SYSPRINT DD SYSOUT=&RELCLA //STEPC EXEC PGM=PPPX3 //SYSPRINT DD SYSOUT=&RELCLA // PEND // SET RELCLA=A //STEP1 EXEC SSSPR01 //STEP2 EXEC SSSPR01 //STEP3 EXEC SSSPR01 //STEP4 EXEC SSSPR01 //STEP5 EXEC SSSPR01 // SET RELCLA=B //STEP6 EXEC SSSPR01 //STEP7 EXEC SSSPR01 //STEP8 EXEC SSSPR01 //STEP9 EXEC SSSPR01 //STEP10 EXEC SSSPR01 Os steps 01, 02, 03, 04 e 05 terão RELCLA valendo A Os steps 06, 07, 08, 09 e 10 terão RELCLA valendo B Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 190 PROCS – inclusão DD na PROC Inclusão de DD numa PROC Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 191 PROCS – inclusão DD na PROC Se for para incluir um DD (na proc não existe um DD, e ele precisa ser adicionado ao step): . //nome_step ddname DD parâmetros Ex.: //S2 EXEC SSSPR01,RELCLA.STEPB=X //STEPB.RELOUTRO DD SYSOUT=* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 192 PROCS – inclusão de arquivos Inclusão de arquivos Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 193 PROCS – inclusão de arquivos Arquivo adicional: Se for para incluir um arquivo adicional (na proc não existe um DD, e ele precisa ser adicionado ao step): . //nome_step ddname DD parâmetros Ex.: //S2 EXEC SSSPR01,RELCLA.STEPB=X //STEPB.RELOUTRO DD SYSOUT=* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 194 PROCS – inclusão de arquivos Mais um arquivo numa sequência de concatenação: Se for para incluir um arquivo adicional (concatenar) num DD que já exista: especificar um DD para cada DD existente, sem parâmetros, e acrescentar o DD desejado . //nome_stepddname DD // DD // DD nova_concatenacao_desejada Exemplo : //STEP1 EXEC PROCX1 //STEPA.DD2 DD // DD // DD DSN=TST.ARQUIVOX... Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 195 PROCS – alteração parâmetros EXEC Alteração parâmetros EXEC Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 196 PROCS – alteração parâmetros EXEC Na chamada da PROC, indicar o parâmetro e o nome do step desejados: //stepname EXEC PROC=xxx,parâmetro.nome_step=valor Ex.: //S2 EXEC SSSPR01,RELCLA.STEPB=X,PARM.STEPB=‘YES’ //STEPB.RELOUTRO DD SYSOUT=* Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 197 JCL – IF / THEN / ELSE / ENDIF Comandos IF / THEN / ELSE / ENDIF Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 198 JCL – IF / THEN / ELSE / ENDIF Podem ser usados em substituição ao COND (com a vantagem de ser mais fácil de entender...). Sintaxe : // IF (condicao) THEN statements a executar se a condição for satisfeita // ENDIF ou // IF (condicao) THEN statements a executar se a condição for satisfeita // ELSE statements a executar se a condição não for satisfeita // ENDIF Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 199 JCL – IF / THEN / ELSE / ENDIF Condição = especificação da condição que, se satisfeita, indica que o conjunto de statements que seguem o THEN deve ser executado. As condições que podem ser testadas são as que seguem: Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 200 JCL – IF / THEN / ELSE / ENDIF Testando o return code de um step anterior [stepname.]RC [stepname.]RC [stepname.]RC [stepname.]RC [stepname.]RC [stepname.]RC [stepname.]RC [stepname.]RC Sumário Pag.Ant. EQ GT LT NE NL NG GE LE return_code return_code return_code return_code return_code return_code return_code return_code ou ou ou ou ou ou ou Alberto Romano Schiesari – www.profars.com 201 JCL – IF / THEN / ELSE / ENDIF Testando se um (programa de um) step anterior iniciou a execução ou não (flushed) : [stepname.]RUN EQ TRUE ou [stepname.]RUN EQ FALSE [stepname.]RUN EQ TRUE ou [stepname.]RUN EQ FALSE Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 202 JCL – IF / THEN / ELSE / ENDIF Testando se um (programa de um) step anterior abendou ou não : [stepname.]ABEND EQ TRUE [stepname.]ABEND EQ FALSE ou [stepname.]ABEND EQ TRUE ou [stepname.]ABEND EQ FALSE Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 203 JCL – IF / THEN / ELSE / ENDIF Testando o Completion Code (sistema ou user) de um (programa de um) step anterior : [stepname.]ABENDCC EQ Snnn ou [stepname.]ABENDCC EQ Unnnn [stepname.]ABENDCC EQ Snnn [stepname.]ABENDCC EQ Unnnn Sumário Pag.Ant. ou Alberto Romano Schiesari – www.profars.com 204 JCL – IF / THEN / ELSE / ENDIF Condições múltiplas = Utilizar parênteses para indicar a prioridade e sequência de análise Utilizar & para E (and) e | para OU (or) Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 205 JCL – IF / THEN / ELSE / ENDIF ENDIF é obrigatório para indicar o fim da abrangência do que deve ser executado se a condição for satisfeita. ELSE é opcional. IMPORTANTE : Usar COND e IF / THEN / ELSE / ENDIF juntos pode ser extremamente confuso. NÃO FAÇA ISSO. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 206 JCL – IF / THEN / ELSE / ENDIF Exemplo : //ARSARS01 JOB (1234),'ROMANO',CLASS=1,MSGCLASS=X //*-----------------------------------------------------------//STEP01 EXEC PGM=IEFBR14 //STEP02 EXEC PGM=IEFBR14 // IF (STEP01.RC NG 0) THEN //STEP03 EXEC PGM=IEFBR14 // ENDIF //*-----------------------------------------------------------//STEP04 EXEC PGM=IEFBR14 // IF ((STEP01.RC EQ 0)) THEN //STEP05 EXEC PGM=IEFBR14 // ELSE //STEP06 EXEC PGM=IEFBR14 // ENDIF //*-----------------------------------------------------------//STEP07 EXEC PGM=IEFBR14 // IF ((STEP01.RUN EQ TRUE)) THEN //STEP08 EXEC PGM=IEFBR14 // ENDIF // IF ((STEP01.RUN EQ FALSE)) THEN //STEP09 EXEC PGM=IEFBR14 // ENDIF Esse JCL, ao ser executado, gerará : Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 207 JCL – IF / THEN / ELSE / ENDIF Exemplo : $HASP373 LSG#@ARS STARTED - INIT 2 IEF403I LSG#@ARS - STARTED - TIME=14.52.18 # # JOBNAME STEPNAME PROCSTEP PROGRAM RC # LSG#@ARS STEP01 IEFBR14 00 # LSG#@ARS STEP02 IEFBR14 00 # LSG#@ARS STEP03 IEFBR14 00 # LSG#@ARS STEP04 IEFBR14 00 # LSG#@ARS STEP05 IEFBR14 00 # LSG#@ARS STEP06 IEFBR14 FLUSH # LSG#@ARS STEP07 IEFBR14 00 # LSG#@ARS STEP08 IEFBR14 00 # LSG#@ARS STEP09 IEFBR14 FLUSH IEF404I LSG#@ARS - ENDED - TIME=14.52.19 Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 208 CONTROL’s – BMC Software Produto Função Control-M Automated Production Control and Scheduling System Manages and automates the setup, scheduling and execution of jobs in the data center. Control-M / Restart Restart Management System Automates the activities that must be performed when restarting failed jobs, including the scratching and uncataloging of datasets created by failed jobs. Control-M / Tape Removable Media Management System Increases utilization of removable media and controls retention periods. Prevents misuse of media, and provides tape library and vault control. Control-M / Analyser Automated Information Integrity System Performs in-stream validation, accuracy, and reasonability checks on information used by data center production tasks (for example, reports, databases). Control-D Output Management System Automatically schedules and controls every aspect of report processing and distribution, including report decollating, bundling, printing, online viewing, and archiving. Control-V Quick Access Archive Viewing System Provides online access to archived reports and documents by indexed data retrieval Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 209 CONTROL’s – BMC Software Produto Função Control-D / Page on demand Report Retrieval and Display System Enables end users to retrieve and view pages of reports that reside on mainframe storage in real time. Indexed reports can be retrieved by index name and value. AFP and XEROX reports can also be retrieved and displayed using CONTROL-D/Web Access Server or CONTROL-D/Page On Demand API. Control-D / Image Image Output Management System Enables output from commercial imaging equipment to be imported into either CONTROL-D or CONTROL-V for decollation, distribution and viewing, and into CONTROL-V for archiving and indexed retrieval. Control-O Console Automation System and Desired State Monitoring System Monitors and automatically responds to messages, commands, and dataset events, as well as various other system events. The CONTROL-O/COSMOS feature allows for status monitoring while maintaining all critical system objects in a desired and ideal status. Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 210 THE END Sumário Pag.Ant. Alberto Romano Schiesari – www.profars.com 211