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_stepddname 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
Download

Conceitos JCL MVS