CSD — o repositório de definições
O CSD (CICS System Dataset) é um VSAM KSDS que armazena todas as definições de recursos do CICS: transações, programas, arquivos, filas TD, terminais, conexões e outros. Toda instalação CICS tem um CSD — sem ele, o CICS não sobe.
Hierarquia de organização dentro do CSD:
| Nível | Nome | Descrição |
|---|---|---|
| 1 | Lista (List) | Conjunto de grupos; o SIT (System Initialization Table) aponta quais listas carregar quando o CICS sobe |
| 2 | Grupo (Group) | Conjunto de definições relacionadas — normalmente uma por aplicação ou subsistema |
| 3 | Definição (Resource Definition) | A definição em si: TRANSACTION, PROGRAM, FILE, TDQUEUE, TERMINAL... |
Grupos e listas
Um grupo é uma unidade de instalação — você instala (INSTALL) um grupo inteiro de uma vez, ativando todas as definições contidas nele. Isso facilita a gestão de versões: ao subir uma nova versão de uma aplicação, você cria um novo grupo, define todos os recursos, e instala o grupo de uma só vez.
Uma lista referencia grupos. Quando o CICS inicializa, ele lê a lista definida no SIT e instala automaticamente todos os grupos dela. A lista padrão do CICS é DFHLIST (recursos do sistema). As aplicações criam suas próprias listas.
* ver o conteúdo de um grupo
CEDA DISPLAY GROUP(BANCGRP)
* ver os grupos de uma lista
CEDA DISPLAY LIST(BANCLIST)
* adicionar um grupo a uma lista
CEDA ADD GROUP(BANCGRP) LIST(BANCLIST)
* instalar todos os recursos de um grupo no CICS ativo
CEDA INSTALL GROUP(BANCGRP)
CEDA INSTALL TRANSACTION(CNTA) GROUP(BANCGRP).
CEDA — criando e alterando definições
CEDA (CICS Execute Definition and Administration) é a transação interativa para gerenciar o CSD. Você a acessa digitando CEDA no terminal.
| Comando CEDA | Ação |
|---|---|
CEDA DEFINE | Cria uma nova definição no CSD |
CEDA ALTER | Altera uma definição existente |
CEDA DISPLAY | Exibe as propriedades de uma definição ou grupo |
CEDA COPY | Copia uma definição para outro grupo |
CEDA RENAME | Renomeia uma definição |
CEDA DELETE | Remove uma definição do CSD |
CEDA INSTALL | Ativa definições no CICS em execução |
CEDA EXPAND | Exibe todos os membros de uma lista |
Alternativa em batch — o utilitário DFHCSDUP permite fazer as mesmas operações via JCL, útil para automação de deploy:
//* instalar definições via DFHCSDUP em batch
//CSDUPD EXEC PGM=DFHCSDUP,REGION=4M
//STEPLIB DD DSN=CICSTS.SDFHLOAD,DISP=SHR
//DFHCSD DD DSN=CICSTS.DFHCSD,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE TRANSACTION(CNTA)
GROUP(BANCGRP)
PROGRAM(PGMCONTA)
TWASIZE(0)
PROFILE(DFHCICST)
DEFINE PROGRAM(PGMCONTA)
GROUP(BANCGRP)
LANGUAGE(COBOL)
EXECKEY(USER)
CONCURRENCY(THREADSAFE)
ADD GROUP(BANCGRP) LIST(BANCLIST)
/*
Definindo uma TRANSACTION
A TRANSACTION é o ponto de entrada do usuário no CICS. O usuário digita o TRANSID (4 chars) no terminal e pressiona Enter — o CICS localiza a definição, identifica o programa associado e o executa.
CEDA DEFINE TRANSACTION(CNTA)
GROUP(BANCGRP)
PROGRAM(PGMCONTA) * programa que será executado
TWASIZE(0) * Task Work Area — 0 se não usar
PROFILE(DFHCICST) * perfil de terminal
STATUS(ENABLED) * ENABLED=ativa, DISABLED=desativa
TASKDATALOC(ANY) * localização da Working-Storage: ANY ou BELOW
TASKDATAKEY(USER) * proteção de memória: USER ou CICS
PRIORITY(1) * prioridade de despacho (0-255)
DTIMOUT(0) * deadlock timeout em segundos (0=sem timeout)
SPURGE(YES) * pode ser purgada pelo operador
TPURGE(YES) * pode ser purgada por timeout de terminal
| Parâmetro | Valores | Significado |
|---|---|---|
| PROGRAM | Nome do programa (8 chars) | Programa COBOL/Assembler a executar |
| TWASIZE | 0–32767 | Tamanho da Task Work Area — área de memória privada da tarefa, acessível via ASSIGN TWA |
| PROFILE | Nome do perfil | Define parâmetros do terminal (DFHCICST é o padrão para 3270) |
| STATUS | ENABLED / DISABLED | Se DISABLED, usuários recebem "TRANSACTION DISABLED" ao tentar usar |
| DTIMOUT | 0–9999 (segundos) | Tempo máximo esperando recurso antes do abend AKCP |
| PRIORITY | 0–255 | Prioridade no dispatcher. Maior número = maior prioridade |
| TASKDATALOC | ANY / BELOW | ANY = Working-Storage pode ir acima da linha dos 16MB. BELOW = abaixo (programas 24-bit) |
Definindo um PROGRAM
A definição de PROGRAM informa ao CICS onde encontrar o load module e como executá-lo.
CEDA DEFINE PROGRAM(PGMCONTA)
GROUP(BANCGRP)
LANGUAGE(COBOL) * COBOL / ASSEMBLER / PLI / C
EXECKEY(USER) * USER=proteção normal, CICS=acesso ao núcleo
CONCURRENCY(THREADSAFE) * QUASIRENT / THREADSAFE / REQUIRED
STATUS(ENABLED)
DATALOCATION(ANY) * onde o programa pode alocar memória
RELOAD(NO) * YES=recarrega do disco a cada execução (dev)
RESIDENT(NO) * YES=mantém na memória permanentemente
| Parâmetro | Detalhes |
|---|---|
| LANGUAGE | Informa o CICS como interpretar o módulo. COBOL é o mais comum em sistemas bancários. |
| EXECKEY | USER: programa roda em modo de proteção normal. CICS: acesso direto às tabelas internas — reservado para utilitários do sistema. |
| CONCURRENCY | QUASIRENT: um TCB por vez (padrão legado). THREADSAFE: pode rodar em TCB aberto, eliminando switches para DB2. REQUIRED: obriga TCB aberto. |
| RELOAD | YES força o CICS a recarregar o load module do disco a cada execução — útil em desenvolvimento para pegar versões novas sem precisar fazer NEWCOPY. Em produção, sempre NO. |
| RESIDENT | YES mantém o módulo na memória permanentemente, eliminando o custo de load. Use para programas de alta frequência. |
CEMT SET PROGRAM(PGMCONTA) NEWCOPY (próxima execução usa o novo módulo) ou PHASEIN (troca gradual sem afetar tarefas em andamento).
Definindo um FILE
A definição de FILE associa um nome lógico (usado nos comandos EXEC CICS READ/WRITE) a um dataset VSAM físico.
CEDA DEFINE FILE(CNTFILE)
GROUP(BANCGRP)
DSNAME(BANCO.PROD.CNTFILE) * dataset VSAM físico
RLSACCESS(NO) * Record Level Sharing (Sysplex)
LSRPOOLID(1) * Local Shared Resources pool
STRINGS(3) * conexões simultâneas ao VSAM
ADD(YES) * permite INSERT (WRITE de novo registro)
BROWSE(YES) * permite STARTBR/READNEXT/ENDBR
DELETE(YES) * permite DELETE
READ(YES) * permite READ
UPDATE(YES) * permite REWRITE após READ UPDATE
DISPOSITION(SHARE) * SHARE=acesso compartilhado
STATUS(ENABLED)
OPENSTATUS(OPEN) * OPEN quando o CICS sobe
| Parâmetro | Significado |
|---|---|
| DSNAME | Nome do dataset VSAM no catálogo. Pode incluir &APPLID para substituição dinâmica pelo ID da região CICS. |
| STRINGS | Número de conexões simultâneas ao ACB do VSAM. Determina o paralelismo máximo de acesso ao arquivo. |
| ADD/BROWSE/DELETE/READ/UPDATE | Controla quais operações são permitidas. Arquivos de referência (somente leitura) têm apenas READ(YES) e BROWSE(YES). |
| OPENSTATUS | OPEN: abre o arquivo quando o CICS inicializa. CLOSED: o arquivo só abre quando acessado pela primeira vez. |
| LSRPOOLID | ID do pool de buffers compartilhados (Local Shared Resources). Melhora performance ao compartilhar buffers entre arquivos. |
Definindo TDQUEUE
Como visto no artigo de TS/TD, filas Transient Data precisam ser definidas no CSD antes de uso.
* fila intrapartição com trigger
CEDA DEFINE TDQUEUE(ALOG)
GROUP(BANCGRP)
TYPE(INTRA)
TRIGGERLEVEL(0) * 0 = sem trigger automático
SYSOUTCLASS(*) * para filas que vão ao SPOOL
* fila extrapartição (dataset externo)
CEDA DEFINE TDQUEUE(RELAT)
GROUP(BANCGRP)
TYPE(EXTRA)
DDNAME(RELDDIN) * DD no JCL de startup do CICS
OPENTIME(INITIAL) * abre quando o CICS sobe
RECORDFORMAT(VARIABLE) * FIXED ou VARIABLE
BLOCKFORMAT(UNBLOCKED)
DISPOSITION(MOD)
CEMT — gerenciando em tempo de execução
CEMT (CICS Execute Master Terminal) é a transação de operação do CICS — permite consultar e alterar o estado de recursos em tempo real, sem modificar o CSD. É o painel de controle do operador.
* consultar status de uma transação
CEMT INQUIRE TRANSACTION(CNTA)
* desabilitar uma transação em produção
CEMT SET TRANSACTION(CNTA) DISABLED
* reabilitar
CEMT SET TRANSACTION(CNTA) ENABLED
* recarregar programa com nova versão do load module
CEMT SET PROGRAM(PGMCONTA) NEWCOPY
* fechar arquivo para manutenção
CEMT SET FILE(CNTFILE) CLOSED DISABLED
* reabrir arquivo
CEMT SET FILE(CNTFILE) OPEN ENABLED
* listar todas as tarefas ativas
CEMT INQUIRE TASK
* purgar (cancelar) uma tarefa pelo número
CEMT SET TASK(00123) PURGE
* ver status de todos os arquivos
CEMT INQUIRE FILE
* ver conexões DB2 ativas
CEMT INQUIRE DB2CONN
| CEMT INQUIRE | O que mostra |
|---|---|
| TRANSACTION(name) | Status, programa associado, prioridade, contagem de uso |
| PROGRAM(name) | Status, linguagem, uso de memória, contagem de execuções |
| FILE(name) | Status (OPEN/CLOSED, ENABLED/DISABLED), DSNAME, operações permitidas |
| TASK | Lista todas as tarefas ativas: número, TRANSID, status, terminal |
| SYSTEM | Informações gerais da região: versão CICS, DSA, uso de memória |
| TDQUEUE(name) | Status, tipo, número de registros na fila |
| DB2CONN | Status da conexão CICS-DB2, threads ativas/disponíveis |
Segurança CICS e RACF
O CICS integra com o RACF (Resource Access Control Facility) do z/OS para controlar quem pode executar quais transações, acessar quais arquivos e usar quais filas. A segurança opera em múltiplos níveis:
Segurança de transação
O nível mais comum: controlar quem pode digitar qual TRANSID. No RACF, transações CICS são protegidas pela classe TCICSTRN:
* definir perfil de segurança para a transação CNTA
RDEFINE TCICSTRN CICSPROD.CNTA UACC(NONE)
* permitir acesso ao grupo BANCOPER
PERMIT CICSPROD.CNTA CLASS(TCICSTRN) ID(BANCOPER) ACCESS(READ)
* ativar a classe
SETROPTS CLASSACT(TCICSTRN) RACLIST(TCICSTRN)
Verificando autorizações no programa COBOL
O programa pode verificar se o usuário atual tem permissão sobre um recurso antes de prosseguir:
WORKING-STORAGE SECTION.
01 WS-USERID PIC X(8).
01 WS-RESP PIC S9(8) COMP.
PROCEDURE DIVISION.
VERIFICAR-AUTORIZACAO.
* obter o ID do usuário corrente
EXEC CICS ASSIGN
USERID(WS-USERID)
END-EXEC
* verificar acesso a um recurso específico
EXEC CICS QUERY SECURITY
RESTYPE('TCICSTRN')
RESIDLNG(15)
RESID('CICSPROD.CNTA')
LOGMESSAGE(NO)
READ(WS-PODE-LER)
RESP(WS-RESP)
END-EXEC
IF WS-PODE-LER = 'Y'
PERFORM PROCESSAR
ELSE
MOVE 'ACESSO NAO AUTORIZADO' TO MENSAGEMO
PERFORM ENVIAR-MENSAGEM
END-IF.
Identificação do usuário na transação
| Como o CICS identifica o usuário | Situação |
|---|---|
| Login RACF no terminal (CESN) | Usuário fez autenticação explícita; CICS usa esse ID para todas as transações do terminal |
| Usuário padrão do terminal | Definido no CSD na definição do TERMINAL — usado quando não há login explícito |
| EXEC CICS CHANGE TASK USERID | Programa muda o ID da tarefa corrente para um usuário diferente (requer autorização) |
| Transação com USERID fixo no CSD | Definição da TRANSACTION tem USERID= — sempre roda sob aquele ID independente de quem iniciou |
Tabelas legadas — PCT, PPT e FCT
Antes do CSD (introduzido no CICS/VS 1.7), as definições eram feitas em tabelas montadas em assembler e linkeditadas ao núcleo do CICS. Você as encontrará em sistemas muito antigos ou em documentações históricas.
| Tabela | Nome completo | Equivalente CSD moderno |
|---|---|---|
| PCT | Program Control Table | TRANSACTION no CSD |
| PPT | Processing Program Table | PROGRAM no CSD |
| FCT | File Control Table | FILE no CSD |
| DCT | Destination Control Table | TDQUEUE no CSD |
| TCT | Terminal Control Table | TERMINAL no CSD |
| SNT | Sign-On Table | Substituída pelo RACF |
MIGRATE que lê as tabelas antigas (PCT, PPT, FCT) e gera automaticamente as definições equivalentes no CSD. Foi muito usado durante as migrações de CICS/VS para CICS/ESA nos anos 90 — mas ainda é relevante para quem herda sistemas com décadas de história.