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.

🦕 Analogia: O CSD é como o cadastro de funcionários de uma empresa. Antes de alguém poder entrar no prédio (o CICS), precisa estar cadastrado (definido no CSD). Não importa o quanto o programa seja bom — se não tiver entrada no CSD, o CICS não sabe que ele existe.

Hierarquia de organização dentro do CSD:

NívelNomeDescrição
1Lista (List)Conjunto de grupos; o SIT (System Initialization Table) aponta quais listas carregar quando o CICS sobe
2Grupo (Group)Conjunto de definições relacionadas — normalmente uma por aplicação ou subsistema
3Definiçã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)
INSTALL ativa imediatamente — não precisa reiniciar o CICS. As definições ficam disponíveis para uso assim que o comando completa. É possível instalar uma única definição específica com 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 CEDAAção
CEDA DEFINECria uma nova definição no CSD
CEDA ALTERAltera uma definição existente
CEDA DISPLAYExibe as propriedades de uma definição ou grupo
CEDA COPYCopia uma definição para outro grupo
CEDA RENAMERenomeia uma definição
CEDA DELETERemove uma definição do CSD
CEDA INSTALLAtiva definições no CICS em execução
CEDA EXPANDExibe 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âmetroValoresSignificado
PROGRAMNome do programa (8 chars)Programa COBOL/Assembler a executar
TWASIZE0–32767Tamanho da Task Work Area — área de memória privada da tarefa, acessível via ASSIGN TWA
PROFILENome do perfilDefine parâmetros do terminal (DFHCICST é o padrão para 3270)
STATUSENABLED / DISABLEDSe DISABLED, usuários recebem "TRANSACTION DISABLED" ao tentar usar
DTIMOUT0–9999 (segundos)Tempo máximo esperando recurso antes do abend AKCP
PRIORITY0–255Prioridade no dispatcher. Maior número = maior prioridade
TASKDATALOCANY / BELOWANY = 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âmetroDetalhes
LANGUAGEInforma o CICS como interpretar o módulo. COBOL é o mais comum em sistemas bancários.
EXECKEYUSER: programa roda em modo de proteção normal. CICS: acesso direto às tabelas internas — reservado para utilitários do sistema.
CONCURRENCYQUASIRENT: um TCB por vez (padrão legado). THREADSAFE: pode rodar em TCB aberto, eliminando switches para DB2. REQUIRED: obriga TCB aberto.
RELOADYES 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.
RESIDENTYES mantém o módulo na memória permanentemente, eliminando o custo de load. Use para programas de alta frequência.
NEWCOPY e PHASEIN: quando um programa é recompilado e o novo load module é colocado na library, o CICS ainda usa a versão antiga em memória. Para ativar a nova versão sem reiniciar o CICS, use 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âmetroSignificado
DSNAMENome do dataset VSAM no catálogo. Pode incluir &APPLID para substituição dinâmica pelo ID da região CICS.
STRINGSNúmero de conexões simultâneas ao ACB do VSAM. Determina o paralelismo máximo de acesso ao arquivo.
ADD/BROWSE/DELETE/READ/UPDATEControla quais operações são permitidas. Arquivos de referência (somente leitura) têm apenas READ(YES) e BROWSE(YES).
OPENSTATUSOPEN: abre o arquivo quando o CICS inicializa. CLOSED: o arquivo só abre quando acessado pela primeira vez.
LSRPOOLIDID 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 INQUIREO 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
TASKLista todas as tarefas ativas: número, TRANSID, status, terminal
SYSTEMInformações gerais da região: versão CICS, DSA, uso de memória
TDQUEUE(name)Status, tipo, número de registros na fila
DB2CONNStatus da conexão CICS-DB2, threads ativas/disponíveis
⚠️ CEMT altera o estado em memória, não o CSD. Se o CICS for reiniciado, os recursos voltam ao estado definido no CSD. Para tornar uma alteração permanente (ex: deixar um arquivo permanentemente desabilitado), é necessário alterar a definição no CSD com CEDA ALTER e depois reiniciar ou fazer INSTALL.

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árioSituaçã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 terminalDefinido no CSD na definição do TERMINAL — usado quando não há login explícito
EXEC CICS CHANGE TASK USERIDPrograma muda o ID da tarefa corrente para um usuário diferente (requer autorização)
Transação com USERID fixo no CSDDefiniçã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.

TabelaNome completoEquivalente CSD moderno
PCTProgram Control TableTRANSACTION no CSD
PPTProcessing Program TablePROGRAM no CSD
FCTFile Control TableFILE no CSD
DCTDestination Control TableTDQUEUE no CSD
TCTTerminal Control TableTERMINAL no CSD
SNTSign-On TableSubstituída pelo RACF
💗 Por que saber sobre as tabelas legadas? Em manutenção de sistemas antigos, você ainda pode encontrar JCLs que montam PCT e PPT. Além disso, documentações e livros antigos de CICS usam os nomes PCT/PPT — saber a correspondência com o CSD moderno evita confusão na leitura.
🟣 Avançado — DFHCSDUP para migração: O utilitário DFHCSDUP tem uma função 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.