Você está na página 1de 20

Introduo ao JCL

DEFINIO DE UM JOB Um job (servio) composto por um ou mais programas que sero processados dentro de uma seqncia. Se esta seqncia for quebrada por alguma anormalidade, interrompe-se o fluxo, repara-se o erro e faz a retomada. Uma interrupo causada pelo programa chamamos de ABEND. Esta retomada (ou restart) poder ser feita desde o incio, a partir do ponto que houve a ocorrncia, em algum ponto anterior do Job, ou at mesmo de algum job anterior. Pode tambm ser necessrio a recuperao de algum arquivo que tenha sido o causador do trmino anormal. Um seqncia de jobs em cadeia chamamos de rotina. Observaes muito importantes sobre um JOB: Um job composto de pelo menos um programa. Este programa poder ser um desenvolvido na empresa ou at mesmo um utilitrio. Um job SEMPRE (obrigatoriamente) comea com um carto JOB, que ir se apresentar para o sistema operacional e disponibilizar as filas e prioridades dentro do sistema A cada programa ou utilitrio denominamos STEP. Cada step representado por um carto chamado EXEC. O carto EXEC responsvel por chamar o programa compilado e linkeditado. (Podendo ser tambm um utilitrio) Dentro de cada carto EXEC teremos cartes DD que iro disponibilizar os dispositivos necessrios para o funcionamento do programa. DESENHO BSICO DE UM JOB //XXXXXXX JOB XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX EXEC XXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX.....EXEC XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX.....DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX.....EXEC XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX //XXXXXXX.....DD XXXXXXXXXXXXXXXXXXXXXXX

Pg: 2

//XXXXXXX.....EXEC //XXXXXXX DD //XXXXXXX DD //XXXXXXX DD //XXXXXXX.....DD // Fig. 02

XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX

Repare: temos neste exemplo um Job composto de 4 steps. Estes steps podem ser programas caseiros e/ou utilitrios (como o SORT e o IDCAMS) que sero visto adiante. Voltando a fig.01 poder muito bem ser a seqncia 01 tendo um SORT entre os programas PROG003 e PROG009. Neste caso o PROG003 gerou um arquivo a ser lido pelo PROG009. Mas antes de utilizar, o PROG009 precisa reclassificar o arquivo para atender sua regra de negcio. A FUNO DO J.C.L. Quando mencionamos as palavras JOB, EXEC e DD, estamos falando de uma linguagem: JCL (Job control language ou linguagem de programao de servios). A funo do JCL solicitar e informar recursos e dispositivos ao sistema operacional. Os cartes JOB, EXEC e DD obrigatoriamente devero ter um NOME. Este nome ser conhecido como JOBNAME, STEPNAME e DDNAME. So inserido logo aps o // e antes do carto comando. EXEMPLO DE J.C.L. Um exemplo tpico de um JOB com um step apenas para ilustrao. //GPAE99PG JOB (9983,98,978,09),ANTONIO,CLASS=6,MSGCLASS=U //STEP0101 EXEC PGM=MYPROGSS //ENTR01 DD DSN=GP.GPALU99.CADCLI,DISP=SHR //SAIDA02 DD DSN=GP.GPALU99.CADENT,DISP=(NEW,CATLG,DELETE), // UNIT=SYSALLDA,SPACE=(TRK,(5,1),RLSE), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0) //SYSOUT DD SYSOUT=* //PARM01 DD * PRINTALL //* //STEP0102 EXEC PGM=MYPROGXX,COND=(0,NE) //ENTR03 DD DSN=GP.GPALU99.CADENT,DISP=SHR //ENTR04 DD DSN=GP.GPALU99.CADRET,DISP=SHR //SAIDA03 DD DSN=GP.GPALU99.CADSAI(+1),DISP=(NEW,CATLG,DELETE),

Pg: 3

// UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0) //RELATO DD SYSOUT=(R,,XPTO) //

Fig.03 Neste exemplo temos um job com 2 steps apenas que ir executar um programa chamado MYPROGRSS , e ter 2 arquivos de entrada sendo o primeiro em disco chamado pelo DDNAME ENTR01 e um parmetro chamado PARM01 E uma sada chamado pelo DDNAME SAIDA02. Um outro step ir executar o programa MYPROGXX, que ir ler 2 arquivos e gerar um terceiro arquivo em GDG. POSICIONAMENTO DOS CARTES DE JCL ------------------------------------------------------------------------------------------------------123456789012345678901234567890123456789012345678901234567890123456 7890123---------------------------------------------------------------------------------------------------------------------------//UP0014KR JOB (9983,98,978,09),ANTONIO,CLASS=6,MSGCLASS=U //STEP0101 EXEC PGM=MYPROGSS //ENTR01 DD DSN=GP.GPALU99.CADCLI,DISP=SHR

Os cartes JCL possuem 4 (quatro) divises em seu comando: Colunas 1-2 = cartes // (obrigatrio) Colunas 3-10 = nome do carto (pode ser JOBNAME, STEPNAME ou DDNAME) Colunas 12-15 = Tipo Colunas 16-72 = Comando necessrio um espao em branco entre o cardname / comando / clusula.Toda clusula do JCL comea com // nas colunas 1 e 2. Exceo apenas quando vai se inserir massa dados. -Um job composto de pelo menos um programa. Este programa poder ser um desenvolvido na empresa ou um utilitrio. -Um job SEMPRE (obrigatoriamente) comea com um carto JOB, que ir se apresentar para o sistema operacional e disponibilizar as filas e prioridades dentro do sistema -A cada programa ou utilitrio denominamos STEP. -Cada step representado por um carto chamado EXEC. -O carto EXEC responsvel por chamar o programa compilado e linkeditado. (Podendo ser tambm um utilitrio)

Pg: 4

-Dentro de cada carto EXEC teremos cartes DD que iro disponibilizar os dispositivos necessrios para o funcionamento do programa. REGRAS BSICAS DE J.C.L. No se esquea que JCL uma srie de comandos que voc est passando para o sistema operacional entender o seu programa, como se fossem parmetros. JAMAIS confunda JCL ERROR com ABEND. O primeiro erro de sintaxe ou indisponibilidade de recursos. O segundo falha de programa que em alguns casos pode at mesmo ser causado por recursos do sistema. Em caso de erro de JCL, o programa em questo no foi executado. Os cartes // nas colunas 1 e 2 so obrigatrios em todo o JCL, exceto se houver algum parmetro a ser passado pelo usurio (opo) ao programa. (Veja regra 6) Existem parmetros obrigatrios e parmetros opcionais. Com exceo do Account e programer-name do carto Job, todos os outros parmetros possuem o sinal =. O parmetros vm a esquerda e os sub parmetros direita do sinal.] Os sub-parmetros podem ser 1 ou mais de 1. Quando houver mais de 1 subparmetro dever estar entre aspas. Se o seu programa tem opo de processamento (ex: listagem total ou parcial), este opo (que na verdade tambm um parmetro), este poder ser passado aps um carto DD que contenha o comando DD *. Ao comear numa empresa pea sempre uma cpia da padronizao da empresa. Nem sempre voc poder batizar seu programa, jobname, stepname etc com o nome que voc quer. Existem regras, com certeza.

Pg: 5

CARTO JOB //GPAE99PG JOB (9983,98,978,09),ANTONIO, // CLASS=6,MSGCLASS=U GPAE99PG o JOBNAME. Dever ter sempre uma padronizao estabelecida pela rea de produo da empresa. Procure saber a regra antes de fazer a denominao. Na G&P sempre o userid seguido de 2 posies livres. Regra: Dever ter de 1 a 8 caracteres (em geral sempre 8), sendo o primeiro alfabtico. JOB Nome do carto de comando Obrigatrio. Sempre entre espaos em branco. (9983,98,978,09): Informe-se com a produo pois isto varia de empresa para empresa. Pode nem ser obrigatrio. Mas se for, dever ser sempre o primeiro aps o JOB. ANTONIO Programer-name. Obrigatrio. Para identificar o nome do usurio. Se no houver account, vem logo aps o comando JOB. CLASS=Define a classe que ser submetida na fila de JOBS. MSGCLASS=Define a classe de sysout (relatrio) onde sero geradas todas as logs durante o tempo em que o job permanecer no sistema. MSGLEVEL=(x,y) Define o nvel das mensagens que sero exibidas aps a execuo do JOB. O parmetro X pode assumir os valores 0, 1 ou 2 O parmetro Y pode assumir os valores 0 ou 1 TYPERUN=HOLD|SCAN Outros parmetros usados podero ser requeridos na empresa, mas no so obrigatrio no carto JOB, tais como TYPRUN, NOTIFY e outros. O CARTO EXEC composto do stepname, carto comando (EXEC) e o nome do programa (ou utilitrio) a ser chamado pelo JOB, aps a palavra PGM=. Pode-se codificar o parmetro PROC= ou indicar um nome sem qualquer palavra chave (PGM ou PROC) para chamadas a procedures catalogadas. PROCEDURE CATALOGADA Muitas empresas preferem utilizar procedure catalogadas ao invs de JOBS extensos. uma opo bem saudvel pois evita-se manutenes e permite passar parmetros para as procedures. Veja o exemplo de um JOB antes e depois da converso em procedure catalogada (ou simplesmente PROC).

Pg: 6

Antes: //UP0014KR JOB (9983,98,978,09),ANTONIO, // CLASS=6,MSGCLASS=U //STEP0101 EXEC PGM=MYPROGSS //ENTR01 DD DSN=GP.GPALU99.CADCLI,DISP=SHR //SAIDA02 DD DSN=GP.GPALU99.CADENT,DISP=(NEW,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0) //SYSOUT DD SYSOUT=* //PARM01 DD * PRINTALL //* //STEP0102 EXEC PGM=MYPROGXX,COND=(0,NE) //ENTR03 DD DSN=GP.GPALU99.CADENT,DISP=SHR //ENTR04 DD DSN=GP.GPALU99.CADRET,DISP=SHR //SAIDA03 DD DSN=GP.GPALU99.CADSAI(+1),DISP=(NEW,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0) //RELATO DD SYSOUT=(R,,XPTO) DEPOIS: O job (chamada) vai executar uma procedure chamada UP01P04 que est na biblioteca padro do sistema. Os parmetros podem ser passados pelo JOB ou pelo carto PROC. //UP0014KR JOB (9983,98,978,09),ANTONIO, // CLASS=6,MSGCLASS=U //PROC001 EXEC UP01P04,CLIENTE=UP0014,SAIDA=CADRET

A PROCEDURA CATALOGADA //UP01P04 PROC VOUP=SHR //STEP0101 EXEC PGM=MYPROGSS //ENTR01 DD DSN=&CLIENTE..GPALU99.CADCLI,DISP=SHR //SAIDA02 DD DSN=&CLIENTE..GPALU99.CADENT, // DISP=(NEW,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0) //SYSOUT DD SYSOUT=* //PARM01 DD * PRINTALL //* //STEP0102 EXEC PGM=MYPROGXX,COND=(0,NE) //ENTR03 DD DSN=&CLIENTE..GPALU99.CADENT,DISP=&VOUP Pg: 7

//ENTR04 DD DSN=&CLIENTE..GPALU99.&SAIDA,DISP=SHR //SAIDA03 DD // DSN=&CLIENTE..GPALU99.CADSAI(+1), // DISP=(NEW,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0) //RELATO DD SYSOUT=(R,,XPTO) O parmetro PARM=, no carto EXEC usado para passar informaes para o programa. Sintaxe: //STEP0101 EXEC PGM=MYPROGXX,PARM=900512,COND=(0,NE) Neste caso, o MYPROGSS um programa que dever estar na biblioteca padro do sistema. Antes de dar OPEN no programa o sistema ir verificar se o programa realmente existe. Em seguida ir verificar os recursos solicitados pelos cartes DD para s ento dar OPEN no programa e carrega-lo em memria. Todos os programas ao terminarem, emitem um cdigo de retorno para o sistema operacional. Se for 0 (zero) significa que terminou OK. O COND, neste caso ser para checar se o(s) step(s) anterior(es) terminou(aram) ok. Os mais comuns: (0,NE) Se todos os steps anteriores terminaram OK, pode processar este step. (2,LT) Significa que este step aceita que um os steps anteriores emitam um return code igual a 0 ou 1. Regra bsica: Comparar os return code anteriores e comparar com o parmetro. Se for negativo, execute. Se for positivo no execute. Outros exemplos: (0,LT) no ir executar nunca pois no existe return code negativo. (0,EQ) s processa se algum step anterior der return code diferente de 0. (EVEN) executa mesmo que algum step anterior tenha terminado anormalmente. (ONLY) executa somente se algum programa tenha terminado anormalmente.

OBSERVAO: Em caso de erro de JCL o parmetro COND no respeitado. A interrupo ocorre de qualquer forma.

O CARTO DD Acompanhando nosso exemplo, vamos utilizar os cartes para as definies. Antes porm, bom lembrar que o carto DD utilizado para pedir ao sistema alocao de recursos fsicos (dispositivos) para que o programa seja processado. Sintaxe:

Pg: 8

//ENTR01 DD DSN=GP.GPALU99.CADCLI,DISP=SHR //SAIDA02 DD DSN=GP.GPALU99.CADENT,DISP=(NEW,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0) DDNAME = (ENTR01) Tem que ser o mesmo que voc especificou na select do seu programa. Confira sempre a padronizao na sua instalao. DD = o nome do carto-comando. DSN = Parmetro que ir dizer ao sistema qual o nome externo do arquivo em questo. Lembre-se que neste caso voc est associando ENTRO1 ao arquivo UP0014.UP0.CADCLI e SAIDA02 ao arquivo UP0014.UP0.CADENT. O nome externo o nome que o sistema conhece o arquivo. DISP = Informa o status do arquivo no sistema operacional. Sintaxe: DISP=(NEW,CATLG,CATLG) DISP=(SHR,UNCTLG,UNCTLG) DISP=(OLD,DELETE,DELETE) ......DISP=(NEW,KEEP,KEEP) PRIMEIRO SUB-PARMETRO STATUS DO ARQUIVO SHR ---> Significa que o arquivo j existe e pode ser lido por outro recurso simultneamente. OLD ---->Significa que o arquivo j existe e que o programa exige exclusividade na leitura. NEW ---->Arquivo novo, a ser criado neste momento. SEGUNDO E TERCEIRO SUB-PARMETRO AO A SER TOMADA EM CASO DE TRMINO NORMAL E TRMINO ANORMAL RESPECTIVAMENTE. CATLG --> Catalogue o arquivo. bviamente que esta opo deve estar sempre acompanhada de NEW no primeiro sub-parmetro. Porque se o arquivo estiver sendo lido porque j est catalogado. UNCATLG --> Descatalogue o arquivo. Evite usar sempre. DELETE ---> Delete o arquivo. Se precisar deletar o arquivo use sempre esta opo. KEEP ---> Mantenha o arquivo do jeito que intacto (do que jeito que estava antes). LEMBRETES: -SEMPRE use o modelo da pgina anterior para entrada/sada.

Pg: 9

-Se o arquivo de entrada(OLD ou SHR) no precisa especificar demais parmetros, pois bviamente j est catalogado e o sistema saber encontr-lo. Se for de sada voc dever usar os demais parmetros do exemplo ENTR02. Exemplos invlidos: (SHR,CATLG,DELETE) ---> Se o arquivo novo (SHR) como ir catalogar se j est catalogado ? O sistema no recataloga. (NEW,KEEP,DELETE) ---> Como manter um arquivo que ainda no existe ? Default: Se voc colocar apenas DISP=SHR o sistema assume (SHR,KEEP,KEEP). Outros sub-parmetros: UNIT= ----> Especifica o tipo de dispositivo onde voc criar o arquivo. Geralmente disco SYSALLDA. Confira sempre com um funcionrio da sua seo ou com a equipe de produo. VOL=SER=nome ---- > indica o volume onde reside ou residir o arquivo. Se especificarmos um nome genrico para o parmetro UNIT (ex. SYSALLDA) durante a criao de um arquivo ou o mesmo estiver catalogado quando for utilizado com entrada esse parametro poder ser omitido. SPACE= ----> Espao a ser utilizado. Lembre-se que no precisa ser preciso, mas quanto mais preciso melhor. uma estimativa. O sistema ir checar se h disponibilidade para gravar seu arquivo. Se no houver, cancelar. Sintaxe: SPACE=(TRK,(5,2),RLSE). Repare que h sub-parmetro dentro de sub-parmetro. Neste caso permanece a regra de utilizar ' ( ) '. Neste exemplo estamos alocando 5 trilhas (TRK) na alocao primria, 2 trilhas de alocao secundria e liberando (RLSE) as trilhas no utilizadas. Poderia ser cilindros (CYL) ao invs de TRK mas no convm sua utilizao. Para saber o nmero ideal considere que uma trilha comporta aproximadamente 56.000 bytes. Portanto neste caso estamos alocando 5 trilhas. Se no for suficiente esta alocao, o sistema alocar mais 2 trilhas (alocao secundria) at 16 vezes para atender a solicitao. Se ainda no for suficiente o programa cancelar. DCB= ---> Indica o formato do arquivo a ser gravado. No necessrio para arquivos a serem lidos, pois o catlogo guarda esta informaes. Sintaxe: DCB=(RECFM=FB,LRECL=98,BLKSIZE=0) Obs.: A ordem dos sub-parmetros no obrigatria. Neste exemplo: Indica que o arquivo FB (fixo blocado). Confira que o seu programa possui as clusulas 'BLOCK 0' e 'RECORD FORMAT IS FIXED'. Outras opes possveis: Pg: 10

VB (varivel blocado), FBA (fix blocado com caracter de impresso) e F (fixo sem blocagem. EVITE sempre) e PO (particionado) O tamanho do registro 98. Se fosse varivel deveria ser o tamanho do maior registro + 4. BLKSIZE= ---> Blocagem do registro. o maior nmero de bytes trazidos para a memria de uma s vez. sempre uma quantidade prxima de 32.000. Deixe sempre com '0', pois o sistema calcula automticamente a blocagem ideal. SYSOUT= ---> Este carto tem finalidade definir a classe em que o relatrio ser impresso. Como as empresas sempre tem mais que uma impressora, diversos recebedores, diversos tipos de formulrios estas informaes sero de utilizadas para fazer estas definies. Neste exemplo o relatrio ser emitida na classe 5 com tipo de formulrio XPTO, que pode ser por exemplo uma fatura. DDs ESPECIAIS Comando SYSIN ou DD * (PRONUNCIA-SE (DED ASTERISCO)) Quando se faz necessrio passar alguma informao para o programa atravs de alguma opo, ou vai se informar algum dado digitado para o programa, isto feito atravs do carto DD *. Veja o exemplo abaixo: //STEP0102 EXEC PGM=MYPROGXX,COND=(0,NE) //ENTR03 DD DSN=GP.GPALU99.CADENT,DISP=SHR //SAIDA03 DD DSN=GP.GPALU99.CADSAI(+1),DISP=(NEW,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0) //SYSIN DD * DATE=25052002 // OUTRO EXEMPLO: //STEP0102 EXEC PGM=MYPROGZZ,COND=(0,NE) //SAIDA03 DD DSN=GP.GPALU99(+1),DISP=(NEW,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(GDG,RECFM=VB,LRECL=720,BLKSIZE=0) //ENTR01 DD * 23MARIA RAIMUNDA AV. CASTELO BRANCO, 727, - RICAHO GRANDE 24CLAUDIO ORZIMBO RUA DOS QUIABOS, 432 VILA MARIA SALTO // Comando SYSOUT DD SYSOUT=* indica a sada padro para mensagens emitidas pelo programa (exemplo DISPLAY). //STEPLIB DD DSN=UPNGO.LOADLIB,DISP=SHR ou //JOBLIB DD DSN=UPNGO.LOADLIB,DISP=SHR Pg: 11

Os cartes STEPLIB e JOBLIB so opcionais. Determinam ao sistema que o programa chamado pelo carto exec, no caso do STEPLIB imediatamente anterior, encontra-se compilado nesta biblioteca, e no na biblioteca default do sistema. Se usarmos o JOBLIB aps o carto JOB a informao vale para todos os STEPs do JOB. Isto corre, quando se tem uma biblioteca de testes ou temporria.Nota muito importante: ao contrrio do que acontece em outras plataformas como o Windows por exemplo, em que basta um duplo click para que um programa seja executado, no OS/390 isto no acontece. Um programa s pode ser executado a partir de uma biblioteca de programas prviamente totalmente controlada pelo sistema operacional e os programas so compilados um a um. Antes da produo, os programas passam por dois ambientes de teste e so supervisionadas pelo Analista, Gerente de Sistemas e validadas pelo gerente de contas da unidade e pelo Cliente. Uma biblioteca STEPLIB s pode ser usada em casos extremos e com permisso adequada. Agora voc j sabe por que vrus no ataca mainframes. CONCATENAO DE ARQUIVOS Imagine que voc tenha um arquivo de entrada que por um motivo qualquer no foi processado anteriormente. Ex.: ontem o pessoal da contabilidade no conseguiu enviar o movimento e por isso o processamento de fluxo de caixa no foi processado. Neste momento voc j poder processar o job, s que agora voc tem dois arquivos de entrada. O que fazer ? Executar o job duas vezes, uma para cada arquivo ? No necessariamente. Voc poder concatenar os dois arquivos e fazer um s processamento. Veja abaixo.

//STEP0102 EXEC PGM=MYPROGXX,COND=(0,NE) //ENTR01 DD DSN=GP.GPALU99.FLUXOCX(-1),DISP=SHR // DD DSN=GP.GPALU99.FLUXOCX(0),DISP=SHR //SAIDA02 DD DSN=GP.GPALU99.GERAL(+1),DISP=(NEW,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0) //RELATO DD SYSOUT=(R,,XPTO) DICAS GERAIS SOBRE JCL -No se esquea que JCL uma srie de comandos que voc est passando para o sistema operacional entender o seu programa, como se fossem parmetros. -JAMAIS confunda JCL ERROR com ABEND. O primeiro erro de sintaxe ou indisponibilidade de recursos. O segundo falha de programa que em alguns caso pode at mesmo ser causado por recursos do sistema. -Em caso de erro de JCL, o programa em questo no foi executado.

Pg: 12

-Os cartes // nas colunas 1 e 2 so obrigatrios em todo o JCL, exceto se houver algum parmetro a ser passado pelo usurio (opo) ao programa. (Veja regra 6) -Existem parmetros obrigatrios e parmetros opcionais. -Com exceo do Account e programer-name do carto Job, todos os outros parmetros possuem o sinal =. O parmetros vm a esquerda e os sub parmetros direita do sinal. -Os sub-parmetros podem ser 1 ou mais de 1. Quando houver mais de 1 subparmetro dever estar entre aspas. -Se o seu programa tem opo de processamento (ex: listagem total ou parcial), este opo (que na verdade tambm um parmetro), este poder ser passado aps um carto DD que contenha o comando DD *. -Ao comear numa empresa pea sempre uma cpia da padronizao da empresa. Nem sempre voc poder batizar seu programa, jobname, stepname etc com o nome que voc quer. Existem regras, com certeza -Assim como no programa, a identao no JCL tambm muito importante. -Nunca deixe de inserir comentrio sucinto sobre a finalidade do programa que voc est passando para a produo. -Para inserir um comentrio, basta colocar //* nas colunas 1 a 3, ao invs de simplesmente //. -Quando o comando no cabe na mesma linha, deve-se colocar uma vrgula aps o ltimo parmetro e continuar na linha de baixo, sempre comeando com // mas sem cardname. OUTROS PARMETROS: -Para se forar a leitura de um arquivo num determinado dispositivo, como por exemplo uma fita vinda de cliente externo que no consta no catlogo, ou um arquivo que est na VTOC de um disco mas no no catlogo, usamos VOL=SER= Modelo: //ENTRADA DD DSN=GP.GPALU99.ALUNOS,DISP=SHR,VOL=SER=R00134 -Quando no queremos catalogar um arquivo e usar um arquivo temporrio, usamos no DSNAME o simbolo && antes do nome. O arquivo ser deletado, logo aps a execuo. No se recomenda esta utilizao. Ex.: Modelo: //SAIDA03 DD DSN=&&CADSAI,DISP=(NEW,PASS), // UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE), // DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0)

Pg: 13

IF/THEN/ELSE/ENDIF Comando IF (implementado a partir do OS/390 ou MVS/ESA v4); Permite a construo de expresses relacionais para teste de condio em um JOB; Oferece alternativa de fcil compreenso para o uso do COND; Sintaxe: //nome IF condio THEN step ou steps a executar se a condio for verdadeira //nome [ELSE step ou steps a executar se a condio for falsa] //nome ENDIF expresso relacional 1 GT LT NG NL EQ NE GE LE

[AND] valor [OR] expresso 2 ... expresso n

[step.]RC

[step.]ABEND [step.]RUN Exemplo:


//JOBTESTE JOB MSGLEVEL=1,CLASS=A,MSGCLASS=X //PASSO1 EXEC PGM=IEFBR14 //DD1 DD DSN=GP.GPAE99.PDS2, // DISP=(OLD,CATLG,DELETE),SPACE=(TRK,(10,5,100)), // DCB=(LRECL=80,BLKSIZE=0,RECFM=FB),UNIT=DISCO //* //IF0001 IF RC EQ 0 THEN //* //PASSO2 EXEC PGM=IEBGENER //SYSIN DD DUMMY //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=GP.GPAE99.FONTES(DADOS),DISP=SHR //SYSUT2 DD DSN=GP.GPAE99.PDS2(DADOS),DISP=SHR //* //IF0001 ENDIF

Pg: 14

outros exemplos: IF com ELSE executar PASSO4 se algum step anterior terminou com RC 0 ou cancelou, seno executar PASSO5 //IF001 //* //PASSO4 //SYSIN //SYSPRINT //SYSUT1 //SYSUT2 //* //IF001 //* //PASSO5 //SYSIN //SYSPRINT //SYSUT1 //SYSUT2 //* //IF001 IF RC > 0 OR ABEND THEN

EXEC PGM=IEBGENER DD DUMMY DD SYSOUT=* DD DSN=GP.GPAE99.PDS(DADOS),DISP=SHR DD SYSOUT=* ELSE EXEC PGM=IEBGENER DD DUMMY DD SYSOUT=* DD DSN=GP.GPAE99.FONTES(DADOS),DISP=SHR DD SYSOUT=* ENDIF

IFs encadeados: (executar PASSO5 se PASSO4 terminar com RC = 0)


//IF001 //* //PASSO4 //SYSIN //SYSPRINT //SYSUT1 //SYSUT2 //* //IF002 //* //PASSO5 //SYSIN //SYSPRINT //SYSUT1 //SYSUT2 //* //IF002 //IF001 IF (RC > 0 OR ABEND ) THEN

EXEC PGM=IEBGENER DD DUMMY DD SYSOUT=* DD DSN=GP.GPAE99.PDS(DADOS),DISP=SHR DD SYSOUT=* IF PASSO4.RC = 0 EXEC PGM=IEBGENER DD DUMMY DD SYSOUT=* DD DSN=GP.GPAE99.FONTES(DADOS),DISP=SHR DD SYSOUT=* ENDIF ENDIF

Executar PASSO5 se PASSO4 no foi executado


//IF002 //* //PASSO5 //SYSIN //SYSPRINT //SYSUT1 //SYSUT2 //* //IF002 IF (NOT PASSO4.RUN) THEN EXEC PGM=IEBGENER DD DUMMY DD SYSOUT=* DD DSN=GP.GPAE99.FONTES(DADOS),DISP=SHR DD SYSOUT=* ENDIF

Pg: 15

Utilitrios Programas fornecidos junto com o sistema operacional ou adquirido no mercado para executar tarefas comuns a todas instalaes. Comandos de controle dos utilitrios ------------------------------------------------------------------------------------------------------123456789012345678901234567890123456789012345678901234567890123456 7890123--------------------------------------------------------------------------------------------------------------------------- Coluna 1 - A coluna 1 precisa estar em branco se um label no codificado. Coluna 16 operao e continuao.A continuao de um comando precisa comear na coluna 16 Coluna 72 - Codifique um caracter no branco na coluna 72 para continuar um comando IEBGENER utilizado para copiar arquivos sequenciais (SYSUT1 para SYSUT2) Exemplo: //GPAE99EX JOB //CONSTROI EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=A //SYSIN DD DUMMY //SYSUT1 DD * JOAO PAULO 53AF 87 5701, 23 DE MAIO ANTONIO JOSE 78AF 34 320, SO BENTO /* //SYSUT2 DD DSN=GP.GPAE99.TEST,UNIT=SYSALLDA, // SPACE=(TRK,(1,1)),DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0) IEFBR14 utilizado para crier ou excluir arquivos Exemplo: //GPAE99EX JOB //STEPALOC EXEC PGM=IEFBR14 //VKSDS1 DD DSN=DSVAABVS.LSG.A889.ALBERTO,DISP=(,CATLG,DELETE), // SPACE=(CYL,(10,10)),DCB=(LRECL=100,RECFM=F) //* //STEPDEL EXEC PGM=IEFBR14

Pg: 16

//VKSDS1 DD DSN=DSVAABVS.LSG.A889.ALBERTO,DISP=(OLD,DELETE), // SPACE=(CYL,(10,10)),DCB=(LRECL=100,RECFM=F)

Pg: 17

Exerccio de fixao comando JOB e comando EXEC Utilizando a biblioteca GP.GPATxx.FONTES, criar o membro JOB01, conforme segue: OBS.: GPATxx substituir por seu userid 1. Codificar (conforme indicado) e submeter par validao, o seguinte JCL: //GPATxxJ1 JOB CLASS=A, // MSGCLASS=X,MSGLEVL=0 // NOTIFY=GPATXX 'PROGRAMADOR: BILL GATES' //STEP1 EXEC PGM=IEFBR14,PARM='TOMARA QUE CAIA' //STEP4 EXEC IEFBR14,PARM='100288' // TEP3 EXEC PGM=IEFBR14 COMENTARIO //STEP2 EXEC PGM=IEFBR15 PROGRAMA NOVO? //STEP4 EXEQ IEFBR14,ACCT='ADMP,ATR2099,' Com base no resultado da submisso responda: 1. Qual o nmero do JOB? ________________ 2. Para que classe de entrada o JOB foi direcionado? _____ 3. Para que classe de sada o JOB foi direcionado? _______ 4. O JOB executou normalmente? _______ 5. V a classe de sada indicada no parmetro MSGCLASS (via SDSF) e veja o resultado execuo. O que aconteceu com o JOB? ____________________________________________ 6. Por que as mensagens sobre a execuo no esto na classe indicada do parmetro MSGCLASS? ________________ 7. Altere parmetro MSGLEVEL para MSGLEVEL=1 e envie o JCL para execuo novamente. 8. Veja os diversos erros que ocorreram. Tente compreender a mensagem de erro, corrija os problemas de codificao apresentados e execute o JCL novamente. Refaa essa operao at no existirem mais erros de JCL. O JOB executou? O que ocorreu? ______________________________

Pg: 18

Exerccio de fixao parmetro COND, comandos DD e utilitrios IEFBR14 e IEBGENER Codificar, validar e executar o seguinte JCL. Salvar na biblioteca GP.GPATxx.FONTES com o nome de JOB02 NOME DO JOB GPATxxJ2

Executar em classe A; Enviar mensagens de execuo para classe X (exibir sempre todos os nveis de mensagens); Notificar o usurio do TSO sobre o termino da execuo. PASSO1 Utilizando o IEFBR14 alocar um arquivo seqencial, com registros fixos blocados de 120 posies, reservando 2 trilhas de espao primrio, 1 trilhas de espao secundrio. Deixar o sistema calcular o tamanho do bloco; Nome do arquivo: GP.GPATxx.ARQUIVO1 PASSO2 Se o step anterior terminou com RC maior que 0 no execute. Copiar com IEBGENER para o arquivo criado no step anterior o membro DADOS da biblioteca GP.GERAL.EXEMPLOS PASSO 3 Se o step 2 terminou com RC > 0 execute esse passo Excluir o arquivo criado no step1 utilizando o IEFBR14. PASSO 4 Se os steps 1 ou 2 terminaram normalmente execute esse step. Utilizando o IEBGENER listar o contedo do arquivo criado no PASSO2

Pg: 19

Exerccio de fixao comando IF Criar como JOB03 uma cpia do JOB02 e substituir o uso do COND pelo comando IF. Salvar e testar o novo JOB, garantindo que o resultado da execuo continuar sendo o mesmo obtido com o parmetro COND.

Pg: 20

Você também pode gostar