2.5 - Detalhamento adicional
Reforçar alguns aspectos sobre os cartoes JOB, EXEc e DD
Cartão JOB deve ser a primeira instrução no JCL. Ele contem informações essenciais para o sistema operacional executar a solicitação conforme o esperado. Deve existir apenas 1 por JOB. Como já comentamos, quer dizer, eu acho que já... O cartão JOB funciona como "cabeçalho" de todo JOB, estabelecendo o contexto e os parâmetros gerais que governarão a execução de todos os steps subsequentes. É através dele que o sistema identifica o usuário, define prioridades, aloca recursos básicos e estabelece as configurações de controle de mensagens e contabilização.
Cartão EXEC informa ao sistema qual programa ou procedure deve ser executada. Podem existir no máximo 255 cartões exec por JOB. O sistema possui diversas "bibliotecas" padrão - como exemplo para procedures temos a SYS1.PROCLIB - nas quais ele realiza a procura por uma determinada procedure.
Se o programa/procedure não estiver nessas bibliotecas ocorrerá um erro que pode ser sanado facilmente informando nesse step um cartao DD chamado STEPLIB,segue exemplo:
//STEPLIB DD DSNAME=SYS1.LINKLIB,DISP=SHR
DSNAME= -> Informa em qual "arquivo" esta seu programa ou procedure SYS1.LINKLIB -> nome do data set (arquivo) DISP= -> Informa o status do data set SHR -> compartilhado, isto é, ele já existe e o acesso não é exclusivo desse job.
Cartão DD define dados, isto é, os detalhes/valores/instruções do conjunto de dados são codificados em cartões DD.
Esses Conjunto de dados contém as informações necessárias para a execucao do programa ou de outro JOB (depende do cartão EXEC) sejam elas de input (entrada) ou de output(saida). Até onde eu lembro, podem existir no máximo 3.273 cartoes DD por step. Vamos falar um pouco sobre outros 'nomes' e procedimentos que voce vai encontrar por ai no meio do seu JOB. JOBLIB e STEPLIB (Bibliotecas de Programa)
O conceito de bibliotecas de programa é fundamental para o funcionamento eficiente do sistema, permitindo que executáveis sejam localizados e carregados dinamicamente durante a execução dos jobs.
JOBLIB: É um cartão DD especial que deve ser colocado imediatamente após o cartão JOB e antes do primeiro EXEC. Ele define uma ou mais biblioteca(s) que será pesquisada para todos os programas em todos os steps do job. Se o programa não for encontrado na JOBLIB, a pesquisa continua na SYS1.LINKLIB (biblioteca do sistema) e mais algumas outras que seu 'shop' tiver configurado. ATENÇÂO : Uma JOBLIB não pode ser definida dentro de uma procedure.
STEPLIB: Semelhante ao JOBLIB, mas deve ser codificado após o cartão EXEC. Ele especifica uma biblioteca para a pesquisa de programas apenas para o step em que foi codificado.
Prioridade: Se um step tiver tanto JOBLIB quanto STEPLIB, as especificações do STEPLIB terão prioridade e o JOBLIB será ignorado para aquele step. A pesquisa ocorre primeiro na STEPLIB, depois na SYS1.LINKLIB.
Concatenação de Bibliotecas: Você pode concatenar várias bibliotecas sob um único JOBLIB ou STEPLIB omitindo o DDNAME nos comandos DD subsequentes.
//JOBLIB DD DSNAME=BUGA.LOADLIB,DISP=SHR
// DD DSNAME=SYS2.LINKLIB,DISP=SHR
// DD DSNAME=SYS1.LINKLIB,DISP=SHR
//*
A pesquisa ocorre na ordem em que as bibliotecas são listadas.
Concatenação de Arquivos (Data Sets)
A concatenação é uma funcionalidade poderosa que permite otimizar o processamento e simplificar a lógica de aplicações que precisam processar múltiplos arquivos, no seu job fica igualzinho ta ai acima no exemplo da JOBLIB.
Permite que um único DDNAME leia vários arquivos (sequenciais ou particionados) como se fossem um só. Para implementar concatenação:
Omitir o DDNAME em todos os comandos DD concatenados, exceto no primeiro
Os arquivos são processados na ordem em que são apresentados <- parece bobeira, mas é bom saber isso!
Podem residir em dispositivos ou tipos de dispositivos diferentes
BLKSIZE e LRECL: Se os data sets concatenados tiverem tamanhos de bloco ou registro lógico diferentes, o maior tamanho deve ser o primeiro na sequência.
Backward Reference: Esse aqui, devo dizer que sumiu completamente o nome que a gente usava, mas é quando a gente ta com preguiça e da uma forçada em algum DD pra que seja usado o DSName que ja fora definido em algum lugar no JOB, só tem cuidado que se for uma concatenação, aquele abraço, vale só 1 arquivo. As referências para trás promovem reutilização de informações e consistência entre steps, evitando duplicação desnecessária de especificações.
Permitem que um parâmetro JCL obtenha informações de um comando anterior no mesmo job ou procedure. O formato mais comum é *.STEPNAME.DDNAME ou *.STEPNAME.PROCSTEPNAME.DDNAME para se referir a um DDNAME em um step específico.
Podem ser usados em parâmetros PGM, DCB e VOLUME=REF.
Restrições: Não podem ser usadas para DD *, DD DATA, DD DUMMY, SYSOUT, ou DD com FREE=CLOSE nos parâmetros VOLUME ou UNIT. Mas é simples, se liga:
//* STEP5: pega o arquivo que foi referenciado la pra cima no job
//* e na preguiça pra nao digitar o DSN name inteiro usa essa
//* magica
//*
//STEP2 EXEC PGM=SORT
//SORTIN DD DSNAME=*.STEP1.ENTRADA,DISP=SHR
//SORTOUT DD DSNAME=BUGA.SORTED.SAIDA,DISP=(NEW,CATLG),
// UNIT=SYSDA,SPACE=(TRK,(5,2))
//SYSIN DD *
SORT FIELDS=(1,10,CH,A)
/*
//SYSOUT DD SYSOUT=*
//*
Parâmetros Simbólicos (&)
Os parâmetros simbólicos oferecem flexibilidade e reutilização de código, funcionando como variáveis que podem ser substituídas dinamicamente durante a execução. No Amareilnho usava um programinha de final 108 se nao me engano, no laranjinha e no vermelho tinham solucoes parecidas, hoje em dia é história mas deve estar a mil porque no copie e cola dificilmente alguem vai parar pra trocar esse metodo de passagem de parametros pelos 'novos' metodos nativos introduzidos em alguma z/OS 2. qualquer coisa que deve ter incluido essa maravilha.
Variáveis que podem representar parâmetros, subparâmetros ou valores em procedures ou no campo de parâmetro de declarações (exceto JOB). São identificados por um & comercial seguido de um nome (ex: &NOMEARQ).
Características importantes:
O nome de um parâmetro simbólico pode ter no máximo 8 caracteres
Podem ser definidos em declarações PROC, EXEC ou SET
Delimitadores (.): Se um parâmetro simbólico faz parte de um nome e a parte fixa varia, use um ponto . após o nome do símbolo (&TIPO.CURSO). O ponto desaparece após a substituição. Se você quiser que o ponto faça parte do valor final, use dois pontos (&&TIPO..CURSO)
Aspas ('): Se o valor contiver caracteres especiais, inclua-o entre apóstrofos. Apóstrofos dentro do valor devem ser duplicados (NOME='D''AGUA')
Anulando um parâmetro simbólico: Não codifique nenhum valor após o sinal de igual (=)
GDG (Generation Data Group - Grupo de Dados de Geração)
O conceito de GDG é fundamental para sistemas que requerem versionamento automático de dados e processamento histórico sequencial, mas da pra se virar muito bem sem ele, eu só tinha conhecido de ouvir falar até dar um trampo no laranjinha e lá eles usavam com gosto.
Bom, basicamente o GDG é uma coleção de data sets que são processados sequencialmente em função do tempo, cada um sendo chamado de geração, tipo versao do arquivo.
Criação de uma Geração: Use o nome do GDG seguido de um número entre parênteses com + (ex: DSN=BUGA.GDG.BASE(+1)) para indicar uma nova geração.
Referência a uma Geração: Use o nome do GDG seguido de parênteses contendo o número de geração relativo (ex: DSN=BUGA.GDG.BASE(0) para a mais recente, (-1) para a anterior, e por ai vai, até o 99).
Restart de Jobs com GDG: Ao reiniciar um job, os números relativos de GDG devem ser ajustados porque o sistema já atualizou a numeração... e aqui é um saco, tem que prestar bastante atenção, mas nada que não se acostume com o dia a dia.
FREE (Liberar Recursos)
O controle de liberação de recursos é essencial para otimização de performance e disponibilidade de recursos do sistema.
Controla quando o sistema desaloca os recursos de um arquivo:
FREE=END: Desaloca o data set ao final da execução do step (padrão).
FREE=CLOSE: Desaloca o data set assim que ele é fechado pelo programa, tornando-o disponível para outros serviços mais rapidamente. Não pode ser usado com JOBLIB ou STEPLIB.
Last updated