1. IEFBR14 — o utilitário que não faz nada

O IEFBR14 é um programa de uma instrução: ele simplesmente retorna RC=0. Todo o trabalho útil do step é feito pelas DDs declaradas — o z/OS processa os DDs no JCL (alocando ou deletando datasets via DISP) independentemente do que o programa faz.

🦕 Analogia — IEFBR14 como um arquivo vazio com efeito colateral

Pense assim: quando o JCL declara uma DD com DISP=(NEW,CATLG), o z/OS aloca o dataset antes de o programa rodar. Quando o programa termina, o z/OS aplica a ação de disposição. Se o programa é o IEFBR14 (que não faz nada), o único efeito do step é o processamento dessas DDs — alocar ou deletar datasets.

Alocar um dataset com IEFBR14

//* Alocar um dataset vazio //ALOCA EXEC PGM=IEFBR14 //NOVODS DD DSN=USUARIO.NOVO.DATASET, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(10,5)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)

Deletar um dataset com IEFBR14

//* Deletar um dataset existente //DELETA EXEC PGM=IEFBR14 //VELHODS DD DSN=USUARIO.VELHO.DATASET, // DISP=(OLD,DELETE,DELETE)

Múltiplos datasets num step só

//* Alocar e deletar no mesmo step //OPERACOES EXEC PGM=IEFBR14 //CRIA1 DD DSN=USUARIO.ARQ1, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(5,2)),DCB=(RECFM=FB,LRECL=80) //CRIA2 DD DSN=USUARIO.ARQ2, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(1,1)),DCB=(RECFM=FB,LRECL=200) //DELETA DD DSN=USUARIO.TEMP.LIXO,DISP=(OLD,DELETE,DELETE)

💡 IEFBR14 vs IDCAMS para deleção

Para datasets sequenciais e PDS, o IEFBR14 é mais simples para alocar e deletar. Para datasets VSAM, prefira o IDCAMS com DELETE ... CLUSTER — o IEFBR14 não lida bem com os componentes VSAM e pode deixar o catálogo inconsistente.

2. IEBPTPCH — imprimindo datasets

O IEBPTPCH (Print/Punch) imprime o conteúdo de datasets sequenciais ou membros de PDS no SYSOUT. É útil para gerar relatórios simples ou inspecionar dados sem escrever um programa COBOL.

//* Imprimir todo o conteúdo de um dataset //IMPRIMIR EXEC PGM=IEBPTPCH //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=USUARIO.DADOS.SEQ,DISP=SHR //SYSUT2 DD SYSOUT=* //SYSIN DD * PRINT MAXFLDS=1 /*

Com a instrução RECORD FIELD=(80,1,,1) no SYSIN você pode selecionar e reformatar colunas antes de imprimir — similar ao que o IEBGENER faz com OUTREC. A diferença é que a saída vai para o spool (SYSOUT) em vez de um dataset.

💡 Alternativa moderna: IDCAMS PRINT

Para inspecionar rapidamente o conteúdo de qualquer dataset (incluindo VSAM), o PRINT do IDCAMS é mais versátil — suporta CHARACTER, HEX e DUMP, e funciona com VSAM. Reserve o IEBPTPCH para quando precisar formatar a saída com campos específicos.

3. IEHLIST — listando volumes e VTOC

O IEHLIST lista o VTOC (Volume Table of Contents) de um volume de disco — mostra todos os datasets alocados naquele volume, com seus atributos físicos. É uma ferramenta de diagnóstico e auditoria de capacidade.

//* Listar todos os datasets no volume USR001 //LISTVOL EXEC PGM=IEHLIST //SYSPRINT DD SYSOUT=* //VOL1 DD UNIT=SYSDA,VOL=SER=USR001,DISP=SHR //SYSIN DD * LISTVTOC FORMAT,VOL=3380=USR001 /*

💡 LISTCAT é mais comum que IEHLIST

Na maioria dos ambientes modernos, o IDCAMS LISTCAT é preferido ao IEHLIST — ele consulta o catálogo em vez do VTOC diretamente e fornece informações mais completas. Use IEHLIST apenas quando precisar de informações de baixo nível sobre o volume físico, ou para datasets não catalogados.

4. IEHINITT — inicializando fitas

O IEHINITT inicializa volumes de fita magnética, gravando o VOL1 label com o serial do volume. É usado em ambientes que ainda trabalham com fitas físicas ou virtuais (VTL — Virtual Tape Library).

//* Inicializar uma fita com serial TAPE01 //INITTAPE EXEC PGM=IEHINITT //SYSPRINT DD SYSOUT=* //TAPEDD DD UNIT=TAPE,VOL=SER=TAPE01,DISP=OLD, // LABEL=(,BLP) //SYSIN DD * TAPEDD INITT SER=TAPE01,DISP=REWIND /*

5. Guia rápido — qual utilitário usar

TarefaUtilitário
Copiar dataset sequencial (PS → PS)IEBGENER
Criar dataset a partir de dados inlineIEBGENER com SYSUT1 DD *
Copiar membros de PDSIEBCOPY
Comprimir PDS fragmentadoIEBCOPY (COPY INDD=X,OUTDD=X)
Ordenar registrosDFSORT (PGM=SORT)
Filtrar registros sem ordenarDFSORT com FIELDS=COPY
Agregar/deduplicar por chaveDFSORT com SUM
Juntar dois arquivos por chaveDFSORT com JOINKEYS
Criar dataset VSAMIDCAMS DEFINE CLUSTER
Deletar dataset VSAMIDCAMS DELETE ... CLUSTER
Consultar catálogoIDCAMS LISTCAT
Copiar VSAM ou carregar dadosIDCAMS REPRO
Inspecionar conteúdo (char/hex)IDCAMS PRINT
Alocar dataset vazio sem copiarIEFBR14
Deletar dataset sequencial/PDSIEFBR14 com DISP=(OLD,DELETE)
Imprimir dataset formatadoIEBPTPCH
Inspecionar VTOC de volumeIEHLIST
Executar comandos TSO em batchIKJEFT01

6. Return codes e diagnóstico geral

Todos os utilitários IEB* e o IDCAMS seguem a mesma convenção de return codes. Quando um step falha, o caminho de diagnóstico é sempre o mesmo:

  1. Abra o SDSF e localize o step com RC ≠ 0.
  2. Acesse o DD SYSPRINT do step (pressione S no job e depois S no SYSPRINT).
  3. Use FIND 'IEB', FIND 'IDC', FIND 'ICE' ou FIND 'IEF' para localizar mensagens de erro.
  4. Mensagens com sufixo E são erros, W são avisos, I são informativas.
  5. Pesquise o código da mensagem na documentação IBM (ex.: IEB102E, IDC3009I).

✅ SYSPRINT sempre em SYSOUT=*

Nunca omita o DD SYSPRINT dos seus steps de utilitário. Sem ele, as mensagens de erro não ficam disponíveis no SDSF e o diagnóstico de falhas se torna muito mais difícil. Mesmo que o job normalmente funcione bem, mantenha sempre o SYSPRINT para quando algo der errado.

🦕 Os utilitários como caixa de ferramentas

Pense nos utilitários IBM como uma caixa de ferramentas especializadas: cada uma faz uma coisa muito bem. Um desenvolvedor mainframe experiente não escreve COBOL para copiar um arquivo — ele pega o IEBGENER. Não escreve loop de ordenação — ele configura o SORT. O segredo é saber qual ferramenta pegar para cada tarefa, e agora você tem esse mapa.