Você está na página 1de 39

INTRODUÇÃO

O objetivo desse curso básico de JCL (Job Control Language) é equilibrar o


conhecimento dessa ferramenta dentre os colaboradores que atuam na área de
controle mainframe da empresa OI, nas atividades de processamento de dados.
Com isso procurar disseminar informações a que venha agregar valores para o
desempenho de nossas atividades.
O JCL que veremos são os comandos que empregamos em nosso ambiente
de trabalho. Faremos exposição de exemplos dos processos que controlamos em
nossas atividades diárias, assim como debateremos pontos de atenção.
A metodologia empregada será de aulas expositivas que propicie uma
interação entre todos os envolvidos nesse processo de aprendizagem.
Está previsto uma carga de dez horas divididas em duas horas por dia
durante uma semana. Para facilitar a presença de todos, foi determinado que esses
encontros fossem realizados nos horários das 12h00min às 14h00min ou das
18h00min às 20h00min, portanto, fica a critério de cada um escolher o melhor
horário, aquele que principalmente não choque com o seu horário de trabalho.
Aproveitando esse momento privilegiado de troca do conhecimento,
abordaremos também os assuntos: Abertura automática de incidentes por
cancelamento de processo e os ambientes de Nono Digito e Homologação, como
funciona o envio de arquivos para o diretório corporativo, os CONTROL’s D e O e o
Pelicano.

2. JCL - SUA FINALIDADE

O JCL (Job Control Language) surgiu na década de 1960 foi introduzido nos
sistemas /360. Continua em utilização nas plataformas mainframe IBM para os
processamentos eletrônicos de dados (informações).
JCL é uma linguagem que possibilita que um programa se comunique com o
computador de grande porte mainframe da IBM.

Quando um programa é submetido para execução no sistema, ele passa a


ser chamado de JOB, e deve ser construído com a utilização da linguagem de
JCL. É no JOB que estão às informações necessárias para que os dados sejam
processados.
Uma unidade de serviço (job) submetido ao sistema. Consiste de um ou mais
steps. Um JOB é formado por três comandos (“cartões”) principais:

• Comando JOB - Informa, entre outras coisas, o nome do job.


• Comando EXEC - Informa, entre outras coisas, o nome do programa que será
executado, e é o primeiro cartão de uma procedure.
• Comando DD - Informa, entre outras coisas, o nome dos data sets
(arquivos) que serão lidos ou gravados o qual descreve um arquivo a ser
utilizado no programa (step)

Em um job podemos ter vários cartões EXEC, vários cartões DD, porém
apenas um cartão JOB.

Outros comandos do JCL:

• Delimitador ( /*) indica o fim do arquivo; marca o fim dos dados.


• Comentários (//*) são codificados entre as colunas 4 a 80, com
objetivo de documentar o JCL.

2
• Nulo (//) Usado para indicar o final de cartões de um JCL.
• Comando PROC inicia um procedimento (procedure) catalogado ou
do fluxo de entrada, e indica valores defaults para os parâmetros
simbólicos.
• Comando PEND indica o final de um procedimento de fluxo de
entrada.

Na prática, geralmente são usados apenas os comandos JOB, EXEC, DD e


Comentário. Os detalhes e a codificação do JCL podem até ser complicados, porém
os conceitos gerais são simples. Além disso, utilizamos apenas um pequeno
subconjunto de parâmetros, cerca de 10%, para 90% dos serviços que queremos
utilizar. (BARBARÁ, 2011, p. 59)

O JCL fornece as informações:

• Identificação do início de uma descrição de serviço;


• Ordem em que os programas devem ser executados;
• Nome do programa a executar em cada etapa;
• Informações sobre cada programa;
• Quantidade de memória necessária;
• Parâmetros de execução;
• Informação sobre os arquivos que cada programa necessita.

3. O Cartão JOB

Geralmente as empresas que precisam utilizar a linguagem do JCL,


customizam a sua codificação, ou seja, o cartão pode mudar em cada instalação.
Vejamos um JCL codificado para o cartão JOB.

3
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--

000001 //BTPOP000 JOB (243,2,15),CONTROLM,REGION=0M,TIME=3,

000002 // MSGCLASS=0,CLASS=5,PRTY=13,NOTIFY=TR76124,

000003 // MSGLEVEL=(1,1),TYPRUN=HOLD,COND=((3,LT),(12,GT)),

000004 // ADDRSPC=VIRT,BYTES=(500,CANCEL),CARDS=(500,DUMP),

000005 // PAGES=(400,WARNING),LINES=(300,CANCEL),

000006 //
PASSWORD=ABCDE,USER=MYNAME,RESTART=PROCNAME.STEPNAME

000007 //

Em nossa instalação o nosso cartão JOB ficaria assim, somente a linha 6:

=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--

000001 //* %%GLOBAL GERAL

000002 //*

000003 //* %%INCLIB %%PRO#GERAL %%INCMEM FTP001X0

000004 //*

000005 //* %%GLOBAL %%UF%%.GLB%%JP

000006 //%%UF.%%JS.%%JP.%%JN JOB (),CONTROLM,REGION=0M,TIME=%%JT

000007 //*

Vamos fazer uma simulação, e obteremos o nosso cartão JOB:

//DFFTP001 JOB (),CONTROLM,REGION=0M,TIME=1,

// MSGCLASS=0,

// MSGLEVEL=(1,1)

3.1 Regras para o cartão JOB

Estudaremos o nosso cartão JOB. No JCL existe uma regra geral onde os
comandos do JCL devem começar com os caracteres // nas colunas 1 e 2, exceto
para o comando delimitador.

4
O nome do JOB (jobname) deve sempre conter de 1 a 8 caracteres
alfanuméricos e nacionais (@, $ #) sendo que o primeiro caractere deve ser
alfabético ou nacional e identifica o JOB para que outros comandos de JCL ou o
sistema operacional.

Quando um JOB é submetido, o sistema operacional atribui automaticamente


um número (job number) ao mesmo o que permite que vários outros JOB’s com o
mesmo nome sejam submetidos e assim permiti que processe um de cada vez.

Vejamos alguns nomes de JOB o jobname, marque C para certo e E para errado:

//GBD406 ( ) //6ABC ( ) //A8563 ( ) //B76#4 ( )


//BTPOPA346 ( ) // DFFTP001 ( ) //BTARP#$@ ( )

Muitas instalações indicam o nome do JOB a ser usado, e a nossa aqui não
foge a regra, assim sendo, o nosso nome de JOB é definido com oito caracteres
alfanumérico ou nacional sendo o primeiro um caractere alfa. Caso a regra não seja
empregada o JOB nem inicia.

Então já temos o nosso cartão jobname //UFSIT000 que deverá após da


oitava posição ser precedido de um espaço em branco para que venha o comando
JOB.

Já temos //UFSIT000 JOB e após outro espaço vem o Accounting são os


parênteses () que em muitas instalações podem conter informações dentro deles
num total de 143 caracteres que servem para entre outras coisas computar gastos
com processamento. Depois do account vem o nome do programador. O nome deve
conter no máximo de 20 caracteres, caso tenha caracteres especiais deverá estar
entre apóstrofos. O nosso aqui para produção é o CONTROLM, default.

Precisamos definir um TIME e uma REGION para o nosso cartão JOB.


Vamos lá. O parâmetro TIME especifica o limite de tempo de processador que o
JOB pode utilizar. Quando o tempo máximo é atingido, o JOB termina, ou seja, é
cancelado com o abend S322. A empresa 4Bears trabalha para adequar esse tempo
de processamento.

5
Alguns valores de TIME que podem ser utilizados:

• TIME=1439

• TIME=NOLIMIT Indica que não há limite de tempo.

• TIME= (1,30) indica um minuto e trinta segundos.

O parâmetro REGION especifica a quantidade de memória em (Kilobytes ou


Megabytes) que será alocada para o JOB utilizar no seu processamento.

Geralmente utiliza-se REGION=0M para definir que não há limite de memória


para o JOB. Esse limite é definido internamente pelo sistema operacional.

O nosso cartão JOB também utiliza mais dois parâmetros os MSGCLASS e o


MSGLEVEL.

O parâmetro MSGCLASS especifica a classe de saída das mensagens do


escalonador de JOB’s. As classes de saída podem ser representadas por um único
caractere alfanumérico e essa definição é customizada pelo suporte técnico da
instalação. O nosso MSGCLASS está definido com número zero.

Essas mensagens podem ser observadas nas execuções dos JOB’s onde
encontramos // nas colunas 1 e 2 são os comandos do JCL, já nas colunas 1 a 3
encontramos *** como sendo dos comentários. Os comandos das procedures
aparecem como XX nas colunas 1 e 2 já os overrides mostram +/ nas colunas 1 e 2.
(BROWN, 1990, p.50). E nas saídas dos cartões SYSOUT’s, quando codificados no
JCL dos cartões DD.

O parâmetro MSGLEVEL também está definido com as opções (1,1). Isso


representa que deve ser mostrado no JOB executado as informações (jcl,alocações)
onde:

Jcl

0 - Imprime apenas o comando JOB.


1 - Imprime todo o JCL mais a procedure.
2 - Imprime somente os comandos de JCL
Alocação

6
0 - Somente as mensagens do JCL.
1 - Todas as mensagens de JCL e do sistema operacional.

Vamos entender como o nosso cartão JOB é montado, observem que ele é
parametrizado. Em nossa instalação o cartão JOB ficaria assim.

=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--

000001 //* %%GLOBAL GERAL

000002 //*

000003 //* %%INCLIB %%PRO#GERAL %%INCMEM FTP001X0

000004 //*

000005 //* %%GLOBAL %%UF%%.GLB%%JP

000006 // %%UF.%%JS.%%JP.%%JN JOB ( ),CONTROLM,REGION=0M,TIME=%%JT

000007 //*

Vamos observar:

Observem as informações abaixo e monte o JOB com seu jobname. Todos


devem processar com o TIME=5:

7
//_____________________________________________________________________

//_____________________________________________________________________

//_____________________________________________________________________

//__________________________________________________________________________

8
//_____________________________________________________________________

//___________________________________________________________________________

Os comandos de COND e RESTART não são frequentemente utilizados no


cartão JOB devido ao uso do CONTROLM e de outros recursos, salvo em casos
especiais.

Veremos o emprego do COND no cartão EXEC e com a utilização dos DD’s


especiais IF/THEN/ELSE/ENDIF

9
4. O Cartão EXEC

Cada passo (Step) do JOB começa com um comando EXEC que ou nomeia
um programa a ser executado (compilado, aplicativo, utilitário, etc) ou chama um
procedimento catalogado as procedures. Um procedimento catalogado pode conter
vários passos do JOB. Cada um começa com um comando EXEC que especifica o
programa ser executado. Pode haver até 255 comandos EXEC em cada JOB, cada
um deles com seus respectivos cartões DD que definem os arquivos a serem
usados nos passos (Step’s).

Vejamos as chamadas de Programas da procedure UFFTP001:

10
Aqui temos o EXEC da procedure UFFTP001:

O nome do step os stepnames tem sempre que começar na coluna 3, e deve


ter de 1 a 8 caracteres, onde o primeiro caractere deve ser alfabético ou nacional,
não podendo ser um numérico.
O nome do step não pode conter caracteres especiais nem brancos, é
opcional, mas se for omitido este step não poderá ser referenciado dentro do JOB.
Para que o step seja referenciado dentro do JOB, o nome do step deve ser único.
O cartão EXEC pode ter comandos iguais aos do cartão JOB como os de
TIME e REGION. Eles exercem sua ação somente no step onde são referenciados.
Outros comandos podem ser utilizados. O PARM que tem a finalidade de passar
informações para o programa que é executado no step pode passar até 100
caracteres e esses podem ser separados por vírgulas ou não e devem vir entre
parênteses ou apóstrofos quando forem caracteres especiais. A sua continuação
deve ocorrer após da coluna 71 na linha debaixo a partir da coluna 16.

11
4.1 O comando COND no cartão EXEC

Todos os programas ao terminarem, emitem um código de retorno para o


sistema operacional que vai de 0 a 4095. O parâmetro COND permite que a
execução de um STEP dependa do código de retorno do passo anterior (STEP).

Em caso de erro de JCL o parâmetro COND não é respeitado. A interrupção


ocorre de qualquer forma. Quando o parâmetro COND é omitido os passos são
executados normalmente.

Formato do COND:

COND=(código,operador) Neste formato serão testados todos os códigos de retorno


dos step’s anteriores

COND=(código,operador,stepname)

O Código especifica o número que o sistema irá comparar ao código de retorno de


cada step.

COND=(código, operador,stepname,procstepname)

Para mais de uma procedure em apenas um JOB.

O Operador especifica o tipo de comparação que será feita ao código de retorno de


cada step. Ver tabela abaixo:

Operado Significado
r
GT Maior que (Greater than)
GE Maior ou igual que (Greater than or equal to)
EQ Igual a (Equal to)
NE Diferente (Not equal to)
LT Menor que (Less than)
LE Menor ou igual que (Less than or equal to)
Operadores do Parâmetro COND

Agora vamos observar o esquema apresentado abaixo:

12
Um exemplo:

Vejamos agora outros formatos de parâmetros para o comando COND que


são os: EVEN e ONLY.

13
O parâmetro EVEN especifica que o step onde foi codificado seja executado
mesmo que um step anterior tenha cancelado com erro. COND=EVEN  Executa
sempre.
Já o ONLY especifica que o step onde foi codificado execute se algum step
anterior cancelar (abendar), ou seja, COND=ONLY  Executa somente se um step
anterior abendar.

Vamos treinar:

Faça as amarrações de condições conforme o solicitado.

1 - Todos os step’s devem processar somente com cond=0000

//BTPOP234 JOB (),CONTROLM,TIME=1,REGION=0M,COND=(00,NE)


//*
//STEP0001 EXEC PGM=PROG1,____________
//*
//STEP0002 EXEC PGM=PROG2,____________
//*
//STEP0003 EXEC PGM=PROG3,____________

2 - Step 2 roda somente se step 1 der 4 e o step 3 roda somente se o step 1 der 0.

//BTPOP234 JOB (),CONTROLM,TIME=1,REGION=0M


//*
//STEP0001 EXEC PGM=PROG1,____________
//*
//STEP0002 EXEC PGM=PROG2,COND=(04,NE,STEP0001)
//*
//STEP0003 EXEC PGM=PROG3,COND=(00,NE,STEP0001)

//STEP1 EXEC PGM=TELGENER


//STEP2 EXEC PGM=IEFBR14,COND=(04,NE,STEP1)
//STEP3 EXEC PGM=IEFBR14,COND=(00,NE,STEP1)
-STEP1 04
-STEP2 00
-STEP3 FLUSH

3 - Step 2 roda somente se step 1 der 4 ou 8 e o step 3 so roda se abendar um step.

//BTPOP234 JOB (),CONTROLM,TIME=1,REGION=0M

14
//*
//STEP0001 EXEC PGM=PROG1,____________
//*
//STEP0002 EXEC PGM=PROG2,____________
//*
//STEP0003 EXEC PGM=PROG3,COND=(EVEN)

4 – O step 1 não deve rodar e o step 3 somente roda se der cond maior ou igual 104 no step 2.

//BTPOP234 JOB (),CONTROLM,TIME=1,REGION=0M


//*
//STEP0001 EXEC PGM=PROG1,COND=(01,NE)
//*
//STEP0002 EXEC PGM=PROG2,___103 104 105
//*
//STEP0003 EXEC PGM=PROG3,COND=((103,GE,STEP0002),(105,LE,STEP002))

5 - Step 2 roda somente se step 1 for menor ou igual a 4 e o step 3 roda somente se o step 2
for maior que 8.

//BTPOP234 JOB (),CONTROLM,TIME=1,REGION=0M


//*
//STEP0001 EXEC PGM=PROG1,__0 1 2 3 4 5_________5 < 0 F
//*
//STEP0002 EXEC PGM=PROG2,COND=(05,LE,STEP0001) 7 8 9 10
//*
//STEP0003 EXEC PGM=PROG3,COND=(07,GE,STEP0002)

6 - Step 3 roda somente se step 1 der 4.

//BTPOP234 JOB (),CONTROLM,TIME=1,REGION=0M


//*
//STEP0001 EXEC PGM=PROG1,____________
//*
//STEP0002 EXEC PGM=PROG2,____________
//*
//STEP0003 EXEC PGM=PROG3,COND=(04,NE,STEP0001)

7 - Step 1 roda somente se step 1 der 8. Impossível

//BTPOP234 JOB (),CONTROLM,TIME=1,REGION=0M


//*
//STEP0001 EXEC PGM=PROG1,____________

5. O Cartão DD

15
O cartão DD (Definição de Dados) deve ser incluído após o cartão EXEC
com as especificações dos arquivos que são utilizados quando na execução de um
JOB. Nele são fornecidas as unidades de entrada ou saída, um volume especifico a
ser utilizado, as características dos arquivos e a sua disposição dentre outras
informações que devem ser definidas no comando DD do JCL.
Os seus ddname’s seguem as mesmas regras com relação ao stepname, ou
seja, eles devem ter de um a oito caracteres alfanuméricos ou nacionais, sendo o
primeiro caractere um alfa.

Seu formato:

//ddname DD parâmetros-opcionais

Existem parâmetros opcionais iguais aos:

* (asterisco) serve para indicar os dados vêm logo após o comando DD.

DATA indica que os dados com // nas colunas 1 e 2 virão logo após o comando DD.

DUMMY serve para indicar que o arquivo é nulo.

DYNAM serve para indicar uma alocação dinâmica.

Os parâmetros de palavra-chave podem ser codificados em qualquer


ordem, depois do parâmetro posicional.

Vejamos alguns comandos DD:

16
COMANDO DESCRIÇÃ0 DOS PARAMETROS DE PALAVRA-CHAVE
ACCODE Solicita um código de acesso para fitas ANSI
AFF Solicita separação de canal
AMP Fornece informação para arquivos VSAM
BURST Permite o uso de formulários não contínuos em impressora
CHARS Especifica um conjunto de caracteres para a impressora
CHKPT Solicita pontos de controle e fim de volume
COMPACT Compacta os arquivos enviados a uma estação de trabalho
COPIES Solicita cópias de um arquivo de saída
DCB Especifica os parâmetros de bloco de controle de dados
DDNAME Adia a definição de um arquivo
DEST Direciona a saída para um determinado destino
DISP Especifica a disposição do arquivo
DLM Especifica um delimitador alternativo
DSID Fornece a identificação de um arquivo em um disquete modelo 3540
DSN Denomina o arquivo
FCB Especifica formulário de imagem de controle para uma impressora
FLASH Especifica a superposição de formulário na impressora
FREE Libera o dispositivo de E/S quando o arquivo é fechado
HOLD Retém o arquivo de saída em uma fila
LABEL Fornece informação de rótulos e proteção de arquivos
MODIFY Modifica as linhas de impressão na impressora
MSVGP Solicita um periférico MSS (Mass Storage System)
OUTLIM Limita as linhas de saída impressa
OUTPUT Especifica o processamento de saída especial
PROTECT Solicita proteção de arquivos (senhas)
QNAME Dá acesso a mensagens recebidas
SEP Solicita separação de canal
SPACE Solicita o espaço em acesso direto a ser alocado
SPLIT Aloca espaço em um volume de acesso direto a ser sub-alocado
SUBALLOC Subaloca espaço em um volume de acesso direto
SUBSYS Especifica o subsistema a processar o arquivo
SYSOUT Direciona um arquivo por meio do fluxo de saída do sistema
TERM Envia ou recebe um arquivo de um terminal timesharing
UCS Envia um conjunto de caracteres para impressão
UNIT Especifica o dispositivo de E/S
VOL Especifica o volume e oferece informações sobre ele

Embora existam vários parâmetros no comando DD, apenas seis são os


mais usados regularmente em nossa instalação assim como nas demais também.
São eles: (DCB, DISP, DSN, SPACE, UNIT e VOL) (BROWN, 1990, p. 82)

5.1 DSNAME (DSN) o nome do arquivo

17
O parâmetro DSN denomina o nome do arquivo (datasets), e esses
arquivos podem ser temporários ou não temporários. O arquivo temporário quando
nomeado são codificados dois ampersands (&&) antes do nome. Esses arquivos são
criados e removidos durante o processamento do JOB. Já os arquivos não
temporários podem ser salvos e reusados depois que o job termina. Esses arquivos
devem ter no máximo 44 caracteres (incluindo pontos) separados por grupos de até
8 caracteres que formam os high-level qualifier (HLQ) iniciando sempre com um
algarismo alfa. (SOARES, 2010, p.91)

Observe o arquivo temp.

5.2 DISP - disposição do arquivo.

18
O parâmetro DISP deve informar ao Sistema o status do arquivo antes do
início do step e também informar o que fazer com o arquivo ao término do step.
(BARBARA, 2011, p. 82)

Vejamos o formato:

A situação do arquivo no inicio do step pode estar:

• NEW - o arquivo ainda não existe e será criado;


• OLD - o arquivo já existe e não é compartilhado com outro JOB. Se for
especificado na saída e tiver um arquivo já catalogado, o mesmo será
sobreposto. Caso não tenha o processo será cancelado por falta de arquivo.
• SHR - o arquivo já existe e pode ser compartilhados quando estiverem
gravados em disco, ou seja, não compartilham com cartuchos ou fitas.
(arquivos iniciados com V. R. G. F.)
• MOD – para arquivo sequencial já existente, onde pode continuar gravar
informação no final do arquivo.

As situações de término normal e anormal podem estar:

• PASS – passa o arquivo para os steps seguintes do JOB.


• KEEP – mantém o arquivo;
• DELETE – apaga o arquivo;
• CATLG – cataloga o arquivo;
• UNCATLG – descataloga o arquivo.

19
5.3 DCB (DATA CONTROL BLOCK)

O parâmetro DCB é usado durante a execução de um JOB e serve para


especificar as características do arquivo que será catalogado. (BARBARA, 2011,
p.89)

Sua sintaxe:

DCB=(sub-parâmetros[,sub-parâmetro]..)

Vejamos os sub-parâmetros:

• RECFM – Record Format – específica o formato e as características dos


registros em um novo arquivo.

o F – Fixo
o FB – Fixo Blocado
o V – Variável
o VB – Variável Blocado
o U – indefinido

• LRECL – Logical Record Length – especifica o tamanho dos registros. De 1 a


32760.

o Igual ao tamanho do registro para registros de tamanho fixo;


o Igual ao tamanho do maior registro mais os 4 bytes de descrição dos registros;
o Omitido para registros de tamanho indefinido.

20
• BLKSIZE – Block Size – especifica o tamanho, em bytes, de um bloco de
registro. O tamanho máximo é de 32760.

o deve ser um múltiplo do LRECL para registros de tamanho fixo;


o deve ser igual ou superior que o LRECL para registros de tamanho
fixo;
o deve ser igual ou maior que o LRECL para registros de tamanho
variável;
o deve ser o mesmo tamanho que o maior bloco para registros de
tamanho indefinido.

• DSORG – Data Set Organization – especifica a organização do arquivo.

o PS - Seqüencial
o PO - Particionado
o VS - Vsam
o IS - Sequencial Indexado
o DA - Acesso direto
o U - Indefinido

Pode-se usar o recurso de referenciar uma DCB anterior do JCL com a


utilização do parâmetro de referência REFERBACK.

Exemplo:

//SEQE01 DD DSN=BT. POD01.ARQUIVO.DE.TESTE,DISP=SHR


//*
//SEQS01 DD DSN=BT.POD01.ARQUIVO.SAIDA,DISP=(,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(TRK,1),DCB=*.SEQE01

21
5.4 SPACE

O parâmetro SPACE é utilizado para alocar espaço para todos os novos


arquivos em um dispositivo de acesso direto. Espaços em volume de disco podem
ser alocados em unidades de blocos, cilindros, trilhas ou bytes. (BARBARA, 2011,
p.88)

Sintaxe:

SPACE=(CYL,(pri,sec,dir),RLSE,CONTIG,ROUND)
TRK,
blocos,

• TRK – alocação em trilhas


• CYL – alocação de cilindros
• blocos – especifica o tamanho dos blocos, em bytes de 0 a 65535.
• pri – especifica a quantidade primária de trilhas, cilindros ou blocos
que serão alocados.
• sec – especifica a alocação secundária de até 15 extents quando
excede a alocação primária.
• dir – indica a quantidade de blocos de diretório para um arquivo
particionado.
• RLSE – requisita que o espaço alocado para um arquivo de saída
não, mas utilizado deva ser liberado quando o arquivo é fechado.
• CONTIG – requisita que o espaço alocado para o arquivo deve ser
contíguo. Serve apenas para alocação primária.
• ROUND – Quando o primeiro parâmetro especifica o tamanho de
bloco, o ROUND requisita que o espaço alocado para o arquivo deve
ser arredondado para um número inteiro de cilindro.

22
5.5 UNIT

O parâmetro UNIT fornece ao sistema a informação necessária para associar


um dispositivo a um arquivo. (BARBARA, 2011, p.83)
Pode-se utilizar um dispositivo: especifico ou um tipo ou grupo de dispositivo
ou ainda o mesmo dispositivo que vem de outro dataset. Vejamos:

//SYSUT2 DD UNIT=74CB  endereço do dispositivo


//CMWKF01 DD UNIT=3390  modelo do dispositivo
//SEQS04 DD UNIT=SYSDA  grupo do dispositivo

5.6 VOL ou VOLUME

O parâmetro VOL é usado para indicar o volume ou volumes no qual o


arquivo reside ou deverá residir. Com o uso desse parâmetro pode-se requisitar:
(BARBARA, 2011, p.85)

• um volume específico;  VOL=SER=624328 VOL=(,,,2,624329)


• a retenção do volume;
• um volume específico pelo número serial;
• o mesmo volume usado por outro arquivo; ,  VOL=REF=*.STEP1.SEQE02
• o número de volumes requeridos.

Sintaxe:
VOLUME=(PRIVATE,RETAIN,vol-seq-number,volcount)
• PRIVATE – requer um volume específico
• RETAIN – mantém o volume montado na unidade ao término da leitura
• Vol-seq-number – identifica o volume, em um já existente dataset
muitivolume, onde o processamento do dataset deve iniciar.

23
Volcount – especifica o número de volume a ser utilizado, máximo de 255 o default é
5 . Com a codificação do parâmetro VOL=(,,,255) evita-se o abend 838.
• SER – VOLSER. Identificador (ID) do volume ou volumes.
• REF – Identifica ao sistema aonde obter o VOLSER de outro dataset ou de
um comando DD anterior.

6 DDs Especiais

6.1 STEPLIB

Serve para informar a localização do programa definido no cartão EXEC deste


step. O cartão STEPLIB pode ser codificado em qualquer posição, entre os
comandos DD, do step onde se aplica.
Se o sistema não encontrar o programa na STEPLIB, então procura na SYS1.
LINKLIB e nas bibliotecas da LINKLST.

Vejamos o cartão STEPLIB

6.2 JOBLIB

24
Informa a localização de todos os programas definidos nos cartões EXEC de
todos os steps do JOB. O cartão JOBLIB deve ser codificado imediatamente após o
cartão JOB. Esse cartão JOBLIB é opcional.
Se no mesmo JOB são utilizados os cartões JOBLIB e STEPLIB, no step
onde é utilizado o STEPLIB o sistema ignora o JOBLIB, ou seja, o programa vai ser
procurado na STEPLIB e em seguida nas bibliotecas do sistema.

Vejamos o cartão JOBLIB

6.3 SYSIN

Quando se faz necessário passar alguma informação para o programa por


meio de alguma opção, ou vai se informar algum dado digitado para o programa, isto
é feito com a utilização do cartão DD *. Pode-se usar também o SYSIN com a opção
de DUMMY quando não se quer passar nenhuma informação.

Vejamos o SYSIN DD DUMMY e o uso do asterisco.

25
6.4 SYSOUT

A saída do JOB, ou o SYSOUT, é o arquivo que contém o resultado do


processamento. As classes de saída podem ser caracteres alfanuméricos. Um
asterisco indica ao sistema que use como classe de saída a mesma classe do
MSGCLASS do cartão JOB.

26
6.5 IF/THEN/ELSE/ENDIF

Comando IF (surgiu a partir do Sistema /390) 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.

Vejamos as sintaxes:

//ddname IF condição THEN

step ou steps a executar se a condição for verdadeira

//ddname ELSE

step ou steps a executar se a condição for falsa

//ddname ENDIF

Expressões relacionais

NOT ¬NOT
[step.]RC GT > [AND] ou &
[step.]ABEND LT < valor expressão 2 ... expressão n
[step.]RUN EQ = [OR] ou |
NE ¬=
GE >=
LE <=

Exemplo:

27
Outros exemplos:

IF com ELSE

28
Vejamos o resultado

6.6 As saídas SYS com erro.

SYSUDUMP - Utilizado para gravar um dump caso ocorra um ABEND. Produz


um dump das áreas alocadas ao Programa do usuário.

SYSABEND – Produz um dump igual ao SYSUDUMP com acréscimo de


algumas áreas do Sistema:
o LSQA – Local system queue área (inclui subpool 229, 230 e 249)
o IOS – Blocos de controle Input/Output System (blocos de controle
de Task com problema)

29
6.7 Comandos de JES2

/*ROUTE XEQ - Especifica o destino da execução do JOB.

/*XEQ – Especifica o local de execução do JOB.

/*MESSAGE – Envia mensagem para console do operador.

/*NOTIFY TR76124 – Especifica um destino para receber a mensagem.

7. UTILITÁRIOS

Utilitários são programas que fazem parte do sistema operacional.


Desempenham funções de uso comum e auxiliam no gerenciamento de arquivos. Os
programas utilitários fornecidos pela IBM oferecem uma série de funções úteis,
como cópia e listagem de arquivos e manutenção das bibliotecas de arquivos
particionados, portanto, conhecê-los passa ser essencial para os profissionais da
área de informática do mainframe.

OBJETIVO UTILITÁRIO
Alterar a organização de um dataset IEBGENER, IEBUPDTE, IEBPTPCH
Converter um dataset para sequencial IEBGENER, IEBUPTDTE
Copiar um arquivo particionado IEBCOPY, IEHMOVE
Copiar um arquivo sequencial IEBGENER, IEHMOVE, IEBUPDTE, IEBPTPCH

30
Criar um dataset seqüencial de saída IEBDG, IEBGENER, IEBPTPCH
Editar e copiar um arquivo sequencial IEBGENER, IEBPUPDTE, IEBPTPCH
Deletar, catalogar um dataset IEFBR14
Substituir membros selecionados de um PDSE IEBCOPY, IEBUPDTE

Esses utilitários, chamados de Utilitários do Sistema, são válidos apenas


para os arquivos Não-VSAM. Para os arquivos VSAM (Virtual Storage Acces
Method) utilizamos o utilitário IDCAMS
Vamos observar alguns desses utilitários, os mais utilizados em nossa
instalação e que se encontram implantados nos diversos processos de todos os
sistemas do cliente. (SAG, SFA, SAC, SCR, SCO...etc).

7.1 IEBGENER

O IEBGENER é o utilitário mais utilizado por ter a função de copiar um


arquivo sequencial de um dispositivo para outro, ou fazer outra cópia do arquivo com
uma retenção maior, copiar para outro ambiente, em atividades corriqueiras, assim
como podemos encontrar muitos desses programas em diversas procedures.

Vejamos o fluxo do utilitário IEBGENER

31
Vejamos o JCL do utilitário IEBGENER

Um exemplo de uma execução:

32
Resultado da execução com os cartões alterados na sua posição.

Mesmo com alteração na ordem o JOB processou OK

33
7.2 IEFBR14

È um programa útil, porém não um utilitário para muitos autores


(BARBARA, 2011, p. 121). Não executa nada, ele é uma instrução BR14, não exige
nenhum DD com nome especial. Serve para, utilizar apenas o JCL dos comandos
DD definidos em sua execução, que se faça alocação e desalocação de arquivos no
início de um JOB ou para apagar arquivos no final.

Vejamos o fluxo do programa útil IEFBR14

Vejamos o JCL do programa.

34
Um exemplo de execução

35
7.3 TELGENER

É um programa útil e muito utilizado nas empresas de comunicação do antigo


Sistema Telebrás. Tem a finalidade de copiar arquivos e encontra-se implantado em
vários procedimentos dos diversos sistemas que processam no mainframe.

Vejamos o fluxo do programa útil TELGENER

Uma execução

36
Resultado da Execução

37
38
8. REFERÊNCIAS BIBLIOGRÁFICAS

BROWN, Gery DeWard. JCL SISTEMA/370. Rio de Janeiro: Campos, 1990.

BARBARA, Saulo; ABREU, Jorge; BORBA, Ana Lucia. JCL e Utilitários do Sistema
Operacional z/OS. Rio de Janeiro: Moderna, 2011.

SOARES, Jorge; BARBARA, Saulo; WILDMAR, Jorge; PINESCHI, Elcio. Introdução


à Arquitetura de Mainframe e ao Sistema Operacional Z/OS. Rio de Janeiro:
Moderna, 2010.

39

Você também pode gostar