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 controle mainframe mainframe da empresa empresa OI, OI,
nas ativida atividades des de proces processame samento nto de dados 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 exposição de exemplos dos processos que controlamos em 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 encont encontros ros fossem fossem realiz realizado adoss nos horári horários os das 12h00 12h00min min às 14h00m 14h00min in 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, abor aborda dare remo moss tamb também ém os assu assunt ntos os:: Aber Abertu tura ra auto automá mátic tica a de inci incide dent ntes es por 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 informações necessárias necessárias para que os dados 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.
•
Come Coment ntár ário ioss (//* (//*)) são são codi codific ficad ados os entr entre e as colu coluna nass 4 a 80, 80, com 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.
•
Coma Comand ndo o PEND PEND indi indica ca o fina finall de um proc proced edim imen ento to de flux fluxo o 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 conce conceito itoss gerais gerais são são simple simples. s. Além Além disso, disso, utiliza utilizamos mos apena apenass um pequen pequeno o 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 GE EQ NE LT LE
Maior que (Greater than) Maior ou igual que (Greater than or equal to) Igual a (Equal to) Diferente (Not equal to) Menor que (Less than) 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 ACCODE AFF AMP BURST CHARS CHKPT COMPACT COPIES DCB DDNAME DEST DISP DLM DSID DSN FCB FLASH FREE HOLD LABEL MODIFY MSVGP OUTLIM OUTPUT PROTECT QNAME SEP SPACE SPLIT SUBALLOC SUBSYS SYSOUT TERM UCS UNIT VOL
DESCRIÇÃ0 DOS PARAMETROS DE PALAVRA-CHAVE Solicita um código de acesso para fitas ANSI Solicita separação de canal Fornece informação para arquivos VSAM Permite o uso de formulários não contínuos em impressora Especifica um conjunto de caracteres para a impressora Solicita pontos de controle e fim de volume Compacta os arquivos enviados a uma estação de trabalho Solicita cópias de um arquivo de saída Especifica os parâmetros de bloco de controle de dados Adia a definição de um arquivo Direciona a saída para um determinado destino Especifica a disposição do arquivo Especifica um delimitador alternativo Fornece a identificação de um arquivo em um disquete modelo 3540 Denomina o arquivo Especifica formulário de imagem de controle para uma impressora Especifica a superposição de formulário na impressora Libera o dispositivo de E/S quando o arquivo é fechado Retém o arquivo de saída em uma fila Fornece informação de rótulos e proteção de arquivos Modifica as linhas de impressão na impressora Solicita um periférico MSS (Mass Storage System) Limita as linhas de saída impressa Especifica o processamento de saída especial Solicita proteção de arquivos (senhas) Dá acesso a mensagens recebidas Solicita separação de canal Solicita o espaço em acesso direto a ser alocado Aloca espaço em um volume de acesso direto a ser sub-alocado Subaloca espaço em um volume de acesso direto Especifica o subsistema a processar o arquivo Direciona um arquivo por meio do fluxo de saída do sistema Envia ou recebe um arquivo de um terminal timesharing Envia um conjunto de caracteres para impressão Especifica o dispositivo de E/S 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;
•
a retenção do volume;
•
um volume específico pelo número serial;
•
o mesmo volume usado por outro arquivo; ,
•
o número de volumes requeridos.
VOL=SER=624328 VOL=(,,,2,624329)
VOL=REF=*.STEP1.SEQE02
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
[step.]RC [step.]ABEND [step.]RUN
NOT ¬NOT GT > LT < EQ = NE ¬= GE >= LE <=
[AND] ou & valor
[OR] ou |
expressão 2 ... expressão n
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 Alterar a organização de um dataset Converter um dataset para sequencial Copiar um arquivo particionado Copiar um arquivo sequencial
UTILITÁRIO IEBGENER, IEBUPDTE, IEBPTPCH IEBGENER, IEBUPTDTE IEBCOPY, IEHMOVE IEBGENER, IEHMOVE, IEBUPDTE, IEBPTPCH
30
Criar um dataset seqüencial de saída Editar e copiar um arquivo sequencial Deletar, catalogar um dataset Substituir membros selecionados de um PDSE
IEBDG, IEBGENER, IEBPTPCH IEBGENER, IEBPUPDTE, IEBPTPCH IEFBR14 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