mainframe cobol

30
Centro de Treinamento Página: 1 MAINFRAME COBOL (Amostra)

Upload: rodrigo-silver

Post on 03-Mar-2015

254 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Mainframe Cobol

Centro de Treinamento

Página: 1

MAINFRAME COBOL (Amostra)

Page 2: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 1 

Aula 2 – TSO (Time Sharing Option)  

Opção 3.3 do PDF 

 3  Move/Copy   Move, copy, or promote members or data sets  

  

Repare nas seguintes mensagens: From ISPF Library: e From Other Partitioned or Sequential Data Set que nos dão a exata sensação que estamos nos referindo a um arquivo de origem.  Neste exemplo vamos copiar um membro de uma biblioteca (GP.GPMF99.COBLIB) utilizando a opção ‘c’ para um outro data‐set. Vamos copiar o membro BALANCE para uma outra biblioteca. .....mas para qual biblioteca ? Vamos dar um <ENTER>.  

  

Page 3: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 2 

Repare que  agora  apareceu 2  vezes  a palavra  ‘TO’ que nos dá  a  exata  sensação de referência a um arquivo de destino. Neste exemplo estou copiando o membro selecionado no exemplo  anterior  para  esta  biblioteca.  Vamos manter  o  nome  de  origem  do membro.  Se quiséssemos alterar bastava colocar no campo member   o novo nome. No canto superior da tela  aparece  a  confirmação  do  nome  do  arquivo/membro  que  está  sendo  copiado.   

   O membro do data‐set foi copiado normalmente e retorna automaticamente a tela de origem. 

Opção 3.4 do PDF 

4  Dslist     Print or display (to process) list of data set names.  Print or display VTOC information.  

      

Page 4: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 3 

Vamos  listar  todos  os  arquivos  do  catálogo  que  começam  com  GP.GPMF80.  O  resultado:  

  Podemos trabalhar com os data‐sets listados acima. Podemos editar (E), visualizar (B), 

deletar (D), renomear (R), copiar (C), mover (M), etc. Uma outra opção, nesta tela é utilizar o comando barra  (como no  exemplo), que  vai  abrir  várias opções,  inclusive  as  citadas  acima. Veja o resultado:  

  

Um pop‐up  foi aberto e várias opções sobre o que  fazer com o arquivo selecionado. Basta selecionar o número da opção. Funcionar como os comando citados. 

A partir deste comando quase todas as funções mostradas até o momento poderão ser feitas a partir desta opção.  

Page 5: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 4 

As opções de 5 a 11 estão desabilitadas e por  isso não serão objetos de estudo. Elas são de uso da área de suporte operacional. 

Opção 3.12 do PDF  

 12 SuperC      Compare data sets      

Vamos comparar o arquivo GP.GPMF80.MANUT com o arquivo GP.GPMF99.MANUT. Necessitaremos 2 painéis para entrar com a informação.  

  Com este: 

     

Page 6: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 5 

E o resultado será.......  

  Note: nas  linhas 9  e 10 o  resultado da diferença  entre os 2  arquivos. No de  input  aparece 00017ISTO ESTA DIFERENTE e no de output, não existe. 

 A opção 13 gera em disco estas diferenças. Mas a funcionalidade é a mesma.  

Opção 3.14 do PDF  14 Search‐For  Search data sets for strings of data          (Standard Dialog)  

  

Page 7: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 6 

Vamos pesquisar a(s) ocorrência(s) do string GP dentro da biblioteca GP.LB.PROCLIB. Note que o asterisco em ‘member’ indica que vamos fazer a pesquisa em todos os membro da biblioteca em questão.   O resultado: 

    

As opções 4 e 5 do PDF servem para compilar programas dentro do TSO. Porém sua funcionalidade ainda não está ativada. É necessário compilador instalado dentro do TSO, o que não é vantajoso.  

As opções 7 a 11 são destinadas exclusivamente à equipe de suporte.  

Na opção 6 é possível emitir comandos para operação, como cancelar jobs, mensagens para o operador ou até mesmo funções do RACF. Obviamente que esta função geralmente é desabilitada para área de desenvolvimento. 

Page 8: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 7 

PRINCIPAIS COMANDOS DE TSO 

 Comandos de TSO são entradas na linha de comando, sempre usados no manuseio de 

arquivos editados. Lembre‐se que qualquer arquivo para ser alterado ou  incluir  informações ele precisa ser editado. Portanto um arquivo editado é um arquivo ‘alterável’.   

 F   MARIA  ‐  procura pela palavra Maria dentro do arquivo. Para continuar procurando a mesma ocorrência no restante do arquivo, continue teclando ‘F5”,  

 C  SECTION SECAO ALL   altera todas as ocorrências ‘section’ para ‘secao’ (em todo arquivo).   

 SAVE    salva o arquivo em uso (com o mesmo nome evidentemente).  

 CANCEL    cancela todas as alterações realizadas desde o último save. O arquivo mantém as mesmas características anteriores.  

 RECOVERY ON    Uma única vez, habilita a opção UNDO (desfazer) uma função.  

 L    PGM01    Este  comando  só  poderá  ser  executado  quando    dentro  de  uma  biblioteca. Utilizado para localizar um membro dentro de uma biblioteca.  

 HEX    Exibe o arquivo em hexa  

 HEX OFF    Retorna a decimal.  

 RES    Limpa mensagens do sistema.  

 M+F8    Posiciona cursor na ultima linha  

 M+F7    Posiciona cursor na primeira linha  

 L  26   Posiciona cursor na linha 26  

 EXC   SECTION ALL   Exclui todas as linhas com a ocorrência ‘section’ – (sem all, somente a primeira)        

Page 9: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 8 

COMANDOS DE LINHAS 

 (também válido somente para modo ‘edit’)  

 

 COLS    Cria régua na linha superior  

 C    copia linha  

 CC + CC    Copia bloco de linhas  

 A    Localizador para os comandos Copy e Move. A=after  

 M    Move 1 linha  

 MM + MM    Move bloco de linhas  

 R     Repete linha  

 RR + RR    Repete bloco de linhas.  

 |  ‐ Insere linhas  

 N+  ‐ Desloca o texto N colunas para direita   

 N   ‐ Desloca o texto N colunas para a esquerda  

Se um Member  for aberto no modo VIEW, as alterações efetuadas não poderão  ser gravadas. Para descartar as alterações em COMMAND digite CANCEL e <enter>. 

Para  gravar  as  alterações  digite  CC  na  primeira  linha  e  CC  na  ultima  linha  e  em COMMAND digite REPLACE “nome do member” e <enter>. 

Para  criar  uma  cópia  de  um Member  sendo  editado  (EDIT)  ou  visualizado  (VIEW)  , digite CC na primeira e última linha e em COMMAND digite CREATE “nome do novo membro” e <enter>. 

Page 10: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 9 

 

O SDSF 

 

  

Esta é a tela principal do System Display Search Facility, ou simplesmente SDSF. É um aplicativo que, a exemplo do PDF, roda debaixo do TSO. A principal função deste aplicativo é permitir o acompanhamento e monitoração de jobs dentro do sistema operacional. 

Nesta  tela  acima  podemos  perceber  que  as  opções mostram  as  diversas  áreas  do sistema operacional por onde trafegam os jobs batch. Nem todas as opções estarão habilitadas para você na  sua empresa. E mesmo dentre as opções  liberadas existem  funções  como por exemplo, cancelar  jobs, deletar sysout, monitorar  job de outro usuário que você certamente não terá permissão, pois o SDSF é controlado pelo RACF.   

 LOG    Exibe a log da console máster do sistema operacional.  

 DA    Exibe jobs em execução (certamente os que você tem permissão de visualizar)  

 I    Jobs presos na Input queue.  

 O    Jobs na output queue (não liberados para visualização)  

 H    Jobs em hold  

 ST    Jobs na saída, liberados para visualização (sysouts de execução)  

 PR    Impressoras do sistema operacional    INIT    Status dos initiators 

Page 11: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 10 

 Demais funções utilizadas pelo suporte técnico. 

Opção ST  

 Visualizar jobs  

  

NOTA:   o user GPMF80 só consegue visualizar os  jobs  iniciados com ‘GPMF80’. A opção ‘s’ (de select) abre a visualização da sysout do jobs como veremos a seguir.  

Resultado.  

  

Page 12: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 11 

NAVEGANDO ENTRE TELAS  

 Usando F2 e F9  

Imagine  a  situação:  Você  entrou  no  sistema  pela  opção  P.3.4,  abriu  um  job  e  o submeteu. Para visualizar a sysout de execução, você deveria teclar F3 4 vezes, voltar ao menu principal, entrar no SDSF, e entrar na opção ST. Você vê o job, mas precisa submeter. Você sai da função ST, retorna ao PDF e vai navegando até retornar ao job. Acerta o job, submete e tem que voltar ao SDSF.  

Para minimizar este esforço você pode dividir a tela com F2 e trabalhar como se fosse 2 usuários simultâneos. Você navega entre ambos utilizando a tecla F9.  

  Repare que a tela está dividida. A linha pontilhada indica a divisão em 2 sessões simultâneas.  

Page 13: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 12 

SAINDO DO TSO 

 Você deve pressionar F3 até aparecer a tela abaixo: 

   Digite 2 em Process option e pressione <Enter>.   LOGOFF  • O  comando  LOGOFF  (que  você deverá digitar  logo abaixo de READY) encerra a  sessão de TSO.  Como  confirmação  da  ação  e’  enviada  a  seguinte  mensagem  ao  terminal  : 

  

 

NOTA : Nunca saia do TSO sem LOGOFF – a USERID fica presa e você não conseguirá                logar‐se novamente. 

Page 14: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 13 

       

1. Cite dois recursos dentro do PDF ISPF que nos permite criar/editar um member.     2. Dentro da exibição da execução de um JOB em SD System Display, qual o 

recurso para se localizar cadeias de caracteres (strings),ir para o inicio e fim da exibição? 

   3. Como na exibição de um JOB em SD System Display, pode‐se determinar de 

quantos “steps”o JOB é composto e o resultado da execução de cada um deles ? É possível ainda a exibição individual de cada “step”? 

Questionário 

Page 15: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 14 

 

AULAS  3 e 4  ‐ JCL (Job Control Language)  DEFINIÇÃO DE UM JOB 

 Um job (serviço) é composto por um ou mais programas que serão processados dentro de uma 

seqüência. Se esta seqüência for quebrada por alguma anormalidade, interrompe‐se o fluxo, repara‐se o erro e faz a retomada. Uma  interrupção causada pelo programa chamamos de ABEND. Esta retomada (ou restart) poderá ser feita desde o início, a partir do ponto que houve a ocorrência, em algum ponto anterior do  Job, ou até mesmo de algum  job anterior. Pode também ser necessário a recuperação de algum  arquivo  que  tenha  sido  o  causador  do  término  anormal.  Um  seqüência  de  jobs  em  cadeia chamamos de rotina.   Observações 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 utilitário. •Um  job SEMPRE  (obrigatoriamente) começa com um cartão  ‘JOB’, que  irá se  ‘apresentar’ para o 

sistema operacional e disponibilizar as filas e prioridades dentro do sistema •A cada programa ou utilitário denominamos ETAPA (step). •Cada step é representado por um cartão chamado ‘EXEC’. •O  cartão  EXEC  é  responsável  por  chamar  o  programa  compilado  e  linkeditado  (podendo  ser 

também um utilitário ou uma Procedure). •Dentro  de  cada  cartão  EXEC  teremos  cartões  ‘DD’  que  irão  disponibilizar  os  dispositivos 

necessários para o funcionamento do programa.   

DESENHO BÁSICO 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// 

  Repare: temos neste exemplo um Job composto de 4 steps. Estes steps podem ser programas ‘caseiros’ e/ou utilitários (como o SORT e o IDCAMS) ou procedures. Voltando a fig.01 poderá muito bem ser a seqüência 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 negócio. 

 

X’

Page 16: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 15 

A FUNÇÃO DO J.C.L. 

 Quando mencionamos as palavras JOB, EXEC e DD, estamos falando de uma linguagem: JCL (Job 

control  language  ou  linguagem  de  programação  de  serviços). A  função  do  JCL  é  solicitar  e  informar recursos e dispositivos ao sistema operacional. 

Os comandos JOB e DD obrigatoriamente deverão ter um NOME (opcional no comando EXEC). Este nome  será  conhecido  como  JOBNAME,  STEPNAME  e DDNAME.  São  inseridos  logo  após o  ‘//’  e antes do comando. 

EXEMPLO DE J.C.L. 

 Um exemplo típico de um JOB com um step apenas para ilustração.     //GPTINNss JOB ‘(Nome)’,’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), //          UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE),//          DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0)//RELATO    DD SYSOUT=(R,,XPTO)//  

    

 

//GPTINNss JOB ‘(Nome)’,’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//* 

 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 parâmetro chamado PARM01 E  uma saída chamado pelo DDNAME SAIDA02.  

Um outro step irá executar o programa MYPROGXX, que irá ler 2 arquivos e gerar um terceiro arquivo em GDG. 

Page 17: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 16 

POSICIONAMENTO DOS CARTÕES DE JCL 

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 1234567890123456789012345678901234567890123456789012345678901234567890123 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ //GP0014KR JOB ‘(9983,98,978,09)’,’ANTONIO’,CLASS=6,MSGCLASS=U //STEP0101 EXEC PGM=MYPROGSS //ENTR01   DD   DSN=GP.GPALU99.CADCLI,DISP=SHR  Os cartões JCL possuem 4 (quatro) divisões em seu comando:  

• Colunas 1‐2 = cartões ‘//’ (obrigatório) • Colunas 3‐10 = nome do cartão (pode ser JOBNAME, STEPNAME ou DDNAME) • Colunas 12‐15 = Tipo • Colunas 16‐72 = Comando 

 É necessário um espaço em branco entre o cardname / comando / cláusula.Toda cláusula do JCL 

começa com ‘//’ nas colunas 1 e 2. Exceção 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 utilitário.  

• ‐Um job SEMPRE (obrigatoriamente) começa com um cartão ‘JOB’, que irá se ‘apresentar’ para o     sistema operacional e disponibilizar as filas e prioridades dentro do sistema 

• ‐A cada programa ou utilitário denominamos STEP. • ‐Cada step é representado por um cartão chamado ‘EXEC’. • ‐O cartão EXEC é responsável por chamar o programa compilado e linkeditado. (Podendo ser  

  também um utilitário) • ‐Dentro de cada cartão EXEC teremos cartões ‘DD’ que irão disponibilizar os dispositivos  

  necessários para o funcionamento do programa.  

REGRAS BÁSICAS DE J.C.L. 

 •Não  se  esqueça  que  JCL  é  uma  série  de  comandos  que  você  está  passando  para  o  sistema 

operacional ‘entender’ o seu programa, como se fossem parâmetros. •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 questão não foi executado.  •Os  cartões  ‘//’  nas  colunas  1  e  2  são  obrigatórios  em  todo  o  JCL,  exceto  se  houver  algum 

parâmetro a ser passado pelo usuário (opção) ao programa. (Veja regra 6) •Existem parâmetros obrigatórios e parâmetros opcionais.  •Com exceção do Account e programer‐name do cartão Job, todos os outros parâmetros possuem o 

sinal ‘=’. O parâmetros vêm a esquerda e os sub‐parâmetros á direita do sinal.] •Os sub‐parâmetros podem ser 1 ou mais de 1. Quando houver mais de 1 sub‐parâmetro deverá 

estar entre aspas. •Se o seu programa tem opção de processamento (ex: listagem total ou parcial), este opção (que na 

verdade também é um parâmetro), este poderá ser ‘passado’ após um cartão DD que contenha o comando ‘DD *’. 

•Ao começar numa empresa peça  sempre uma cópia da padronização da empresa. Nem  sempre você  poder  ‘batizar’  seu  programa,  jobname,  stepname  etc  com  o  nome  que  você  quer. Existem regras, com certeza.  

    

Page 18: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 17 

COMANDO JOB  //GPAE99PG JOB ‘(9983,98,978,09)’,’ANTONIO’, //                CLASS=6,MSGCLASS=U  GPAE99PG – É o JOBNAME. Deverá ter sempre uma padronização estabelecida pela área de produção da empresa. Procure saber a regra antes de fazer a denominação. Na GPTI é sempre o userid seguido de 2 posições livres.  Regra: Deverá ter de 1 a 8 caracteres (em geral sempre 8), sendo o primeiro alfabético.  JOB – Nome do cartão de comando – Obrigatório. Sempre entre espaços em branco. ‘(9983,98,978,09)’: Informe‐se com a produção pois isto varia de empresa para empresa. Pode nem ser obrigatório. Mas se for, deverá ser sempre o primeiro após o JOB.  ‘ACOUNT’ – Nome para contabilização de uso dos recursos.  CLASS=Define a classe que será submetida na fila de JOBS.   MSGCLASS=Define a classe de sysout (relatório) onde serão geradas todas as logs durante o tempo em que o job permanecer no sistema.  MSGLEVEL=(x,y) Define o nível das mensagens que serão exibidas após a execução do JOB. 

• O parâmetro X pode assumir os valores 0, 1 ou 2 • O parâmetro Y pode assumir os valores 0 ou 1 

 TYPERUN=HOLD|SCAN  Outros parâmetros usados poderão ser requeridos na empresa, mas não são obrigatório no cartão JOB, tais como TYPERUN, NOTIFY e outros.  

COMAND EXEC 

 É composto do stepname (opcional) , cartão comando (EXEC) e o nome do programa (ou utilitário) a ser chamado pelo JOB, após a palavra PGM=.  Pode‐se codificar o parâmetro PROC= ou inidicar um nome sem qualquer palavra chave (PGM ou PROC) para chamadas a procedures catalogadas. 

PROCEDURE CATALOGADA 

 Muitas empresas preferem utilizar procedure catalogadas ao invés de JOBS extensos. É uma opção bem saudável pois evita‐se manutenções e permite passar parâmetros para as procedures. Veja o exemplo de um JOB antes e depois da conversão em procedure catalogada (ou simplesmente PROC).  Antes:  

 

//GP0014KR 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=* 

Page 19: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 18 

//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  padrão  do sistema. Os parâmetros podem ser passados pelo JOB ou pelo cartão PROC.   

 

//GPUP0014KR JOB ‘(9983,98,978,09)’,’ANTONIO’,//                CLASS=6,MSGCLASS=U //PROC001  EXEC UP01P04,CLIENTE=’GP0014’,SAIDA=’CADRET’  

 

A PROCEDURE CATALOGADA  

 

//GP01P04   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 //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) //GP01P04   PROC VOUP=’SHR’

 O parâmetro PARM=, no cartão EXEC é usado para passar informações para o programa.  Sintaxe: //STEP0101  EXEC PGM=MYPROGXX,PARM=’900512’,COND=(0,NE)  

Neste caso, o MYPROGSS é um programa que deverá estar na biblioteca padrão 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 cartões DD para só então dar OPEN no programa e carrega‐lo em memória. 

Todos os programas ao terminarem, emitem um código de retorno para o sistema operacional. Se for ‘0’ (zero) significa que terminou OK. 

Page 20: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 19 

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  básica:  Comparar  os  return  code  anteriores  e  comparar  com  o  parâmetro.  Se  for  negativo, execute. Se for positivo não execute. Outros exemplos:   (0,LT) não irá executar nunca pois não 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.  

 

 OBSERVAÇÃO: Em caso de erro de JCL o parâmetro COND não é respeitado. A interrupção ocorre de qualquer forma 

 

O COMANDO DD 

 Acompanhando nosso exemplo, vamos utilizar os cartões para as definições. Antes porém, é 

bom  lembrar  que  o  cartão  DD  é  utilizado  para  pedir  ao  sistema  alocação  de  recursos  físicos (dispositivos) para que o programa seja processado.  Sintaxe: 

 

//GPUP0014KR JOB ‘(9983,98,978,09)’,’ANTONIO’,//                CLASS=6,MSGCLASS=U //PROC001  EXEC UP01P04,CLIENTE=’GP0014’,SAIDA=’CADRET’  

 DDNAME =  (ENTR01) Tem que ser o mesmo que você especificou  na select do seu programa. Confira sempre a padronização na sua instalação. DD = É o nome do cartão‐comando. DSN = Parâmetro que irá dizer ao sistema qual o nome externo do arquivo em questão.  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‐PARÂMETRO – STATUS DO ARQUIVO  

 SHR ‐‐‐> Significa que o arquivo já existe e pode ser lido por   outro recurso simultâneamente. OLD ‐‐‐‐>Significa que o arquivo já existe e que o programa   exige exclusividade na leitura. NEW ‐‐‐‐>Arquivo novo, a ser criado neste momento.    

Page 21: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 20 

 

SEGUNDO E TERCEIRO SUB‐PARÂMETRO – AÇÃO A SER TOMADA EM CASO DE TÉRMINO NORMAL E 

TÉRMINO ANORMAL RESPECTIVAMENTE. 

CATLG ‐‐> Catalogue o arquivo. Óbviamente que esta opção deve estar sempre acompanhada de NEW no primeiro sub‐parâmetro. 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 opção. KEEP ‐‐‐> Mantenha o arquivo do jeito que estava antes  

 

‐ SEMPRE  use o modelo da página anterior para entrada/saída.‐ Se o arquivo é de entrada(OLD ou SHR) não precisa especificar demais parâmetros, pois óbviamente já está catalogado e o sistema saberá encontrá‐lo. Se for de saída você deverá usar os demais parâmetros do exemplo ENTR02

  Exemplos inválidos:   (SHR,CATLG,DELETE) ‐‐‐> Se o arquivo é novo (SHR) como irá catalogar se já está catalogado ? O sistema não recataloga.  (NEW,KEEP,DELETE)  ‐‐‐> Como manter um arquivo que ainda não existe ?   Default: Se você colocar apenas DISP=SHR o sistema assume (SHR,KEEP,KEEP).  Outros sub‐parâmetros:  UNIT=  ‐‐‐‐> Especifica o tipo de dispositivo onde você criará o arquivo. Geralmente disco é SYSALLDA. Confira sempre com um funcionário da sua seção ou com a equipe de produção.  VOL=SER=nome  ‐‐‐‐ >  indica o volume onde  reside ou  residirá o arquivo. Se especificarmos um nome genérico para o parâmetro UNIT  (ex. SYSALLDA) durante a criação de um arquivo ou o mesmo estiver catalogado quando for utilizado com entrada esse parametro poderá ser omitido.  SPACE=  ‐‐‐‐> Espaço a  ser utilizado.  Lembre‐se que não precisa  ser preciso, mas quanto mais preciso melhor. É uma estimativa. O sistema  irá checar se há disponibilidade para gravar seu arquivo. Se não houver, cancelará. Sintaxe: SPACE=(TRK,(5,2),RLSE).  

Repare que há sub‐parâmetro dentro de sub‐parâmetro. Permanece a regra de utilizar ' ( ) '.  Neste exemplo estamos  alocando 5  trilhas  (TRK) na  alocação primária, 2  trilhas de  alocação 

secundária e  liberando (RLSE) as trilhas não utilizadas. Poderia ser cilindros (CYL) ao  invés de TRK mas não  convém  sua  utilização.  Para  saber  o  número  ideal  considere  que  uma  trilha  comporta aproximadamente 56.000 bytes. Portanto neste caso estamos alocando 5 trilhas. Se não for suficiente esta  alocação,  o  sistema  alocará mais  2  trilhas  (alocação  secundária)  até  16  vezes  para  atender  a solicitação. Se ainda não for suficiente o programa cancelará.  DCB= ‐‐‐> Indica o formato do arquivo a ser gravado. Não necessário para arquivos a serem lidos, pois o catálogo guarda esta informações.  Sintaxe:  

Page 22: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 21 

DCB=(RECFM=FB,LRECL=98,BLKSIZE=0) Obs.: A ordem dos sub‐parâmetros não é obrigatória.  Neste exemplo:  

Indica que o arquivo é FB (fixo blocado). Confira que o seu programa possui as cláusulas 'BLOCK 0' e  'RECORD FORMAT  IS FIXED'. Outras opções possíveis: VB  (variável blocado), FBA  (fix blocado com caracter de impressão) e F (fixo sem blocagem. EVITE sempre) e PO (particionado) 

O tamanho do registro é 98. Se fosse variável deveria ser o tamanho do maior registro + 4.  BLKSIZE= ‐‐‐> Blocagem do registro. É o maior número de bytes trazidos para a memória de uma só vez. É  sempre  uma  quantidade  próxima  de  32.000.  Deixe  sempre  com  '0',  pois  o  sistema  calcula automáticamente a blocagem ideal.  SYSOUT=  ‐‐‐> Este  cartão  tem  finalidade definir  a  classe em que o  relatório  será  impresso. Como  as empresas sempre  tem mais que uma  impressora, diversos  recebedores, diversos  tipos de  formulários estas informações serão de utilizadas para fazer estas definições. Neste exemplo o relatório será emitida na classe 5 com tipo de formulário XPTO, que pode ser por exemplo uma fatura. 

 

DDs ESPECIAIS 

 Comando SYSIN ou ‘DD *’ (PRONUNCIA‐SE (DEDÊ ASTERISCO))  Quando se faz necessário passar alguma informação para o programa através de alguma opção, ou vai se informar algum dado digitado para o programa, isto é feito através do cartão 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 // //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 // //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   //

Page 23: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 22 

  //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   //     //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  saída  padrão  para mensagens  emitidas  pelo  programa (exemplo DISPLAY). //STEPLIB    DD DSN=GP. LOADLIB,DISP=SHR ou  //JOBLIB      DD DSN=GP. LOADLIB,DISP=SHR    

  Os  cartões  STEPLIB  e  JOBLIB  são  opcionais.  Determinam  ao  sistema  que  o  programa chamado  pelo  cartão  exec,  no  caso  do  STEPLIB  imediatamente  anterior,  encontra‐se compilado nesta biblioteca, e não na biblioteca default do sistema. Se usarmos o JOBLIB após o cartão JOB a  informação vale para todos os STEPs do JOB. Isto corre, quando se tem uma biblioteca de testes ou  temporária.Nota muito importante: ao contrário 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 não acontece. Um programa só pode ser executado a partir de uma biblioteca de programas préviamente totalmente controlada pelo sistema operacional e os programas são compilados um a um. Antes da produção, os programas passam por dois ambientes de teste e são 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 permissão adequada. Agora você já sabe por que vírus não ataca mainframes

CONCATENAÇÃO DE ARQUIVOS 

 Imagine  que  você  tenha  um  arquivo  de  entrada  que  por  um  motivo  qualquer  não  foi 

processado anteriormente. Ex.: ontem o pessoal da contabilidade não conseguiu enviar o movimento e por  isso  o  processamento  de  fluxo  de  caixa  não  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 

Page 24: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 23 

vezes, uma para cada arquivo ? Não 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 

 

 

• Não  se  esqueça  que  JCL  é  uma  série  de  comandos  que  você  está  passando  para  o sistema operacional ‘entender’ o seu programa, como se fossem parâmetros. 

• 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 questão não foi executado.  • Os cartões ‘//’ nas colunas 1 e 2 são obrigatórios em todo o JCL, exceto se houver algum 

parâmetro a ser passado pelo usuário (opção) ao programa. (Veja regra 6) • Existem parâmetros obrigatórios e parâmetros opcionais.  • Com exceção do Account do ccomandoo  Job,  todos os outros parâmetros possuem o 

sinal ‘=’. O parâmetros vêm a esquerda e os sub‐parâmetros á direita do sinal. • Os sub‐parâmetros podem ser 1 ou mais de 1. Quando houver mais de 1 sub‐parâmetro 

deverá estar entre parenteses. • Se o  seu programa  tem opção de processamento  (ex:  listagem  total ou parcial), este 

opção (que na verdade também é um parâmetro), este poderá ser  ‘passado’ após um cartão DD que contenha o comando ‘DD *’. 

• Ao começar numa empresa peça sempre uma cópia da padronização 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 identação no JCL também é muito importante. • Nunca deixe de  inserir  comentário  sucinto  sobre  a  finalidade do programa que  você 

está passando para a produção. • Para inserir um comentário, basta colocar ‘//*’ nas colunas 1 a 3. • Quando  o  comando  não  cabe  na mesma  linha,  deve‐se  colocar  uma  vírgula  após  o 

último parâmetro e continuar na linha de baixo, sempre começando com ‘//’ mas sem cardname. 

 OUTROS PARÂMETROS:    Para se  forçar a  leitura de um arquivo num determinado dispositivo, como por exemplo uma fita vinda de cliente externo que não consta no catálogo, ou um arquivo que está na VTOC de um disco mas não no catálogo, usamos VOL=SER=  Modelo: //ENTRADA   DD DSN=GP.GPALU99.ALUNOS,DISP=SHR,VOL=SER=R00134  

Quando  não  queremos  catalogar  um  arquivo  e  usar  um  arquivo  temporário,  usamos  no DSNAME  o  simbolo  ‘&&’  antes  do  nome.  O  arquivo  será  deletado,  logo  após  a  execução.  Não  se recomenda esta utilização. Ex.:   

Page 25: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 24 

Modelo:   

  //SAIDA03   DD  DSN=&&CADSAI,DISP=(NEW,PASS),   //          UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE),   //          DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0)

  IF/THEN/ELSE/ENDIF  Comando IF (implementado a partir do OS/390 ou MVS/ESA v4);  Permite a construção de expressões relacionais para teste de condição em um JOB;  Oferece alternativa de fácil compreensão para o uso do COND;  Sintaxe:  //nome  IF   condição THEN       step ou steps a executar se a condição for verdadeira //nome [ELSE        step ou steps a executar se a condição for falsa] //nome  ENDIF  expressão relacional 1           

GT  LT  NG  NL  EQ  NE  GE  LE 

    valor 

  [AND] 

 [OR] 

   expressão 2 ... expressão 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                             

Page 26: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 25 

 Outros exemplos:  IF com ELSE – executará PASSO4 se algum step anterior terminou com RC 0 ou cancelou, senão executará PASSO5  

  //IF001    IF  RC > 0 OR ABEND THEN   //*                                                                //PASSO4   EXEC PGM=IEBGENER                                       //SYSIN    DD DUMMY                                                //SYSPRINT DD SYSOUT=*                                             //SYSUT1   DD DSN=GP.GPAE99.PDS(DADOS),DISP=SHR      //SYSUT2   DD SYSOUT=*                                             //*                                                                //IF001    ELSE   //*                                                                      //PASSO5   EXEC PGM=IEBGENER                                             //SYSIN    DD DUMMY                                                      //SYSPRINT DD SYSOUT=*                                                   //SYSUT1   DD DSN=GP.GPAE99.FONTES(DADOS),DISP=SHR         //SYSUT2   DD SYSOUT=*                                                   //*                                                                      //IF001    ENDIF                                                      

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

  //IF001    IF  (RC > 0 OR ABEND ) THEN   //*                                                                //PASSO4   EXEC PGM=IEBGENER                                       //SYSIN    DD DUMMY                                                //SYSPRINT DD SYSOUT=*                                             //SYSUT1   DD DSN=GP.GPAE99.PDS(DADOS),DISP=SHR      //SYSUT2   DD SYSOUT=*                                             //*                                                                //IF002       IF PASSO4.RC = 0   //*                                                                      //PASSO5   EXEC PGM=IEBGENER                                             //SYSIN    DD DUMMY                                                      //SYSPRINT DD SYSOUT=*                                                   //SYSUT1   DD DSN=GP.GPAE99.FONTES(DADOS),DISP=SHR         //SYSUT2   DD SYSOUT=*                                                   //*                                                                      //IF002       ENDIF                                                         //IF001    ENDIF                                                      

 

Page 27: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 26 

 UTILITÁRIOS  Programas fornecidos junto com o sistema operacional ou adquirido no mercado para executar tarefas comuns a todas instalações.  Comandos de controle dos utilitários ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 1234567890123456789012345678901234567890123456789012345678901234567890123 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 

• Coluna 1 ‐ A coluna 1 precisa estar em branco se um label não é codificado. • Coluna 16 – operação e continuação.A continuação de um comando precisa começar na coluna 

16 • Coluna 72 ‐ Codifique um caracter não 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, SÃO 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   //VKSDS1 DD DSN=DSVAABVS.LSG.A889.ALBERTO,DISP=(OLD,DELETE),   //             SPACE=(CYL,(10,10)),DCB=(LRECL=100,RECFM=F)

          

Page 28: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 27 

     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 validação, 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 submissão responda:  

1. Qual o número do JOB? ________________ 

2. Para que classe de entrada o JOB foi direcionado? _____ 

3. Para que classe de saída o JOB foi direcionado? _______ 

4. O JOB executou normalmente? _______ 

5. Vá a classe de saída indicada no parâmetro MSGCLASS (via SDSF) e veja o resultado execução. 

O que aconteceu com o JOB? ____________________________________________ 

6. Por que as mensagens sobre a execução não estão na classe indicada do parâmetro 

MSGCLASS? ________________ 

7. Altere parâmetro MSGLEVEL para MSGLEVEL=1 e envie o JCL para execução novamente. 

8. Veja os diversos erros que ocorreram. Tente compreender a mensagem de erro, corrija os 

problemas de codificação apresentados e execute o JCL novamente. Refaça essa operação até 

não existirem mais erros de JCL. O JOB executou? O que ocorreu? 

______________________________ 

 Exercício ‐ Parâmetro COND, comandos DD e utilitários 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 execução para classe X (exibir sempre todos os níveis de mensagens); Notificar o usuário do TSO sobre o termino da execução.  

• PASSO1   

Exercícios de fixação 

Page 29: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 28 

 Utilizando o IEFBR14 alocar um arquivo seqüencial, com registros fixos blocados de 120 posições, reservando 2 trilhas de espaço primário, 1 trilhas de espaço secundário. 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 não 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 conteúdo do arquivo criado no PASSO2   Exercício de fixação – comando IF  Criar como JOB03 uma cópia do JOB02 e substituir o uso do COND pelo comando IF.  Salvar e testar o novo JOB, garantindo que o resultado da execução continuará sendo o mesmo obtido com o parâmetro COND.                         

Page 30: Mainframe Cobol

Curso: Desenvolvedor Mainframe Sistema Operacional/Lógica de Programação/Cobol/CICS/DB2

Módulo: Introdução ao Sistema Operacional + TSO + JCL

www.gpritreinamento.com.br ‐ (11) 3227‐2261         Página: 29 

    

   

1. De que forma identificamos em um script de JCL se a linha/cartão é um comando, comentário ou continuação de comando. 

  

2. Como dentro do comando “EXEC” identificamos se o mesmo executa uma procedure,programa ou utilitário? 

  

3. Qual a relação entre um programa Cobol e o comando “DD”?  

  

4. Que comando deve preceder os dados de entrada codificados dentro do SCRIPT de JCL? 

   

5. Como direcionar a saída de um dispositivo para a SYSOUT?   

 6. Os dados da SYSIN devem ser codificados a partir de qual coluna e se os 

dados que constituem um registro somarem 120 caracteres, como proceder? 

         

Questionário