1. Estrutura do JCL — SYSPRINT, SYSIN e IDCAMS
O IDCAMS usa um JCL simples com dois DDs fixos e DDs adicionais para os datasets que vai processar:
As instruções IDCAMS no SYSIN são case-insensitive, podem ser continuadas na próxima linha com um traço (-) no final, e múltiplos comandos podem ser encadeados num mesmo step.
💡 Múltiplos comandos num step
O IDCAMS processa todos os comandos do SYSIN sequencialmente. Você pode ter DEFINE, REPRO e LISTCAT no mesmo step — o que economiza steps de JCL. Cada comando pode ter return code independente, controlado com SET MAXCC.
2. DEFINE CLUSTER — criando datasets VSAM
O DEFINE CLUSTER cria um dataset VSAM novo. Os parâmetros variam conforme o tipo (KSDS, ESDS, RRDS). O exemplo mais comum é o KSDS:
| Parâmetro | Tipo VSAM | Descrição |
|---|---|---|
INDEXED | KSDS | Acesso por chave — o mais comum |
NONINDEXED | ESDS | Acesso sequencial — entry-sequenced |
NUMBERED | RRDS | Acesso por número relativo de registro |
LINEAR | LDS | Usado para Data Spaces e buffers de alta performance |
🦕 Analogia — DEFINE CLUSTER como CREATE TABLE
O DEFINE CLUSTER faz o papel de um CREATE TABLE no SQL — ele define a estrutura do "container" onde os dados vão viver: o tipo, a chave, o tamanho dos registros e o espaço alocado. Os dados entram depois via REPRO (como um INSERT em massa) ou pelo próprio programa COBOL.
3. DELETE — apagando datasets e aliases
O DELETE remove um dataset do catálogo e (opcionalmente) do disco:
⚠️ DELETE em VSAM apaga DATA e INDEX juntos
Ao deletar um cluster VSAM com DELETE ... CLUSTER, o IDCAMS remove automaticamente os componentes DATA e INDEX. Não tente deletar apenas o DATA ou apenas o INDEX — isso pode deixar o catálogo inconsistente. Sempre delete o CLUSTER inteiro.
4. LISTCAT — consultando o catálogo
O LISTCAT lista informações sobre datasets registrados no catálogo — atributos físicos, estatísticas de uso, datas e componentes VSAM:
O parâmetro ALL exibe todas as informações disponíveis — incluindo CISIZE, FREESPACE, número de registros, extensões, e timestamps de criação e último acesso. Essas informações são valiosas para diagnóstico e capacity planning.
💡 LISTCAT no TSO
O comando LISTCAT também funciona diretamente na linha de comando TSO (opção 6 do ISPF) sem precisar de JCL: LISTCAT ENTRIES('USUARIO.DS') ALL. É mais rápido para consultas ad-hoc durante o desenvolvimento.
5. REPRO — copiando dados
O REPRO copia registros de um dataset para outro — funciona com VSAM, sequencial e GDGs, em qualquer combinação:
No JCL, os datasets precisam de DDs correspondentes:
💡 REPRO com REPLACE
Por padrão, se um registro com a mesma chave já existe no KSDS de destino, o REPRO rejeita o registro e incrementa o return code. Use REPRO INFILE(...) OUTFILE(...) REPLACE para sobrescrever registros existentes em vez de rejeitá-los.
6. PRINT — inspecionando conteúdo
O PRINT exibe o conteúdo de um dataset no SYSPRINT — útil para verificar o conteúdo sem precisar de um programa COBOL:
7. SET MAXCC — controlando o return code
Quando o IDCAMS executa múltiplos comandos, o return code final do step é o mais alto de todos. O SET MAXCC permite zerar ou limitar esse valor para que steps condicionais seguintes não sejam afetados por erros esperados (como um DELETE que pode falhar se o dataset não existir):
Este padrão — DELETE + SET MAXCC=0 + DEFINE — é o "delete-e-recria" clássico do mainframe: garante que você começa com um dataset limpo sem abender se ele já existia ou não.