domingo, 1 de outubro de 2023

JCL: Gerenciamento de Datasets de Saída no Mainframe

 

Bellacosa Mainframe JCL e seus datasets

JCL: Gerenciamento de Datasets de Saída no Mainframe

Se você já passou algum tempo no mainframe, sabe que o JCL (Job Control Language) é a espinha dorsal da execução de programas e da manipulação de dados. Uma das tarefas mais comuns é criar e controlar datasets de saída. Mas, se você não prestar atenção aos detalhes de DISP, UNIT, VOL e PATHOPTS, seu job pode falhar ou produzir resultados inesperados. Vamos destrinchar o assunto, passo a passo, no estilo Bellacosa Mainframe.


1️⃣ Nomeando e Criando Datasets

Datasets Permanentes

Para criar datasets permanentes em DASD (disco) ou fitas, usamos o parâmetro DSN para indicar o nome:

  • Qualificado: PROD.DAILY.RLSREP → inclui HLQ (High-Level Qualifier).

  • Não qualificado: MYDATA → nome simples de 1 a 8 caracteres.

  • Geração (GDS): PROD.DAILY.RLSREP(+1) → cria uma nova geração sem sobrescrever a anterior.

Datasets Temporários

  • Começam com &&, ex.: &&TEMP1

  • São criados automaticamente pelo sistema se nenhum DSN for informado.

  • Podem ser passados para outros steps usando DISP=(NEW,PASS).


2️⃣ Disposição do Dataset (DISP)

O parâmetro DISP controla o status e destino do dataset, e é crucial para evitar sobrescrita indesejada.

Tipo de datasetExemplo DISPSignificado
Novo datasetDISP=(NEW,CATLG,DELETE)Cria o dataset; mantém se sucesso; deleta se falha
Dataset existenteDISP=(OLD,KEEP,KEEP)Abre exclusivo; mantém independentemente do resultado
Acrescentando dadosDISP=(MOD,KEEP,KEEP)Acrescenta no final do dataset existente
IgnoradoDISP=DUMMY ou DSN=NULLFILEPara steps que não precisam de saída real

⚠️ Atenção: +0 não cria dataset novo; +1 sim. E nunca confunda OLD com MOD — o primeiro sobrescreve, o segundo acrescenta.


3️⃣ Definindo o Local de Armazenamento (UNIT e VOL)

UNIT

Define o tipo de dispositivo ou grupo:

  • SYSDA → disco genérico

  • 3390 → dispositivo específico

  • TAPE ou CART → fitas

Se você não especificar, o sistema pode usar defaults definidos pelo administrador.

VOL

Define o volume específico:

  • VOL=SER=T44489 → fita específica

  • Permite referback em steps subsequentes

  • Se o volume não estiver disponível, o operador recebe uma mensagem solicitando ação

Exemplo de dataset em fita específica:

//OUTDD DD DSN=OUT.OFFSITE.DATA, DISP=(NEW,CATLG,DELETE), UNIT=CART, VOL=SER=T44489

4️⃣ Parâmetros de z/OS UNIX Files

Para arquivos UNIX no z/OS, usamos:

ParâmetroFunção
PATHCaminho completo do arquivo
PATHOPTSTipo de acesso (read/write, exclusivo, criar)
PATHMODEPermissões (leitura, escrita, execução para user/group/other)
PATHDISPAção após execução (KEEP, DELETE)

Exemplo:

//DD1 DD PATH='/u/ibmuser/stktake', PATHOPTS=(OWRONLY,OEXCL,OCREAT), PATHMODE=(SIRWXU,SIRGRP), PATHDISP=(KEEP,DELETE)

5️⃣ Erros Comuns e Como Evitar

ErroCausaSolução
IEF210I – Incorrect UNITUNIT inválido (DISK em vez de SYSDA)Usar unidade válida: SYSDA
IEF253I – Duplicate Name on VolumeTentativa de criar dataset que já existe no volumeUse outro nome ou +1 para nova geração
VOL não disponívelVolume específico não presenteOperador recebe mensagem; deve escolher ação
DISP incompletoEsquecer subparâmetrosSempre usar os 3 subparâmetros: (NEW,CATLG,DELETE)

6️⃣ Exemplo de Criação de Dataset

Dataset em disco genérico 3390

//TESTDD DD DSN=MY.TEST.DATA, DISP=(NEW,CATLG,DELETE), UNIT=3390, SPACE=(TRK,(10,5),RLSE)

Dataset em fita específica para envio offsite

//OUTDD DD DSN=OUT.OFFSITE.DATA, DISP=(NEW,CATLG,DELETE), UNIT=CART, VOL=SER=T44489

Resumo Final

  • DSN → nome do dataset

  • DISP → controla status e destino (NEW, OLD, MOD, KEEP, DELETE)

  • UNIT → define dispositivo ou grupo

  • VOL → fita ou volume específico

  • SPACE/DCB → quantidade de espaço e atributos de formato

  • z/OS UNIX → use PATH, PATHOPTS, PATHMODE, PATHDISP

Seguindo essas práticas, você garante que seus jobs criem datasets corretamente, evitem sobrescrita acidental, respeitem volumes específicos e funcionem tanto em discos quanto fitas.


💡 Dica Bellacosa:
Sempre revise DISP, UNIT e VOL antes de submeter o job. Uma simples confusão entre OLD, MOD e NEW ou entre SYSDA e 3390 pode gerar horas de troubleshooting.

Sem comentários:

Enviar um comentário