finalidade do jcl

14
JCL Direitos Autorais ISP Consultoria www.escoladeprogramadores.com.br 1 Finalidade do JCL Para que um programa seja executado no mainframe é necessário escrever um JOB (serviço) utilizando a JCL Job Control Language (Linguagem de Controle de Serviços). O JOB é submetido à execução e encaminhado ao JES Job Entry Subsystem (Subsistema de Entrada de Serviços), que atribui um número ao JOB (Job Id) e faz uma análise sintática do JCL. Se tudo estiver correto, o JES orienta o Sistema Operacional na execução do serviço. Quando o serviço é encerrado, um código de retorno é informado ( MAXCC Maximum Condition Code) e um conjunto de informações é organizado em arquivos e disponibilizado no SPOOL (Simultaneous Peripheral Operations Online), com o resultado do processamento, para posterior consulta. Abaixo temos os valores de MAXCC 16 terminating messages 12 severe messages 08 error messages 04 warning messages 00 informational messages / success Elementos de JCL Abaixo temos um exemplo de JOB para executar um programa que lê e grava um arquivo: 1 2 3 4 5 6 7 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 //ALUNOXXX JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=&SYSUID,TIME=(0,20) //***************************************************************** //STEP1 EXEC PGM=PROGCLI //STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR //ESTOQUE DD DSN=GR.ALUNOXXX.ESTOQUE,DISP=SHR //REPOSIC DD DSN=GR.ALUNOXXX.REPOSIC,DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA, // DCB=(LRECL=20,RECFM=FB,DSORG=PS,BLKSIZE=0) Uma régua foi colocada no início do JOB para melhor identificar as colunas. Uma linha na linguagem JCL começa com // nas duas primeiras colunas. Existem 3 tipos de linhas principais básicas, também chamados de cartões, pois o JCL remonta à época em que se usavam cartões perfurados, conforme mostra a figura a seguir: JOB especifica os parâmetros de execução do serviço EXEC especifica o programa que será executado DD especifica os arquivos que serão lidos ou gravados e seus parâmetros. No exemplo acima, o JOB executa o programa PROGCLI que lê o arquivo ESTOQUE e grava o arquivo REPOSIC.

Upload: others

Post on 25-Jul-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

1

Finalidade do JCL

Para que um programa seja executado no mainframe é necessário escrever um JOB

(serviço) utilizando a JCL – Job Control Language (Linguagem de Controle de Serviços). O

JOB é submetido à execução e encaminhado ao JES – Job Entry Subsystem (Subsistema de

Entrada de Serviços), que atribui um número ao JOB (Job Id) e faz uma análise sintática do

JCL. Se tudo estiver correto, o JES orienta o Sistema Operacional na execução do serviço.

Quando o serviço é encerrado, um código de retorno é informado (MAXCC – Maximum

Condition Code) e um conjunto de informações é organizado em arquivos e disponibilizado no

SPOOL (Simultaneous Peripheral Operations Online), com o resultado do processamento, para

posterior consulta. Abaixo temos os valores de MAXCC

16 terminating messages

12 severe messages

08 error messages

04 warning messages

00 informational messages / success

Elementos de JCL Abaixo temos um exemplo de JOB para executar um programa que lê e grava um

arquivo:

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//ALUNOXXX JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=&SYSUID,TIME=(0,20)

//*****************************************************************

//STEP1 EXEC PGM=PROGCLI

//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR

//ESTOQUE DD DSN=GR.ALUNOXXX.ESTOQUE,DISP=SHR

//REPOSIC DD DSN=GR.ALUNOXXX.REPOSIC,DISP=(NEW,CATLG,DELETE),

// SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA,

// DCB=(LRECL=20,RECFM=FB,DSORG=PS,BLKSIZE=0)

Uma régua foi colocada no início do JOB para melhor identificar as colunas. Uma linha na linguagem JCL começa com // nas duas primeiras colunas. Existem 3 tipos de linhas principais básicas, também chamados de cartões, pois o JCL

remonta à época em que se usavam cartões perfurados, conforme mostra a figura a seguir:

JOB especifica os parâmetros de execução do serviço

EXEC especifica o programa que será executado

DD especifica os arquivos que serão lidos ou gravados e seus parâmetros.

No exemplo acima, o JOB executa o programa PROGCLI que lê o arquivo ESTOQUE

e grava o arquivo REPOSIC.

Page 2: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

2

operando.

Estrutura básica de um job

Um JOB tem a seguinte disposição dos cartões JOB, EXEC e DD: 1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//XXXXXXXX JOB XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX EXEC XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX EXEC XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX EXEC XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Em um JOB temos cartão JOB, de 1 a 255 cartões EXEC e de 1 a 1635 cartões DD

para cada cartão EXEC.

Posicionamento de um job

Podemos dividir uma linha da JCL em quatro partes:

Colunas Conteúdo Observação 01 e 02 // obrigatório, menos na entrada de dados 03 a 10 nome do cartão pode ser um JOBNAME, STEPNAME ou DDNAME 12 a 15 operador tipo do cartão, pode ser JOB, EXEC ou DD 16 a 72 operando parâmetros do cartão, separados por vírgula e sem

espaço. Um espaço em branco após um operando começa um comentário.

Regras para a codificação de um JOB:

a) É necessário um espaço em branco entre o nome do cartão, o operador e o

b) Toda linha JCL começa com // nas colunas 1 e 2, exceto quando vai se inserir dados via SYSIN ou INPUT STREAM.

c) Um comentário começa com //* nas colunas de 1 a 3.

d) Um JOB sempre começa por um cartão JOB. Isso significa que a primeira linha não pode ser comentário.

e) Um JOB é composto de pelo menos um programa. Este programa pode ser um utilitário do Sistema Operacional (SORT, IDCAMS, etc), um programa desenvolvido pelo programador ou um procedimento catalogado (PROC).

f) Cada cartão EXEC é chamado STEP e sempre executa um utilitário, programa, ou PROC.

g) Cada cartão EXEC possui cartões DD que indicam os arquivos necessários para o funcionamento do programa, utilitário ou PROC.

h) Não confundir JCL ERROR com ABEND. Um JCL ERROR é um erro de sintaxe ou indisponibilidade de recursos e o programa, utilitário ou PROC não é executado. Um ABEND é uma falha no programa que, em alguns casos, pode até mesmo ser causado por indisponibilidade de recursos do sistema, tais como disco (DASD) ou memória.

Não invente nomes para o JOBNAME, STEPNAME ou DDNAME. Use o padrão da empresa em que estiver trabalhando.

Page 3: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

3

O cartão job

Formato 1 1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//ALUNOXXX JOB ’ACCOUNT’,MSGCLASS=X,CLASS=C,NOTIFY=&SYSUID,TIME=(0,20)

Formato 2 1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//ALUNOXXX JOB ’ACCOUNT’,

// MSGCLASS=X,

// CLASS=C,

// NOTIFY=&SYSUID,

// TIME=(0,20)

ALUNOXXX é o JOBNAME, nome do JOB. Os seis primeiros caracteres deve ser

seu UserID ou um nome padronizado, estabelecido pela área de

produção do CPD. O JOBNAME pode ter de 1 a 8 caracteres de

tamanho e deve começar por um caractere alfabético na coluna 3.

JOB Nome do cartão. Obrigatório. Deve ter um espaço em branco antes e

outro depois. Deve começar na coluna 12.

‘ACCOUNT’ Informações de contabilização. Este parâmetro é utilizado para indicar

de quem será cobrado o serviço, em outras palavras, o tempo gasto

pelo mainframe. Deve ser codificado entre apóstrofes. Cada empresa

utiliza um padrão.

CLASS Define a classe que será submetida na fila de JOBS. O sinal de igual

(=) não pode ter espaço em branco antes ou depois. Pode- se usar

letras de A até Z e dígitos de 0 a 9.

MSGCLASS Define a classe de SYSOUT (saída) onde serão gerados todos os

arquivos de log durante o tempo que o JOB permanecer no sistema.

Pode-se usar letras de A até Z e dígitos de 0 a 9.

NOTIFY Emite uma notificação com o MAXCC (Maximum Condition Code) do

JOB executado para o usuário indicado. Pode-se usar &SYSUID, para

utilizar o usuário logado no TSO.

TIME Tempo de CPU para executar o JOB. Não é o tempo corrido, mas sim o tempo que a CPU se dedica ao JOB, visto que ele compartilha seu tempo com todos os JOBs em execução no Sistema Operacional. Não inclui tempo de espera nas operações de I-O (OPEN, CLOSE, READ, WRITE, etc). O primeiro valor é minutos (de 0 a 1440) e o segundo é segundos (de 1 a 59). Codificando TIME=1440 ou TIME=NOLIMIT, dará ao JOB ou STEP uma quantidade de tempo ilimitada. Para permitir que o JOB ou STEP use a quantidade máxima de tempo, codifique TIME=MAXIMUM, que permite ao JOB ou STEP executar por 357912 minutos (aproximadamente 248 dias).

Page 4: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

4

Outros parâmetros do JOB não obrigatórios, mas que podem aparecer nas empresas que usam mainframe são:

PRTY Define a prioridade do JOB na fila de execução. PRTY=n. Quanto

menor o número, maior a prioridade. n varia entre 0 e 15.

REGION Aloca espaço em memória. Equivale para todos os STEPs do JOB. O valor default (padrão) é 512Kbytes, outros valores devem ser múltiplos de 512Kbytes. Exemplos: REGION=1024K, REGION=2M. Se REGION é codificada com 0K ou 0M, todo espaço disponível é alocado ao job.

MSGLEVEL Especifica o nível de mensagens do sistema que se deseja imprimir. Sua Sintaxe é: MSGLEVEL=(A,B), onde A pode ser 0, 1 ou 2 e B pode ser 0 ou 1. O valor default é MSGLEVEL=(1,1). O parâmetro A corresponde a informações do JCL e o B corresponde a informações de alocações. Os possíveis valores são:

Sub-parâmetro “A”:

0 = imprime apenas o cartão JOB;

1 = imprime todos os cartões de JCL alimentados e os intercalados; 2 = imprime todos os cartões de JCL alimentados.

Sub-parâmetro “B”:

0 = NÃO imprime mensagens de alocação ou liberação de arquivo;

1 = imprime todas as mensagens de alocação e liberação de arquivo.

O valor default é:

(1,1) = exibe todos comandos de JCL codificados, expandidos e as alocações

TYPRUN Tipo de Execução. Pode ser:

TYPRUN=HOLD, retém o JOB na fila de entrada, aguardando um comando do operador

TYPRUN=SCAN, verifica o JCL para detectar erros de sintaxe e inibe a execução do JOB.

Page 5: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

5

COND= sim

(0,NE,PASSO2)

não

PASSO03

PASSO2

O cartão exec

Formato 1

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//PASSO03 EXEC PGM=ALUNOXXX,COND=(0,NE,PASSO02)

Formato 2

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//PASSO03 EXEC PGM=ALUNOXXX,

// COND=(0,NE,PASSO02)

PASSO03 É o STEPNAME. Deve iniciar na coluna 3 e ter no máximo 8 caracteres.

Tradicionalmente se utiliza o nome STEPnn, mas pode ser qualquer

nome, desde que comece por um caractere alfabético.

EXEC Nome do cartão. Obrigatório. Deve ter um espaço em branco antes e

outro depois. Deve começar na coluna 12.

PGM Nome do programa ou utilitário a ser executado no step. No exemplo

acima, ALUNOXXX é um programa que deverá estar na biblioteca

padrão do sistema, no nosso caso a GR.GERAL.LOADLIB. 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 carregá-lo para a

memória.

PROC Usado no lugar de PGM, identifica a execução de uma procedure

catalogada no arquivo particionado GR.GERAL.PROCLIB.

COND Condiciona a execução do step atual em função do que ocorreu nos

steps anteriores; não faz sentido usá-lo no primeiro step do JOB. Seu

formato é:

COND=((CODIGO,OPERADOR,STEPNAME),EVEN/ONLY)

onde:

CODIGO qualquer valor numérico entre 0 e 4095

OPERADOR GT = GREATER THAN

GE = GREATER OR EQUAL THAN

LT = LESS THAN LE = LESS OR EQUAL THAN EQ = EQUAL

NE = NOT EQUAL

EVEN executa o passo MESMO QUE alguns dos passos anteriores tenham terminado de forma anormal (ABEND) ou emitido um return code diferente de 0.

ONLY executa o passo SOMENTE SE um dos passos

anteriores tenham terminado de forma anormal (ABEND) ou emitido um return code diferente de 0.

Page 6: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

6

Todos os programas ao terminarem, emitem um código de retorno (return code) para o

sistema operacional. Se for 0 (zero) significa que terminou com sucesso. A lógica da codificação do COND é para “pular” o passo (STEP), ou seja, para que o

No exemplo COND=(4,GT,COMPILA), se o step COMPILA terminou com return code maior que 4, o STEP atual não será executado. Para que o STEP seja executado o resultado do COND tem de ser FALSO.

Alguns exemplos de COND=

(0,NE) Pular o step atual somente se os steps anteriores terminaram com return code igual a 0.

(4,LT) Pular o step atual somente se todos os steps anteriores terminaram com return code menores que 4

(4,GT,STEP1) Pular o step atual somente se o step1 terminou com return code maior que 4

(0,EQ,STEP5) Pular o step atual somente se step5 terminou com return code igual a 0

Outros parâmetros do EXEC não obrigatórios, mas que podem aparecer nas empresas que usam mainframe são:

REGION Aloca memória para os steps individualmente. Se esse parâmetro for codificado no cartão JOB, será ignorado no cartão EXEC. Exemplos: REGION=1024K, REGION=2M. Se REGION é codificada com 0K ou 0M, todo espaço disponível é alocado ao step.

TIME Define um limite de tempo de CPU para os steps individualmente. Equivale ao parâmetro TIME do cartão JOB. O parâmetro TIME no cartão JOB não anula o TIME do cartão EXEC. É um acréscimo a ele.

PARM Também conhecido como PARM GO, permite passar dados diretamente para a LINKAGE SECTION do COBOL. É usado em programas parametrizados, onde um parâmetro orienta o processamento. PARM=value. Value é uma string que pode ter de 1 a 100 caracteres de tamanho, delimitado por apóstrofes.

Exemplo:

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//STEP10 EXEC PGM=PROGCLI,PARM=’20081026’

No COBOL, a LINKAGE SECTION deve conter as seguintes variáveis:

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+ --- 8

*----------------------------------------------------------------*

LINKAGE SECTION.

*----------------------------------------------------------------*

01 CAMPO-PARAMETRO.

05 CAMPO-TAMANHO PIC S9(4) COMP.

05 CAMPO-DADO PIC X(08).

*----------------------------------------------------------------*

PROCEDURE DIVISION USING CAMPO-PARAMETRO.

*----------------------------------------------------------------*

A primeira variável contém o comprimento do parâmetro, devendo sempre ser PIC S9(04) COMP e a segunda o dado do parâmetro em si.

STEP não seja executado.

Page 7: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

7

Joblib e steplib

Para se executar um programa, o sistema precisa carregar os programas executáveis

(Load Modules) de algum lugar. Em nosso caso, os módulos executáveis ficam na

GR.GERAL.LOADLIB, que é um arquivo particionado e o módulo objeto é um de seus

membros.Logo abaixo do cartão JOB codificamos uma JOBLIB, indicando a biblioteca (Library

ou Load) de onde devem ser carregados os programas executáveis. Ele é válido para todos os

steps. Exemplo:

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//ALUNOXXX JOB ’ACCOUNT’,MSGCLASS=X,CLASS=C,NOTIFY=&SYSUID,TIME=(0,20)

//JOBLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR

O STEPLIB vale apenas para o passo (STEP) onde foi codificado. Se for codificado

uma JOBLIB, ela invalida o STEPLIB. Exemplo:

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//ALUNOXXX JOB ’ACCOUNT’,MSGCLASS=X,CLASS=C,NOTIFY=&SYSUID,TIME=(0,20)

//PASSO01 EXEC PGM=PROGCLI

//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR

Page 8: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

8

O cartão DD Formato 1

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//CLIENTES DD DSN=GR.ALUNOXXX.CLIENTES,DISP=SHR

//SAIDA DD DSN=GR.ALUNOXXX.SAIDA,DISP=(NEW,CATLG,DELETE),

// SPACE=(TRK,(5,2),RLSE),UNIT=SYSALLDA,

// DCB=(DSORG=PS,RECFM=FB,LRECL=57,BLKSIZE=0)

//RELOCOR DD SYSOUT=*

Formato 2

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//CLIENTES DD DSN=GR.ALUNOXXX.CLIENTES,

// DISP=SHR

//SAIDA DD DSN=GR.ALUNOXXX.SAIDA,

// DISP=(NEW,CATLG,DELETE),

// SPACE=(TRK,(5,2),RLSE),

// UNIT=SYSALLDA,

// DCB=(DSORG=PS,RECFM=FB,LRECL=57,BLKSIZE=0)

//RELOCOR DD SYSOUT=*

CLIENTES DDNAME. É o nome do arquivo colocado na frente do ASSIGN TO no programa COBOL.

Deve ter de 1 a 8 caracteres de tamanho e começar com um caractere alfabético.

DD Nome do cartão. Obrigatório. Deve ter um espaço em branco antes e outro depois. Deve começar

na coluna 12. DD significa DATA DEFINITION.

DSN DATA SET NAME, denomina o nome do arquivo catalogado. Deve ter de 1 a 44 caracteres de

tamanho, separados por um ponto a cada 8 caracteres no máximo. Os arquivos podem ser temporários

ou não temporários. Todos os arquivos não temporários devem ter nomes de acordo com os padrões da

instalação. Todos os arquivos temporários devem ter nomes de 1 a 8 caracteres de tamanho e

precedidos de &&, se omitido, o sistema atribui um nome aleatório, tornando-o temporário, ou seja,

criado e removido no mesmo JOB

Informa a situação (status) do arquivo no sistema operacional. Exemplos:

DISP=(NEW,CATLG,DELETE) DISP=(OLD,KEEP,KEEP) DISP=(NEW,PASS,DELETE) DISP=SHR

O primeiro sub-parâmetro é o status do arquivo:

SHR arquivo já existe e pode ser lido por outro programa.

OLD arquivo já existe e é de uso exclusivo do programa.

NEW arquivo é novo e será criado neste step.

MOD Se arquivo não existe, ele será criado. Se já existe, é de uso exclusivo e será acrescido

de mais registros.

Page 9: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

9

O segundo sub-parâmetro indica a ação a ser tomada em caso de término normal do step:

CATLG Catalogar o arquivo. Obviamente que esta opção deve estar sempre acompanhada de NEW no primeiro sub-parâmetro. Porque se o arquivo estiver sendo lido (OLD) é porque já está catalogado.

UNCATLG Tira o arquivo do catalogo, mas não o apaga. Evite usar.

DELETE Apaga o arquivo.

KEEP Mantém o arquivo do que jeito que estava antes.

PASS indica que o arquivo é temporário e será passado aos steps subsequentes.

O terceiro sub-parâmetro indica a ação a ser tomada em caso de término anormal do step. Quando não informado, assume o valor do segundo sub-parâmetro:

CATLG Catalogar o arquivo. Obviamente que esta opção deve estar sempre acompanhada de NEW no primeiro sub-parâmetro. Porque se o arquivo estiver sendo lido (OLD) é porque já está catalogado.

UNCATLG Tira o arquivo do catalogo, mas não o apaga. Evite usar.

DELETE Apaga o arquivo.

KEEP Mantém o arquivo do jeito que estava antes.

Se o arquivo é de entrada (OLD ou SHR) não precisa especificar demais parâmetros, pois

naturalmente já está catalogado e o sistema saberá encontrá-lo. Se for de saída você deverá

usar os demais parâmetros do exemplo SAIDA.

Exemplos válidos:

DISP=(NEW,PASS,DELETE): o arquivo é criado neste step e passado aos demais somente se o programa der return code 0. Se o programa ABENDar, o arquivo será excluído.

DISP=(NEW,PASS): o arquivo é criado neste step e passado aos demais em qualquer condição de termino.

DISP=(OLD,PASS): o arquivo é lido neste step e passado aos demais em qualquer condição de termino.

DISP=SHR: o arquivo é lido neste step, podendo ser lido por outros programas de outros Jobs, pois o arquivo é de uso compartilhado (shared).

Exemplos inválidos:

DISP=(SHR,CATLG,DELETE): Como o arquivo não é novo (SHR) ele já está catalogado. Não é possível recatalogá-lo.

DISP=(NEW,KEEP,DELETE): Como o arquivo é novo (NEW) não é possível manter (KEEP) o arquivo como estava antes.

Page 10: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

10

Default:

Se você colocar apenas DISP=SHR o sistema assume (SHR,KEEP,KEEP).

SPACE Especifica o espaço que o sistema deve alocar para o arquivo novo que está sendo gravado em

disco. Se não houver o espaço solicitado o JOB será cancelado. O formato geral é:

SPACE=(TRK,(PRIM,SEC,DIR),RLSE,CONTIG,ROUND)

TRK espaço alocado em trilhas (47.476 bytes no disco modelo 3380 ou 56.664 bytes no modelo 3390).

Também pode ser CYL, espaço alocado em cilindros (712.140 bytes no modelo 3380 ou 849.960 no

modelo 3390) ou um número que indica o tamanho de um bloco de registros. Observe que 1 CYL = 15

TRK.

PRIM = Quantidade primária de alocação.

SEC = Quantidade secundária de alocação, também conhecida como extends.

DIR = Quantidade em unidades de blocos de 256 bytes (pouco usado).

RLSE = Libera o espaço não utilizado.

CONTIG = Solicita que o espaço primário seja alocado apenas em trilhas e cilindros contíguos (pouco

usado).

ROUND = Arredonda para número inteiro de cilindros, e aloca em cilindros, quando o espaço solicitado é

em blocos (pouco usado).A alocação do espaço funciona da seguinte forma ((de 1 a 15 * SEC) + PRIM)

Vale notar que todo disco modelo 3390 contém 56.664 bytes por trilha, 15 trilhas por

cilindro e 849.960 bytes por cilindro. O termo trilha (track) e cilindro (cylinder) vem da época

dos discos pré-RAID (redundant array of inexpensive disks), que eram semelhantes a 8

discos de vinil empilhados e com um conjunto de cabeçotes de leitura/gravação que se moviam

sobre a superfície dos discos. Os discos tinham superfície de gravação em ambos os lados.

Das 16 superfícies, uma era usada para informações de controle, o que deixava 15 para os

dados. Uma trilha é a quantidade de dados que podia ser lida de uma superfície em uma volta

do disco, sem precisar mover as cabeças. Um cilindro podia ser lido de todas as 15 superfícies

sem mover as cabeças. Isso é muito importante, já que um cilindro pode ser lido rapidamente,

sem qualquer movimento mecânico. O diagrama abaixo ilustra isso. Os discos modernos usam

armazenamento FBA (Fixed Block Architecture), mas devem emular o formato dos discos

3390, de forma que os termos trilha (track) e cilindros (cylinder) são ainda usados.

Page 11: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

11

VOL=SER= Especifica o número de série do volume (DASD) onde o arquivo (DATA SET) está ou será

localizado.

UNIT Especifica o tipo de dispositivo onde o arquivo será criado. Geralmente disco é SYSDA.

SYSALLDA significa que o sistema pode procurar em todos (ALL) os dispositivos para encontrar um com

espaço suficiente para o arquivo. Para arquivos em fita, usar TAPE.

DCB DATA CONTROL BLOCK. Indica o formato do arquivo a ser gravado. Não é necessário para

arquivos a serem lidos, pois o catálogo já guarda essas informações. A ordem dos sub- parâmetros não

importa. Seus sub-parâmetros são:

ECFM Acrônimo para RECORD FORMAT, é o formato do registro. F para registros de tamanho

fixo, V para registros de tamanho variável, B para registros blocados, A para registros cuja primeira

posição contém caractere ASA para impressora e U para registros de tamanho indefinido. As possíveis

combinações são: F, FB, V, VB, U, FBA e FA.

LRECL Acrônimo para LOGIC RECORD LENGTH, é o tamanho do registro em bytes. Quando você

especifica V para o parâmetro RECFM, o valor informado deve ser o tamanho do maior registro no

arquivo mais 4 bytes. Esses 4 bytes contém o tamanho real de cada registro de comprimento variável no

arquivo.

DSORG Acrônimo para DATA SET ORGANIZATION, é aorganização dos registros no arquivo. DA é

acesso direto (disco), PO é particionado (disco), PS é físico sequencial (fita ou cartucho) e IS é indexado

sequencial (disco).

BLKSIZE Acrônimo para BLOCK SIZE, é o tamanho de um bloco de registros. Quando omitido ou

colocando 0 o sistema calcula a blocagem ideal.

BUFNO Acrônimo para BUFFERS NUMBER é a quantidade de buffers. O default é BUFNO=5.

Exemplo:

DCB=(RECFM=FB,LRECL=100,BLKSIZE=6000,DSORG=PS)

SYSOUT Direcionar as saídas para a impressora. Exemplo: //ARQRELAT DD SYSOUT=* fila default (msgclass)

//RELOCORR DD SYSOUT=Z

* INPUT STREAM, serve para passar dados ao programa, através de um

arquivo, via JCL. Os caracteres /* funcionam como delimitadores.

Exemplos:

//ARQDATA DD *

20080901ANTONIO DA SILVA

20080912MARIA MOURA

20080925JOAO PEREIRA

/*

//SYSIN DD *

20080901ANTONIO DA SILVA

20080912MARIA MOURA

20080925JOAO PEREIRA

/*

Page 12: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

12

DUMMY Ou DSN=NULLFILE, O arquivo recebe o estado de “nulo”. O arquivo não existe. O primeiro

read no arquivo gera file status 10 (EOF). Exemplo:

//ARQENT DD DUMMY

//ARQSAI DD DUMMY,SYSOUT=*,DCB=(LRECL=133)

SYSUDUMP É usado para despejar o conteúdo de vários registradores, variáveis e arquivos acessados

no exato momento de um termino anormal (ABEND), dentro de um arquivo ou do SPOOL. O despejo é

em hexadecimal. Exemplo:

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//SYSUDUMP DD DSN=TEST.PROD.LIB

ou

//SYSUDUMP DD SYSOUT=*

SYSABEND É usado para despejar o conteúdo de vários registradores, variáveis e

arquivos acessados e o núcleo, no exato momento de um termino

anormal (ABEND), dentro de um arquivo ou do SPOOL. O despejo é

em hexadecimal. Exemplo:

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//SYSABEND DD DSN=TEST.PROD.LIB

ou

//SYSABEND DD SYSOUT=*

Page 13: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

13

Concatenando arquivos (DATA SETs)

No JCL, nós podemos concatenar diferentes arquivos, informando seus nomes

um após o outro. Todos os arquivos concatenados devem ser do mesmo tipo. Por

exemplo, arquivos particionados PDS (partitioned data set) podem ser concatenados

apenas com outros arquivos particionados. Exemplo:

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//ALUNOXXX JOB ’ACCOUNT’,MSGCLASS=X,CLASS=C,NOTIFY=&SYSUID,TIME=(0,20)

//JOBLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR

//PASSO01 EXEC PGM=&SYSUID02

//CLIENTES DD DSN=GR.ALUNOXXX.CLIENTES1

// DSN=GR.ALUNOXXX.CLIENTES2

// DSN=GR.ALUNOXXX.CLIENTES3

No programa, nós vamos lê-los como um único arquivo. Os limites para concatenação

de arquivos pelo sistema operacional são:

Máximo de 255 arquivos sequenciais.

Máximo de 16 arquivos particionados.

Fluxo de ações de um job

PROGRAMADOR TSO JOB ENTRY

SUBSYSTEM

SISTEMA

OPERACIONAL

P.2 SUBB JOBID

SD ST ? S

MAXCC

JES agrupa as

saídas e

informações

sobre o JOB

Submete o

JCL

Digita o

JCL

Determina a

Tarefa

Usuário

consulta

a saída

S.O. executa o

serviço

JES

interpreta o

JCL e passa

p/ S.O.

Page 14: Finalidade do JCL

JCL

Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br

14

Classificação externa de um arquivo

O SORT é o utilitário para classificar (ordenar) arquivos. Abaixo temos um exemplo de classificação de um cadastro de clientes, onde as 4 primeiras posições é o código do cliente, que será usado como critério de classificação em ordem crescente.

1 2 3 4 5 6 7 8

12345678901234567890123456789012345678901234567890123456789012345678901234567890

//STEPNN EXEC PGM=SORT

//SYSPRINT DD SYSOUT=*

//SORTIN DD DSN=GR.ALUNOXX.CADCLI,DISP=SHR

//SORTOUT DD DSN=GR. ALUNOXX.CADCLIS,DISP=(NEW,CATLG,DELETE),

// SPACE=(TRK,(5,2),RLSE),UNIT=SYSALLDA,

// DCB=(DSORG=PS,RECFM=FB,LRECL=57,BLKSIZE=0)

//SYSIN DD *

SORT FIELDS=(01,04,CH,A)

//SYSOUT DD SYSOUT=*

SORTIN indica o arquivo que será classificado (entrada)

SORTOUT indica o arquivo que será o resultado da classificação (saída)

SORT FIELDS campos no registro de entrada que serão referencias para a classificação, os parâmetros auxiliares que compõem este parâmetro são (PI,PF,TD,TO), onde:

PI posição inicial do campo

PF posição final do campo

TD tipo do dado, podendo ser

BI binário

PK decimal compactado

ZD decimal zonado

CH caractere

TO tipo de ordenação, podendo ser

A ascendente (crescente)

D descendente (decrescente)