terça-feira, junho 23, 2026

Entendendo o Funcionamento do ISN no Adabas

Entre os diversos conceitos que tornam o Adabas um banco de dados extremamente eficiente, o ISN (Internal Sequence Number) ocupa um papel fundamental. Embora muitas vezes passe despercebido pelos desenvolvedores e administradores iniciantes, o ISN é um dos principais responsáveis pela rapidez com que o Adabas localiza e recupera informações. Em vez de percorrer registros sequencialmente em busca de um dado específico, o Adabas utiliza o ISN como um identificador interno único, permitindo o acesso direto aos registros armazenados no Data Storage. Essa arquitetura, combinada com os índices invertidos do banco de dados, proporciona um desempenho excepcional, mesmo em ambientes que processam milhões de registros diariamente. Neste artigo, vamos entender o que é o ISN, como ele é atribuído, de que forma é utilizado pelo Adabas e por que ele é um dos pilares da alta performance que tornou o Adabas referência em sistemas de missão crítica.

Entendendo o ISN

No banco de dados Adabas, o ISN (Internal Sequence Number), ou Número de Sequência Interna, é um identificador numérico atribuído a cada registro armazenado dentro de um arquivo (file). Em termos práticos, ele funciona como um endereço interno que permite ao Adabas localizar e acessar um registro de forma rápida e eficiente. Cada registro dentro de um FILE possui um ISN único, ou seja, não pode existir dois registros com o mesmo ISN dentro do mesmo arquivo. No entanto, é importante destacar que essa unicidade vale apenas dentro do FILE. Em arquivos diferentes, o mesmo número de ISN pode existir sem qualquer conflito, pois a identificação do registro sempre é feita pela combinação FILE + ISN. O ISN é um elemento fundamental na arquitetura do Adabas, pois permite acesso direto aos dados. Em vez de percorrer registros sequencialmente, o sistema utiliza índices internos para localizar rapidamente os ISNs que atendem a uma determinada condição. Em seguida, com base nessa lista de ISNs, o Adabas acessa diretamente os registros correspondentes no Data Storage, reduzindo o tempo de resposta e aumentando a eficiência das consultas. Essa característica é uma das razões pelas quais o Adabas é reconhecido por seu alto desempenho, especialmente em ambientes corporativos que exigem processamento de grandes volumes de dados com rapidez, confiabilidade e alta disponibilidade.

Como o ISN funciona?

Cada registro armazenado em um arquivo do Adabas recebe um ISN exclusivo e irrepetível dentro desse arquivo. Isso significa que não podem existir dois registros compartilhando o mesmo ISN. De forma semelhante a um número de RG ou CPF para uma pessoa, o ISN identifica individualmente cada registro, permitindo que o Adabas o localize e o acesse diretamente, sem ambiguidades. Essa unicidade é um dos pilares da eficiência do banco de dados, pois garante uma referência precisa e rápida para a recuperação das informações.

Tamanho e Faixa de Valores

O ISN (Internal Sequence Number) é um valor numérico inteiro utilizado pelo Adabas para identificar de forma única cada registro dentro de um arquivo. Em termos práticos, ele funciona como um identificador interno do banco de dados, garantindo que cada registro possa ser localizado e acessado individualmente sem ambiguidades. Normalmente, o ISN é armazenado em 3 ou 4 bytes, dependendo da configuração do ambiente e do tamanho definido para o arquivo (RABNSIZE). Sua numeração geralmente se inicia em 1 e é incrementada sequencialmente conforme novos registros são inseridos no arquivo. Quando registros são excluídos, seus ISNs podem ser reutilizados futuramente, dependendo das políticas internas de gerenciamento do Adabas. A capacidade máxima de ISNs está diretamente relacionada ao tamanho do RABN/ISN, conforme demonstrado abaixo:

Formas de Atribuição do ISN

A definição do ISN pode ocorrer de diferentes maneiras, conforme a necessidade da aplicação e a configuração estabelecida pelo Administrador de Banco de Dados (DBA).
1. ISN atribuído pelo Adabas - O próprio banco de dados gera automaticamente o próximo ISN disponível, normalmente de forma sequencial.
2. ISN atribuído pela aplicação - O programa aplicativo, desenvolvido em linguagens como Natural, COBOL ou outra interface Adabas, define explicitamente qual ISN será utilizado ao inserir um novo registro.
3. Reutilização de ISNs - Quando um registro é excluído, o seu ISN pode ou não ser reaproveitado pelo sistema. Esse comportamento depende das configurações definidas para o arquivo e das políticas de administração adotadas.

Por que o ISN é tão importante?

Uma das principais características do Adabas é sua capacidade de realizar acesso extremamente rápido aos dados. Diferentemente de muitos bancos de dados relacionais, que frequentemente necessitam de pesquisas extensas e operações de junção entre tabelas, o Adabas utiliza o ISN como um ponteiro direto para a localização física do registro no Data Storage.

O processo ocorre da seguinte forma:

1. O Adabas utiliza seus índices invertidos para localizar os registros que atendem aos critérios da pesquisa.
2. O resultado da pesquisa é uma lista de ISNs correspondentes aos registros encontrados.
3. Com essa lista em mãos, o banco acessa diretamente os registros no Data Storage, sem a necessidade de percorrer todo o arquivo.

Benefícios do uso do ISN

Acesso Direto: localização imediata dos registros por meio de seus identificadores internos.
Alto Desempenho: minimiza leituras desnecessárias e reduz significativamente o tempo de resposta das consultas.
Eficiência na Recuperação de Dados: permite que grandes volumes de informações sejam acessados com rapidez e baixo custo de processamento.

É justamente essa arquitetura baseada em ISNs e índices invertidos que faz do Adabas um banco de dados reconhecido por sua elevada performance em ambientes de missão crítica e processamento de grandes volumes de dados.
Leia Mais

Adabas Operator Commands: Referência Completa

O banco de dados Adabas tem um conjunto de comandos operacionais que permitem aos administradores e operadores monitorar, controlar e gerenciar o ambiente de banco de dados em tempo real. Conhecidos como Adabas Operator Commands, esses comandos são essenciais para tarefas de administração, diagnóstico de problemas, análise de desempenho e execução de operações de manutenção sem a necessidade de interromper o banco de dados. Por meio desses comandos, é possível consultar o estado da sessão, exibir estatísticas, controlar logs, gerenciar recursos, obter informações sobre usuários e transações, além de executar diversas ações administrativas de forma rápida e eficiente. Neste artigo, exploraremos os principais Adabas Operator Commands, apresentando sua finalidade, sintaxe e exemplos práticos de utilização no dia a dia da administração de ambientes Adabas.

ADAEND

Use o comando ADAEND para encerrar a sessão Adabas normalmente. Após feito este comando não serão aceitos novos usuários para acessar o banco de dado. ET é a lógica de atualização continuou até o fim da transação atual lógica para cada usuário. Depois de toda a atividade foi concluída, conforme descrito acima, a sessão é encerrada Adabas. Em ambientes de núcleo cluster, a opção global pode ser usado para encerrar a sessão Adabas em todos os núcleos de cluster ativo.
STC03611  F AAFAI222,ADAEND                                                
STC01517  +ADAN51 00222 2011-02-09 16:56:12 Operator type-in: ADAEND        
STC01517  +ADAN42 00222 2011-02-09 16:56:12 Function accepted              
STC01517  +ADAM97 00222 This ASCB/initiator will be terminated by MVS at EOJ
STC01517  IEF404I AAFAI222 - ENDED - TIME=16.56.12                          
STC01517  IEF352I ADDRESS SPACE UNAVAILABLE                                
STC01517  $HASP395 AAFAI222 ENDED

ALOCKF

Use o comando ALOCKF bloquear um arquivo com antecedência para garantir que um usuário EXU, EXF, ou UTI terá o controle exclusivo do arquivo especificado. O avanço bloqueio impede que novas operações possam usar o arquivo. Uma vez que todos os usuários atuais deixaram de usar o arquivo, o usuário tem o controle exclusivo do lock. Até então, o usuário controle exclusivo precisa esperar. Para remover o bloqueio do avanço sem executar o utilitário, consulte o comando RALOCKF. Este comando não está disponível no modo single user ou para um núcleo só de leitura.

AOSLOG

Use o comando AOSLOG para ativar ou desativar o log de registro do Adabas em determinadas chamadas que modificar o núcleo para DD/PRINT. Essas chamadas são emitidos por ADADBS OPERCOM ou Adabas Online System. Read e display as chamadas não são registrados.

ASYTVS

Use o comando ASYTVS é para ativar ou desativar o asynchronous flushing of buffers no número de série do volume.

CANCEL

Use o comando CANCEL para cancelar a sessão Adabas imediatamente. Todo o processamento que estiver usando o banco de dados será imediatamente suspensa. A rotina de autorestart a ser executada durante a inicialização da sessão Adabas que vai resolver as pendencias que faltaram a ser feitas no banco. Em ambientes de cluster núcleo, a opção global pode ser usado para cancelar a sessão Adabas em todos os núcleos de cluster ativo.

CLOGMRG

Use o comando CLOGMRG dinamicamente modifica a configuração do parâmetro ADARUN CLOGMRG. O comando CLOGMRG é válida apenas em ambientes de cluster. É global, por definição, e afeta todos os núcleos do cluster.

CLUFREEUSER

O comando CLUFREEUSER é válida apenas em ambientes de cluster. Pode ser emitida para o núcleo local, ou, com a opção global, contra todos os núcleos ativos e inativos do cluster. Use o comando CLUFREEUSER para excluir restos de agrupar os elementos da tabela de usuário (UTEs ou PLXUSERs) armazenadas em comum que já não estão associados a elementos do usuário fila (UQEs) em um núcleo.

CT

Use o comando do CT para dinamicamente substituir o valor do parâmetro ADARUN do banco, ou seja, o número máximo de segundos que podem decorrer do tempo um comando Adabas foi concluída até que os resultados são retornados para o usuário através da comunicação interregion (que depende da particular sistema operacional usado). A configuração mínima é 1, o máximo é 16777215. Em ambientes de cluster núcleo, o comando do CT é, por definição, global e afeta todos os núcleos do cluster.
STC00291  F AAFAI220,CT=301                                                   
STC00500  +ADAN41 00220 2020-05-20 15:19:47 Function completed 

DAUQ

Use o comando DAUQ para mostrar os elementos do usuário fila de usuários que tenham executado o comando, pelo menos, um Adabas nos últimos 15 minutos.
STC03611  F AAFAI230,DAUQ                                            
STC08763  +ADAN11 00230 2011-02-09 16:58:11 User=00000001,JN=AAFBR230
STC08763  +                       ,TID=G.K.....(C749D29035CA7002)    
STC08763  +                                   TY= E,LA=19 S          
STC08763  +ADAN11 00230 2011-02-09 16:58:11 User=00000002,JN=AAFBR230
STC08763  +                       ,TID=G.K.....(C749D29035CACF42)    
STC08763  +                                   TY= E,LA=19 S          
STC08763  +ADAN11 00230 2011-02-09 16:58:11 User=00000287,JN=AAFCINID
STC08763  +                       ,TID=AA950041(C1C1F9F5F0F0F4F1)    
STC08763  +                                   TY= E,LA=97 S          
STC08763  +ADAN11 00230 2011-02-09 16:58:11 User=00000288,JN=AAFCINID
STC08763  +                       ,TID=AA950042(C1C1F9F5F0F0F4F2)    
STC08763  +                                   TY= E,LA=89 S          
STC08763  +ADAN41 00230 2011-02-09 16:58:11 Function completed

DCQ

Use o comando DCQ para mostrar todos os elementos de comando postado fila (CQEs). O comando DCQ mostra ID de cada usuário do CQE, nome do trabalho e tamanho do buffer.
STC03611  F AAFAI222,DCQ                                      
STC01517  +ADAN14 00222 2011-02-09 16:54:06 Current CQ is empty
STC01517  +ADAN41 00222 2011-02-09 16:54:06 Function completed

DDIB

Use o comando DDIB para exibir o bloco de integridade de dados (DIB). Este bloco contém entradas indicando quais utilitários Adabas estão ativos e os recursos que estão sendo utilizados por cada utilitario.
STC03611  F AAFAI222,DDIB                                                      
STC01517  +ADAN25 00222 2011-02-09 16:53:06 DIB                                
STC01517  +ADAN25 00222 2011-02-09 16:53:06 Jobname=AAFAI222,Starttime=16:42:29
STC01517  +                                                                    
STC01517  +ADAN41 00222 2011-02-09 16:53:06 Function completed         

DDSF

Use o comando DDSF para mostrar Adabas Delta Save status Facility. O comando DDSF só está disponível se o núcleo Adabas é executado com o parâmetro ADARUN DSF=YES.

DELUF

Use o comando DELUF para excluir todos os usuários que estão usando o arquivo especificado. Todas as transações abertas dos usuários excluídos são backed out. Este comando não exclui usuários EXF ou UTI. O comando DELUF corresponde ao ADADBS OPERCOM STOPF=file-number,PURGE function. Atenção - Se Adabas está sendo executado com ADARUN OPENRQ=NO (especificando que os usuários não são obrigados a emitir OP como o primeiro comando da sessão), execute o comando DELUF somente se tiver certeza de que os usuários a ser excluído não estão mais ativos. Se um usuário com uma transação aberta é excluído, mas depois retorna (através do envio de um comando), não há nenhuma indicação sobre a devolução da transação. Se o usuário continuar a operação, inconsistências lógicas no banco de dados pode ocorrer.

DELUI

Use o comando DELUI para excluir todos os usuários que não tenham executado um comando durante o intervalo de tempo especificado (em segundos). Todas as transações abertas dos usuários excluídos são recuou. Este comando não exclui usuários EXF ou UTI. O comando DELUI corresponde ao ADADBS OPERCOM STOPI=time,PURGE function. Atenção - Se Adabas está sendo executado com ADARUN OPENRQ=NO (especificando que os usuários não são obrigados a emitir OP como o primeiro comando da sessão), execute o comando DELUI somente se tiver certeza de que os usuários a ser excluído não estão mais ativos. Se um usuário com uma transação aberta é excluído, mas depois retorna (através do envio de um comando), não há nenhuma indicação sobre a devolução da transação. Se o usuário continuar a operação, inconsistências lógicas no banco de dados pode ocorrer.
STC00291  F AAFAI220,DELUI=900                                                
STC00500  +ADAN42 00220 2020-05-20 15:21:32 Function accepted

DFILES

Use o comando DFILES para mostrar o número de usuários a acessando, atualizando, ou controlar ou um arquivo específico (n) ou uma série de arquivos individuais, especificado em uma lista (N1,..., n5). Um máximo de cinco arquivos podem ser especificados na lista. Os usuários são exibidos pelo nome de trabalho e identificação do usuário Adabas atribuído e listado pelo arquivo.
STC03611  F AAFAI230,DFILES=21,40,41,42,43                        
STC08763  +ADAN31 00230 2011-02-09 17:07:19 File= 00021 is not used
STC08763  +ADAN31 00230 2011-02-09 17:07:19 File= 00040 is not used
STC08763  +ADAN31 00230 2011-02-09 17:07:19 File= 00041 is not used
STC08763  +ADAN31 00230 2011-02-09 17:07:19 File= 00042 is not used
STC08763  +ADAN31 00230 2011-02-09 17:07:19 File= 00043 is not used
STC08763  +ADAN41 00230 2011-02-09 17:07:19 Function completed

DFILUSE

Use o comando DFILUSE para mostrar o número de comandos total processado até agora para o arquivo especificado durante a sessão atual. A contagem é exibido na mensagem ADAN33 núcleo.
STC02760  F AAFAI222,DFILUSE=22
STC03141  +ADAN33 00222 2015-08-25 16:32:37 File= 22    Usage=0
STC03141  +ADAN41 00222 2015-08-25 16:32:37 Function completed

DHQ

Use o comando DHQ para exibir até cinco elementos a fila de espera.
STC02760  F AAFAI222,DHQ
STC03141  +ADAN07 00222 2015-08-25 16:33:57 Current HQ is empty
STC03141  +ADAN41 00222 2015-08-25 16:33:57 Function completed

DHQA

Use o comando DHQA para exibir até 1.000 elementos fila de espera.
STC02760  F AAFAI222,DHQA
STC03141  +ADAN07 00222 2015-08-25 16:34:25 Current HQ is empty
STC03141  +ADAN41 00222 2015-08-25 16:34:25 Function completed 

DLOCKF

Use o comando DLOCKF para dar display dos files locked.
STC02760  F AAFAI222,DLOCKF
STC03141  +ADAN30 00222 2015-08-25 16:20:17 No files locked
STC03141  +ADAN41 00222 2015-08-25 16:20:17 Function completed 

DNC

Use o comando DNC para mostrar o número de elementos de comando postado fila de espera para ser selecionado.
STC02760  F AAFAI222,DNC
STC03141  +ADAN13 00222 2015-08-25 16:21:02 Number of posted CQEs = 0
STC03141  +ADAN41 00222 2015-08-25 16:21:02 Function completed

DNFV

Use o comando DNFV para mostrar as variáveis de arquivos do núcleo, ou seja, informações sobre o uso atual do arquivo. Este comando fornece informações sobre os arquivos em uso em um determinado ponto no tempo. Ele também indica que outros núcleos tem o controle de arquivo exclusivo, se, por exemplo, um programa do usuário recebe uma resposta 148, subcode 15.
STC02760  F AAFAI222,DNFV
STC03141  +FNR=00008  A=Y U=  ID=      CA=00001   CU=00000
STC03141  +FNR=00009  A=Y U=Y ID=      CA=00001   CU=00000
STC03141  +FNR=00015  A=Y U=  ID=      CA=00001   CU=00000
STC03141  +ADAN41 00222 2015-08-25 16:21:52 Function completed

DNH

Use o comando DNH para mostrar o número de ISNs atualmente na hold queue (fila de espera).
STC02760  F AAFAI222,DNH
STC03141  +ADAN06 00222 2015-08-25 16:22:32 Number of HQEs = 0
STC03141  +ADAN41 00222 2015-08-25 16:22:32 Function completed 

DNU

Use o comando DNU para exibir o número de usuários atuais.
STC02760  F AAFAI222,DNU
STC03141  +ADAN09 00222 2015-08-25 16:23:05 Number of UQEs = 2
STC03141  +ADAN41 00222 2015-08-25 16:23:05 Function completed 

DONLSTAT

Use o comando DONLSTAT para exibir o status de cada reorder ativo, invert online, ou Event Replicator processo de estado inicial juntamente com a identificação do processo.
16.58.09 STC08167  +ADAN35 00240 2019-02-20 16:58:08 Online processes:
16.58.09 STC08167  +ADAN35 00240 2019-02-20 16:58:08 INVERT,DE=AU,FILE=297,Cur-ISN=52241905
16.58.09 STC08167  +ADAN35 00240 2019-02-20 16:58:08 ID=X'000036A2',Active
16.58.09 STC08167  +ADAN35 00240 2019-02-20 16:58:08 INVERT,DE=AZ,FILE=298,Cur-ISN=16648679
16.58.09 STC08167  +ADAN35 00240 2019-02-20 16:58:08 ID=X'000036DC',Active
16.58.09 STC08167  +ADAN41 00240 2019-02-20 16:58:08 Function completed 

DPARM

Use o comando DPARM para apresentar os parâmetros da sessão Adabas atualmente em vigor.
STC03611  F AAFAI222,DPARM                                                    
STC01517  +ADAN16 00222 2011-02-09 16:43:07 READONLY=NO,UTIONLY=NO            
STC01517  +ADAN16 00222 2011-02-09 16:43:07 ASYTVS=YES,AOSLOG=NO              
STC01517  +ADAN16 00222 2011-02-09 16:43:07 NC=250,NH=3000,NT=20,NU=3000      
STC01517  +ADAN16 00222 2011-02-09 16:43:07 LBP=61467904,LFP=12288000,LWP=33000
STC01517  +ADAN16 00222 2011-02-09 16:43:07 LI=300000,LP=25000,LQ=150000,LS=300
STC01517  +ADAN16 00222 2011-02-09 16:43:07 LFIOP=15360000,FMXIO=1            
STC01517  +ADAN16 00222 2011-02-09 16:43:07 TT=420,TNAA=900,TNAE=900,CT=300    
STC01517  +ADAN16 00222 2011-02-09 16:43:07 TNAX=120,MXTT=3600,MXTNA=3600      
STC01517  +ADAN16 00222 2011-02-09 16:43:07 Logging                            
STC01517  +                                 LOGCB                              
STC01517  +ADAN41 00222 2011-02-09 16:43:07 Function completed

DPPT

Utilize o comando DPPT para exibir a Parallel Participant Table (PPT), ou Tabela de Participantes Paralelos. Esse comando permite visualizar o bloco interno do próprio PPT no núcleo do sistema. As informações apresentadas pelo DPPT são de natureza interna do Adabas e têm como principal objetivo auxiliar a equipe de suporte técnico da Software AG na análise e diagnóstico do ambiente.
STC02760  F AAFAI222,DPPT
STC03141  +ADAN24 00222 2015-08-25 16:24:43 Display PPT RABNs 0000281F to 00002
STC03141  +ADAN24 00222 2015-08-25 16:24:43
STC03141  +ADAN24 00222 2015-08-25 16:24:43          PPT RABN: 000028FF
STC03141  +ADAN24 00222 2015-08-25 16:24:43 Number of entries: 01
STC03141  +ADAN24 00222 2015-08-25 16:24:43 Nucleus indicator: 50
STC03141  +ADAN24 00222 2015-08-25 16:24:43             NUCID: 0000
STC03141  +ADAN24 00222 2015-08-25 16:24:43  PPT Entry length: 0022
STC03141  +ADAN24 00222 2015-08-25 16:24:43          Entry ID: E9
STC03141  +ADAN24 00222 2015-08-25 16:24:43 Dataset=/ADABAS/DBID222/WORK1/
STC03141  +ADAN41 00222 2015-08-25 16:24:43 Function completed

DRES

Use o comando DRES para mostrar o pool space e o mais alto nível de uso (high water mark) chegou até agora durante a sessão atual, contagem de registros e por cento para os seguintes recursos:
 STC08623  F AAFAI222,DRES                                                      
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 Resource       Size       Current  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 AB  -Pool     3276800         N/A  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 CQ  -Pool       48000           0  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 FI  -Pool    12288000           0  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 HQ  -Pool       84056           0  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 TBI -Pool      300000           0  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 TBS -Pool      150000           0  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 UQ  -Pool      925232         924  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 UQF -Pool      288360          72  
 STC01129  +ADAN28 00222 2018-07-26 08:25:00 WORK-Pool     3300000         416  
 STC01129  +ADAN41 00222 2018-07-26 08:25:00 Function completed 

DSTAT

Exibe o atual status de operação ADALOD, ADAORD, ADARES, ADASAV, ADAULD ou ADAVAL. A seguir, exemplos da saída resultante quando o DSTAT é inserido durante operações específicas do utilitário Adabas:
STC08623  F AAFAI080,DSTAT                                                    
STC02353  ADAN17 00080 2018-07-27 18:35:08 Online database save running        
STC02353  ADAN17 00080 2018-07-27 18:35:08 Read I/Os A=1073149,D=9033462,W=264
STC02353  ADAN17 00080 2018-07-27 18:35:08 Write I/O A=27886,D=11518,W=4785537
STC02353  ADAN17 00080 2018-07-27 18:35:08 Nr. of commands=79775254,Buffer effi
STC02353  ADAN17 00080 2018-07-27 18:35:08 Nr. of Fmt-Tran.=16245,Nr. of Fmt-Ov
STC02353  ADAN17 00080 2018-07-27 18:35:08 Thread001=79341190 commands        
STC02353  ADAN17 00080 2018-07-27 18:35:08 Thread002=431824 commands          
STC02353  ADAN17 00080 2018-07-27 18:35:08 Thread003=2240 commands            
STC02353  ADAN41 00080 2018-07-27 18:35:08 Function completed 

Quando não esta rodando o nada;
STC03611  F AAFAI222,DSTAT                                                    
STC04070  +ADAN17 00222 2011-02-10 13:54:13 Read I/Os A=365,D=2,W=3            
STC04070  +ADAN17 00222 2011-02-10 13:54:13 Write I/O A=5,D=0,W=2              
STC04070  +ADAN17 00222 2011-02-10 13:54:13 Nr. of commands=1,Buffer efficiency
STC04070  +ADAN17 00222 2011-02-10 13:54:13 Nr. of Fmt-Tran.=6,Nr. of Fmt-Ovwr.
STC04070  +ADAN17 00222 2011-02-10 13:54:13 Thread001=1 commands              
STC04070  +ADAN41 00222 2011-02-10 13:54:13 Function completed 

DTH

Use o comando DTH para dar display do status das threads.
STC03611  F AAFAI222,DTH                                      
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=1,ST=AA ,Use=2
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=2,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=3,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=4,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=5,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=6,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=7,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=8,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=9,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=10,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=11,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=12,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=13,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=14,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=15,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=16,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=17,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=18,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=19,ST=UU ,Use=0
STC04070  +ADAN18 00222 2011-02-10 13:55:03 THN=20,ST=UU ,Use=0
STC04070  +ADAN41 00222 2011-02-10 13:55:03 Function completed 

DUQ

Use o comando DUQ para exibir até cinco elementos da fila ativos e inativos da user queue.
STC02760  F AAFAI222,DUQ
STC03141  +ADAN11 00222 2015-08-25 16:29:25 User=00000001,JN=AAFCINID
STC03141  +                       ,TID=DBA00551(C1C1F0F1F0F5F5F1)
STC03141  +                                   TY= U,LA=730 S
STC03141  +ADAN11 00222 2015-08-25 16:29:25 User=00000004,JN=AAFCINID
STC03141  +                       ,TID=DBA00553(C1C1F0F1F0F5F5F3)
STC03141  +                                   TY= E,LA=723 S
STC03141  +ADAN41 00222 2015-08-25 16:29:25 Function completed 

DUQA

Use o comando DUQA para dar display até 100 elementos da user queue.
STC02760  F AAFAI222,DUQA
STC03141  +ADAN11 00222 2015-08-25 16:29:58 User=00000001,JN=AAFCINID
STC03141  +                       ,TID=DBA00551(C1C1F0F1F0F5F5F1)
STC03141  +                                   TY= U,LA=763 S
STC03141  +ADAN11 00222 2015-08-25 16:29:58 User=00000004,JN=AAFCINID
STC03141  +                       ,TID=DBA00553(C1C1F0F1F0F5F5F3)
STC03141  +                                   TY= E,LA=756 S
STC03141  +ADAN41 00222 2015-08-25 16:29:58 Function completed 

DUQE

Use o comando DUQE para mostrar o elemento da user queue para a identificação do usuário especificado Adabas-assigned user ID. O ID do usuário deve ser digitado no formato hexadecimal como segue: -- DUQE=X'A3C1F2' -- Não digite um nome de job no lugar do ID de usuário.

DUUQE

Use o comando DUUQE para exibir elementos de utilitario da user queue.
STC02760  F AAFAI222,DUUQE
STC03141  +ADAN11 00222 2015-08-25 16:40:10 Currently no utility UQE
STC03141  +ADAN41 00222 2015-08-25 16:40:10 Function completed 

FEOFCL

Use o comando FEOFCL para fechar a atual da CLOG (command log) dual ou múltiplo e fazer a troca para o command log para outro log. Esse comando é válido apenas se o comando dual ou múltiplo log está em vigor. Em ambientes de cluster núcleo, a opção global pode ser usado para fechar e mudar de comando duplo ou múltiplo registros em todos os núcleos de cluster ativo.
k f aafai220,FEOFCL                                                            
JOB     NUMBER     Q J O SYST  DEST     PRI  ST      LINES  FORM  FCB  FLASH  
AAFAI220 S.00682   *X   - CPAC            15              0                    
AAFAI220 S.01053    O S A                  9  H         306  STD                
... 34 PERCENT SPOOL UTILIZATION.
Feito a troca
16:36:09        TID    87          COM641/D          User DBA0055      19.03.19
                         ---   System Messages   ---                       UQM1
STC00682  +UEX2   00220 CHAMADA P/ CLOG, FLAGS=X'4800'                        
JOB01054  $HASP100 AAFAC220 ON INTRDR      DBA                   FROM STC00682
STC00682  +UEX2   00220 JOB AAFACLOG   SUBMETIDO                              
STC00682  +UEX2   00220 RETORNO AO NUCLEO, WAITTIME= 000 S                    
STC00682  +ADAL03 00220 2019-03-19 16:36:09 Command-Log DDCLOGR2 started      
STC00682  +ADAN41 00220 2019-03-19 16:36:09 Function completed                
JOB01054  $SI(K)                                                              
          $HASP892 INIT(11)  STATUS=INACTIVE,CLASS=S,NAME=K,ASID=0024          
JOB01054  TSS7000I ADABAST Last-Used 19 Mar 19 16:35 System=CPAC Facility=STC  
JOB01054  TSS7001I Count=01395 Mode=Fail Locktime=None Name=ADABAS DE TESTES  
JOB01054  $HASP373 AAFAC220 STARTED - INIT K    - CLASS S - SYS CPAC          
JOB01054  IEF403I AAFAC220 - STARTED - TIME=16.36.09                          
JOB01054 *CTS001  IEF233A M 0899,PRIVAT,SL,AAFAC220,COPYCLOG,ADABAS.C.DB220.CLO
JOB01054 *IEF233A M 0899,PRIVAT,SL,AAFAC220,COPYCLOG,                          
JOB01054          ADABAS.C.DB220.CLOG.G0003V00                                
JOB01054  CTS014  IEF234E K 0899,,PVT,AAFAC220,COPYCLOG                        
JOB01054  IEF234E K 0899,,PVT,AAFAC220,COPYCLOG                                
JOB01054  -                                              --TIMINGS (MINS.)--  
JOB01054  -STEPNAME PROCSTEP    RC   EXCP   CONN    TCB    SRB  CLOCK   SERV  W
JOB01054  -COPYCLOG             04    296     65    .00    .00     .0   6393  B
JOB01054  IEF404I AAFAC220 - ENDED - TIME=16.36.14                            
JOB01054  -AAFAC220 ENDED.  NAME-DBA                  TOTAL TCB CPU TIME=    .0
JOB01054  $HASP395 AAFAC220 ENDED                                              
          $HASP309 INIT K    INACTIVE ******** C=S                            
STC08935 @66 DF3001A  *** RVS 5.1  ***                                        
******************************** BOTTOM OF DATA *******************************
Select Function:                                                       CONSOLE
Operand/Command:                                                              
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
                                   Retrv  Up    Down        Left  Right

FEOFPL

Use o comando FEOFPL para fechar o registro de protection log atual. Este comando é valido para dual ou múltipla de dados para mudar para o registo de uma outra protection log. Em ambientes usando núcleo cluster, a opção global pode ser usado para fechar e mudar a dupla proteção ou múltiplos registros em todos os núcleos de cluster ativo.
K f aafai210,FEOFPL                                                            
JOB     NUMBER     Q J O SYST  DEST     PRI  ST      LINES  FORM  FCB  FLASH  
AAFAI210 S.05061   *X   - CPAC            15              0                    
... 34 PERCENT SPOOL UTILIZATION.                                               
Feita a troca
16:40:09        TID    87          COM641/D          User DBA0055      19.03.19
                         ---   System Messages   ---                       UQM1
STC05061  +UEX2   00210 CHAMADA P/ PLOG, FLAGS=X'4000'                        
JOB01060  $HASP100 AAFAP210 ON INTRDR      DBA                   FROM STC05061
STC05061  +UEX2   00210 JOB AAFAPLOG   SUBMETIDO                              
STC05061  +UEX2   00210 RETORNO AO NUCLEO, WAITTIME= 000 S                    
STC05061  +ADAN21 00210 2019-03-19 16:40:09 Protection log PLOGR2 started      
STC05061  +ADAN41 00210 2019-03-19 16:40:09 Function completed                
JOB01060  $SI(K)                                                              
          $HASP892 INIT(11)  STATUS=INACTIVE,CLASS=S,NAME=K,ASID=0024          
JOB01060  TSS7000I ADABASP Last-Used 19 Mar 19 09:38 System=CPAC Facility=BATCH
JOB01060  TSS7001I Count=30801 Mode=Fail Locktime=None Name=ADABAS DE PRODUCAO
JOB01060  $HASP373 AAFAP210 STARTED - INIT K    - CLASS S - SYS CPAC          
JOB01060  IEF403I AAFAP210 - STARTED - TIME=16.40.10                          
JOB01060 *CTS001  IEF233A M 089B,PRIVAT,SL,AAFAP210,COPYPLOG,ADABAS.C.DB210.PLO
JOB01060 *IEF233A M 089B,PRIVAT,SL,AAFAP210,COPYPLOG,                          
JOB01060          ADABAS.C.DB210.PLOG.G0906V00                                
JOB01061  -ICEGEN03             00     35      8    .00    .00     .0   2094  S
JOB01061  -SMTP1             FLUSH      0      0    .00    .00     .0      0  S
JOB01061  IEF404I ABAPR001 - ENDED - TIME=16.40.13                            
JOB01061  -ABAPR001 ENDED.  NAME-PRODUCAO             TOTAL TCB CPU TIME=    .0
JOB01061  $HASP395 ABAPR001 ENDED                                              
          $HASP309 INIT F    INACTIVE ******** C=3                            
JOB01060  CTS014  IEF234E K 089B,VC2196,PVT,AAFAP210,COPYPLOG                  
JOB01060  IEF234E K 089B,VC2196,PVT,AAFAP210,COPYPLOG                          
JOB01060  -                                              --TIMINGS (MINS.)--  
JOB01060  -STEPNAME PROCSTEP    RC   EXCP   CONN    TCB    SRB  CLOCK   SERV  W
JOB01060  -COPYPLOG             00    564    162    .00    .00     .0  18734  B
JOB01060  IEF404I AAFAP210 - ENDED - TIME=16.40.15                            
JOB01060  -AAFAP210 ENDED.  NAME-DBA                  TOTAL TCB CPU TIME=    .0
JOB01060  $HASP395 AAFAP210 ENDED                                              
          $HASP309 INIT K    INACTIVE ******** C=S                            
STC08935 @66 DF3001A  *** RVS 5.1  ***                                        
******************************** BOTTOM OF DATA *******************************
Select Function:                                                       CONSOLE
Operand/Command:                                                              
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
                                   Retrv  Up    Down        Left  Right


FMXIO

Use o comando FMXIO para mudar dinamicamente a configuração do parâmetro ADARUN FMXIO.

HALT

Use o comando HALT para realizar uma BT (back out transaction) para a sessão de cada usuário ativo que estiver usando a lógica de ET, em seguida, encerrar a sessão Adabas. Não serão gerados dumps produzidos usando o comando HALT. Em ambientes de cluster núcleo, a opção global pode ser usado para executar um BT para todas as sessões de usuários ativos usando a lógica ET e encerra a sessão Adabas em todos os núcleos de cluster ativo.
STC08623  F AAFAI220,HALT                                                      
STC00647  +ADAN51 00220 2018-07-24 17:25:07 Operator type-in: HALT            
STC00647  +ADAN42 00220 2018-07-24 17:25:07 Function accepted                  

--- CLOG pedido - Plog este banco não tem
STC00647  +UEX2   00220 CHAMADA P/ CLOG, FLAGS=X'4800'                        
JOB07430  $HASP100 AAFAC220 ON INTRDR      DBA                   FROM STC00647
STC00647  +UEX2   00220 JOB AAFACLOG   SUBMETIDO                              
STC00647  +UEX2   00220 RETORNO AO NUCLEO, WAITTIME= 000 S                    
JOB07430  $SI(K)                                                              
STC00647  +ADAM97 00220 This ASCB/initiator will be terminated by MVS at EOJ  
          $HASP892 INIT(11)  STATUS=INACTIVE,CLASS=S,NAME=K,ASID=0024          
JOB07430  $HASP373 AAFAC220 STARTED - INIT K    - CLASS S - SYS CPAC          
JOB07430  IEF403I AAFAC220 - STARTED - TIME=17.25.08                          
STC00647  IEF404I AAFAI220 - ENDED - TIME=17.25.08                            
STC00647  IEF352I ADDRESS SPACE UNAVAILABLE                                    
STC00647  $HASP395 AAFAI220 ENDED

O banco saiu do ar
IEA989I SLIP TRAP ID=X33E MATCHED.  JOBNAME=*UNAVAIL, ASID=00BC.    
JOB07430 *CTS001  IEF233A M 089A,PRIVAT,SL,AAFAC220,COPYCLOG,ADABAS.C.DB220.CLO
JOB07430 *IEF233A M 089A,PRIVAT,SL,AAFAC220,COPYCLOG,                          
JOB07430          ADABAS.C.DB220.CLOG.G0001V00                                
JOB07430  IEC705I TAPE ON 089A,VC1069,SL,COMP,AAFAC220,COPYCLOG,ADABAS.C.DB220.
JOB07430  IEC205I DDSIAUS1,AAFAC220,COPYCLOG,FILESEQ=1, COMPLETE VOLUME LIST,  
JOB07430  DSN=ADABAS.C.DB220.CLOG.G0001V00,VOLS=VC1069,TOTALBLOCKS=1          
JOB07430  CTS014  IEF234E K 089A,VC1069,PVT,AAFAC220,COPYCLOG                  
JOB07430  IEF234E K 089A,VC1069,PVT,AAFAC220,COPYCLOG                          
JOB07430  -                                              --TIMINGS (MINS.)--  
JOB07430  -STEPNAME PROCSTEP    RC   EXCP   CONN    TCB    SRB  CLOCK   SERV  W
JOB07430  -COPYCLOG             00    346    120    .00    .00     .0   9053  B
JOB07430  IEF404I AAFAC220 - ENDED - TIME=17.25.13

LOCKF

Use o comando LOCKF para bloquear o arquivo especificado. Este comando bloqueia até para utilitarios o acesso.
-- Prendendo o arquivo
STC08623  F AAFAI220,LOCKF=26                                                  
STC00647  +ADAN41 00220 2018-07-24 17:09:23 Function completed                

-- Display dos arquivos presos
STC08623  F AAFAI220,DLOCKF                                                    
STC00647  +ADAN30 00220 2018-07-24 17:09:34 Files=00026                        
STC00647  +ADAN41 00220 2018-07-24 17:09:34 Function completed                

-- Despredendo o arquivo preso
STC08623  F AAFAI220,UNLOCKF=26                                                
STC00647  +ADAN41 00220 2018-07-24 17:10:12 Function completed                

-- Display dos arquivos presos
STC08623  F AAFAI220,DLOCKF                                                    
STC00647  +ADAN30 00220 2018-07-24 17:10:20 No files locked                    
STC00647  +ADAN41 00220 2018-07-24 17:10:20 Function completed

LOCKU

Use o comando LOCKU para bloquear o arquivo especificado para todos os usuários. Utilitários Adabas podem usar o arquivo especificado normalmente.
-- Prendendo o arquivo
STC08623  F AAFAI220,LOCKU=26                                                  
STC00647  +ADAN41 00220 2018-07-24 17:13:49 Function completed                

-- Display dos arquivos presos
STC08623  F AAFAI220,DLOCKF                                                    
STC00647  +ADAN30 00220 2018-07-24 17:14:04 Files=00026                        
STC00647  +ADAN41 00220 2018-07-24 17:14:04 Function completed                

-- Liberando o arquivo preso
STC08623  F AAFAI220,UNLOCKU=26                                                
STC00647  +ADAN41 00220 2018-07-24 17:14:12 Function completed                

-- Display dos arquivos presos
STC08623  F AAFAI220,DLOCKF                                                    
STC00647  +ADAN30 00220 2018-07-24 17:14:20 No files locked                    
STC00647  +ADAN41 00220 2018-07-24 17:14:20 Function completed

LOCKX

Use o comando LOCKX para bloquear o arquivo especificado para todos os usuários, exceto os usuários EXU ou EXF. Usuários EXU e EXF podem usar o arquivo normalmente. O lock é liberada automaticamente quando um usuário emite um comando OP.
-- Prendendo o arquivo
STC08623  F AAFAI220,LOCKX=26                                                  
STC00647  +ADAN41 00220 2018-07-24 17:13:49 Function completed                

-- Display dos arquivos presos
STC08623  F AAFAI220,DLOCKF                                                    
STC00647  +ADAN30 00220 2018-07-24 17:14:04 Files=00026                        
STC00647  +ADAN41 00220 2018-07-24 17:14:04 Function completed                

-- Liberando o arquivo preso
STC08623  F AAFAI220,UNLOCKX=26                                                
STC00647  +ADAN41 00220 2018-07-24 17:14:12 Function completed                

-- Display dos arquivos presos
STC08623  F AAFAI220,DLOCKF                                                    
STC00647  +ADAN30 00220 2018-07-24 17:14:20 No files locked                    
STC00647  +ADAN41 00220 2018-07-24 17:14:20 Function completed


LOGGING

Use o comando LOGGING para iniciar o command logging.

LOGCB

Use o comando LOGCB para iniciar o log do Adabas control block para cada command logged.

LOGFB

Use o comando LOGFB para iniciar o log do buffer de formato para cada command logged.

LOGIB

Use o comando LOGIB para iniciar o log do ISN buffer para cada command logged.

LOGIO

Use o comando LOGIB para iniciar o log de atividade do Adabas I/O para cada command logged.

LOGRB

Use o comando LOGRB para iniciar o log de gravação do buffer para cada command logged.

LOGSB

Use o comando LOGSB para iniciar o log no search buffer para cada command logged.

LOGUX

Use o comando LOGUX para iniciar o log de dados do user exit B para inclusão no registro de CLOG. Este comando é válido apenas quando CLOGLAYOUT=5.

LOGVB

Use o LOGVB para iniciar no Adabas o log do value buffer para cada command logged.

NOLOGGING

Use comando NOLOGGING para parar ou impedir o log de registro.

NOLOGCB

Use o comando NOLOGCB para parar ou impedir o log do Adabas control block.

NOLOGFB

Use o comando NOLOGFB para parar ou impedir o log do Adabas format buffer.

NOLOGIB

Use o comando NOLOGIB para parar ou impedir o log do Adabas ISN buffer.

NOLOGIO

Use o comando NOLOGIO para parar ou impedir o log do Adabas I/O activity.

NOLOGRB

Use o comando NOLOGRB para parar ou impedir o log do Adabas record buffer.

NOLOGSB

Use o comando NLOGSB para parar ou previnir o log do Adabas search buffer.

NOLOGUX

Use o comando NOLOGUX para parar o log de dados do user exit B inclusão no registro de CLOG. Este comando é válido apenas quando CLOGLAYOUT=5

NOLOGVB

Use o comando NOLOGVB para parar ou impedir o log do Adabas value buffer.

ONLRESUME

Use o comando ONLRESUME para retomar um novo pedido anteriormente suspensa processo do, online reorder, invert, or Event Replicator for Adabas initial-state. Na versão 7.4.4
 STC01746  F AAFAI220,ONLRESUME                                                 
 STC02367  +ADAN43 00220 2022-12-19 07:54:07 Invalid type-in: ONLRESUME 

ONLSTOP

Use o comando para parar o ONLSTOP online reorder, invert, or Event Replicator for Adabas initial-state. O processo continua até o seu próximo ponto de interrupção, a fim de produzir um um consistente estado e, em seguida, encerra após realizar toda a limpeza necessária. Na versão 7.4.4
 STC01746  F AAFAI220,ONLSTOP                                                   
 STC02367  +ADAN43 00220 2022-12-19 07:53:25 Invalid type-in: ONLSTOP

ONLSUSPEND

Use o comando ONLSUSPEND para suspender o online reorder, invert, ou Event Replicator para o Adabas initial-state process. O processo continua até o seu próximo ponto de interrupção, a fim de produzir um consistente estado, realiza uma reminiscência de comando, e entra em um estado onde ele não pode ser selecionado para processamento. Este comando é útil se o processo on-line está consumindo muito dos recursos do núcleo. Na versão 7.4.4
 STC01746  F AAFAI220,ONLSUSPEND                                                
 STC02367  +ADAN43 00220 2022-12-19 07:51:59 Invalid type-in: ONLSUSPEND


RALOCKF

Use o comando RALOCKF para remover o bloqueio do avanço no arquivo especificado (consulte o comando ALOCKF) sem executar o utilitário.

RALOCKFA

Use o comando RALOCKFA para remover o bloqueio do avanço em todos os arquivos para os quais foi criado (consulte o comando ALOCKF) sem executar o utilitário.

RDUMPST

Use o comando RDUMPST para encerrar o online dump status. Este comando é usado normalmente se a execução on-line do utilitário ADASAV foi encerrado de forma anormal.

READONLY

Use o comando READONLY para mudar o status ON ou OFF. Um valor "YES" ON, o valor "NO" é OFF.

REVIEW

Use o comando REVIEW para:
* desativar o Review do Adabas;
* Alterar de hub mode para local mode, ou;
* para especificar ou alterar no Adabas hub Review com o qual nucleo comunica. 

STOPF

Use o comando STOPF para parar todos os usuários que estão usando o arquivo especificado. Todas as transações abertas dos usuários serão paradas imediatamente. Um usuário que esteja usando este file parado (através do envio de um comando) receberá o código de resposta 9. Este comando não pára usuários EXF ou UTI.
STC08623  F AAFAI230,STOPF=498                                                
STC08152  +ADAN34 00230 2018-07-26 07:35:03    users stopped                  
STC08152  +ADAN41 00230 2018-07-26 07:35:03 Function completed              

STOPI

Use o comando STOPI para parar todos os usuários que não tenham executado um comando durante o intervalo de tempo especificado (em segundos). Todas as transações abertas dos usuários serão paradas imediatamente. Um usuário que esteja usando este file que foi parado vai (através do envio de um comando) receberá o código de resposta 9. Este comando não pára usuários EXF ou UTI.
STC08623  F AAFAI230,STOPI=900                                                
STC02861  +ADAN29 00230 2018-07-24 17:21:40 No users stopped                  
STC02861  +ADAN41 00230 2018-07-24 17:21:40 Function completed 

STOPU

Use o comando STOPU para parar e excluir o usuário com o user ID no Adabas atribuído (na forma mostrada nos comandos display), ou parar e excluir todos os usuários com o job name especificado (job-name). Todas as transações abertas dos usuários pararam será feito fora. Cuidado: Se está a definido no Adabas ADARUN OPENRQ=NO (especificando que os usuários não são obrigados a emitir OP como o primeiro comando da sessão), execute o comando STOPU somente se tiver certeza de que os usuários a ser excluído não estão mais ativos. Se um usuário com uma transação aberta é excluído, e depois retorna (através do envio de um comando), não há nenhuma indicação sobre a devolução da transação. Se o usuário continuar a operação, inconsistências lógicas no banco de dados pode ocorrer. Nota - O comando STOPU=X'userid' não é permitida para reordenar os processos on-line ou invertido. Use o ON‌LSTOP=X'identifier'

SYNCC

Use o comando SYNCC para forçar a sincronização de todos os usuários ET. O núcleo de espera para todos os usuários ET para alcançar status de ET.
STC04647  F AAFAI330,SYNCC                                   
STC02860  ADAN41 00330 2026-06-23 09:56:51 Function completed

TCPIP

Use o comando TCPIP para abrir ou fechar uma conexão direta no com link do TCP/IP para o núcleo Adabas ou fechar todas as ligações TCP/IP quando nenhuma URL for especificada. Este comando só é possível quando o parâmetro ADARUN TCPURL é definido como "YES" e todas as condições para essa configuração foram atendidos. Este comando pode ser usado para fechar a URL definida no parâmetro ADARUN TCPURL, ou para abrir ou fechar adicionais ligações TCP/IP. Você deve identificar a universal resource locator (URL) para a ligação de TCP/IP que você deseja abrir ou fechar. A URL é um endereço de 20 bytes em conformidade com a especificação RFC para URLs.
api-name = é um valor de caráter 3-1 identificar a interface de programação de aplicativo (API) para usar. Ambas as APIs para o IBM TCP/IP (HPS, OES) ea API para a Interlink pilha (ILK) são suportados atualmente.

stackid = é um valor de caracter para indentificar de 8-1 a pilha para usar:

* for the HPS API, this is the name of the TCP/IP started task.
* for the OES API, no value is needed.
* for the ILK API, this is the subsystem identifier.

port-number = é um número de caracteres 1-5 em notação decimal.
Examplos
TCPIP=OPEN=ILK://ILZ5:1234
TCPIP=CLOSE=ILK://ILZ5:1234
Para fechar todas as URLs abertas:
TCPIP=CLOSE


TNAA

Use o comando TNAA definir o limite de tempo de atividade não-usuários para acesso somente. Este valor deve ser maior que zero e substitui o valor definido pelo parâmetro ADARUN TNAA. Em ambientes de cluster núcleo, o comando TNAA é global, por definição, e afeta todos os núcleos do cluster.

TNAE

Use o comando TNAE defini o limite de tempo de atividade não-lógica para os usuários ET. Este valor deve ser maior que zero e substitui o valor definido pelo parâmetro ADARUN TNAE. Em ambientes de cluster núcleo, o comando TNAE é global, por definição, e afeta todos os núcleos do cluster.

TNAX

Use o comando TNAX definir o limite de tempo de atividade não-usuários de control users. Este valor deve ser maior que zero e substitui o valor definido pelo parâmetro ADARUN TNAX. Em ambientes de cluster núcleo, o comando TNAX é global, por definição, e afeta todos os núcleos do cluster.

TT

Use o comando TT para definir o limite de tempo de transação para os usuários lógica ET. Este valor deve ser maior que zero e substitui o valor definido pelo parâmetro ADARUN TT. Em ambientes de cluster núcleo, o comando TT é global, por definição, e afeta todos os núcleos do cluster.

UNLOCKF

Use o comando UNLOCKF para desbloquear o arquivo especificado.

UNLOCKU

Use o comando UNLOCKU para desbloquear o arquivo especificado que anteriormente foi bloqueado para todos os usuários não utilitários.

UNLOCKX

Use o comando UNLOCKX para desbloquear o arquivo especificado que anteriormente foi bloqueado para usuários de controle não exclusivo.

UTIONLY

Use o comando UTIONLY para mudar o parâmetro de status ADARUN UTIONLY ON (ligado) ou off (desligado). O default é NO.
Leia Mais

sábado, maio 16, 2026

Entendendo o Modelo de Lista Invertida no Adabas Mainframe

Se você trabalha ou está estudando o Adabas Mainframe, com certeza já ouviu falar que ele é um banco de dados baseado em Listas Invertidas. Mas você sabe o que isso significa na prática e por que essa arquitetura torna o Adabas um dos bancos de dados mais rápidos do mundo? O grande segredo da sua velocidade está na forma como ele indexa e encontra as informações.


O que é uma Lista Invertida?

Para entender o conceito, pense no índice remissivo no final de um livro de história. Se você quiser encontrar todas as páginas que mencionam a palavra "Mainframe", você não lê o livro inteiro. Você vai até o final, procura pela palavra "Mainframe" e vê uma lista com os números das páginas (ex: págs. 45, 112, 204). Uma lista invertida faz exatamente isso no banco de dados: ela mapeia valores específicos (chaves secundárias) e aponta diretamente para os registros que os contêm (chaves primárias ou, no caso do Adabas, os ISNs). Dizemos que a lista é "invertida" porque, em vez de abrirmos um registro para ler quais dados estão lá dentro, nós fazemos o caminho inverso: olhamos para o dado (o valor do índice) para descobrir quais registros possuem aquela informação.

Como funciona no Adabas Mainframe?

No Adabas, essa estrutura é implementada por meio do Associator. Quando você define um campo em um arquivo Adabas como um Descriptor (Descritor), o sistema cria e mantém automaticamente uma lista invertida para ele. O processo de busca funciona em três etapas simples: A Consulta: Seu programa Natural faz uma busca, por exemplo: FIND EMPLOYEES WITH CITY = 'SÃO PAULO'. A Busca na Lista Invertida: O Adabas Nucleus não vai até o arquivo principal (Data Storage) ler registro por registro. Ele vai direto ao Associator, procura o valor 'SÃO PAULO' na lista invertida do campo CITY. O Resultado: A lista invertida responde imediatamente com a lista de todos os ISNs (Internal Sequence Numbers) correspondentes. Com os ISNs em mãos, o Adabas busca os registros exatos. Essa estratégia elimina a necessidade de fazer varreduras completas nas tabelas (Table Scans), tornando as consultas incrivelmente rápidas. Vantagens e Desvantagens das Listas Invertidas Como qualquer escolha de arquitetura tecnológica, o modelo de listas invertidas possui um equilíbrio entre prós e contras que todo desenvolvedor e DBA deve conhecer.

Vantagens

Alta Eficiência de Busca: É ideal para grandes volumes de dados. O tempo de resposta para encontrar registros específicos é praticamente instantâneo, economizando muito MIPS no Mainframe. Consultas Combinadas Rápidas: O Adabas consegue cruzar listas invertidas de descritores diferentes na memória RAM (fazendo operações lógicas como AND, OR, NOT com os ISNs) antes mesmo de tocar no disco para ler os dados reais.

Desvantagens

Espaço em Disco: Embora o Adabas use técnicas avançadas de compactação, manter os índices de listas invertidas exige um espaço considerável no Associator. Custo de Atualização: Nada vem de graça. Sempre que seu programa faz um STORE, DELETE ou modifica um campo descritor com UPDATE, o Adabas precisa atualizar a lista invertida correspondente em tempo real. Se um arquivo tiver descritores demais, as operações de escrita podem se tornar mais pesadas.

Conclusão

Dominar o funcionamento do modelo de lista invertida do Adabas vai muito além de entender uma teoria de banco de dados: é um divisor de águas entre o desenvolvedor júnior e o profissional sênior de Mainframe. Quando você passa a enxergar que o Adabas resolve a maior parte das equações lógicas cruzando listas de ISNs dentro do Associator, antes mesmo de tocar no Data Storage, a sua forma de escrever código Natural muda completamente. Você para de criar estruturas que forçam o banco de dados a fazer varreduras sequenciais desnecessárias e passa a desenhar lógicas cirúrgicas, baseadas em descritores eficientes. Em uma era onde a otimização de recursos é prioridade máxima nas grandes corporações, cada milissegundo de CPU economizado se traduz em redução drástica no consumo de MIPS. Portanto, da próxima vez que você digitar um comando FIND ou READ, lembre-se do mecanismo que está rodando por baixo do capô. O seu código agradece, o desempenho do sistema decola e o DBA da sua empresa certamente vai dormir mais tranquilo.
Leia Mais

Como o Superdescritor salva a performance do seu Programa Adabas

Se você trabalha com desenvolvimento em ambiente Mainframe, já deve ter ouvido a máxima: "MIPS é dinheiro". No Adabas, a diferença entre uma consulta que roda em milissegundos e um processo batch que arrasta o ambiente inteiro está na forma como você modela e acessa suas chaves de busca. Muitos desenvolvedores (especialmente os que estão começando no mundo Natural/Adabas) criam chaves de busca de qualquer jeito. O resultado? Consultas que geram leituras sequenciais pesadas, sobrecarregam a Inverted List no Associator e disparam o consumo de CPU. Hoje, vamos entender o verdadeiro "pulo do gato" da performance no Adabas: a diferença crucial entre Subdescritores e Superdescritores, e como o segundo pode salvar a sua aplicação.

Conceito Rápido

Antes de ir para o código, vamos abrir o capô do Adabas e entender o que cada um faz:

Subdescritor: É uma chave criada a partir de um pedaço de um campo existente.
Exemplo: Você tem o campo DATA-CONTRATO (AAAAMMDD), mas cria um Subdescritor apenas para o ano (AAAA).

Superdescritor: É o verdadeiro campeão da performance. Ele permite combinar múltiplos campos (ou pedaços deles) em uma única chave de busca no Associator.
Exemplo: Você combina COD-CLIENTE + ANO-CONTRATO em um único índice.

O problema: O FIND com múltiplos campos

Imagine que você precisa buscar os contratos de um cliente específico criados no ano de 2026. Uma abordagem muito comum (e altamente ineficiente) é escrever um FIND combinando campos normais no WITH. O que acontece por baixo dos panos? Quando você faz isso, o Adabas precisa ir até a Inverted List do Associator, ler todos os ISNs do cliente X, depois ler todos os ISNs do ano de 2026 e fazer um cruzamento lógico em memória (um AND de listas de ISNs) para só então devolver o resultado. Se o cliente tiver milhões de registros, o Associator vai sofrer, o consumo de MIPS vai para o espaço e a consulta vai demorar.

A Solução: O Superdescritor em Ação

Em vez de fazer o Adabas cruzar duas listas gigantescas no Associator, nós criamos um Superdescritor (vamos chamá-lo de S1) que já nasce com a combinação pronta: COD-CLIENTE + ANO-CONTRATO. Dessa forma, o Adabas não faz cruzamento nenhum. Ele vai direto na árvore de índices do Associator, localiza a chave exata (ex: 123452026) e traz os ISNs instantaneamente. Uma operação que demoraria minutos em arquivos com dezenas de milhões de registros passa a ser imediata.

Exemplo Prático em Natural: O Antes e o Depois

Para ficar claro, vamos ver como muda o código e o comportamento do banco de dados. 🔴 Abordagem Ruim (Consome MIPS e gera overhead no Associator) Neste cenário, estamos usando dois campos descritores separados. O Adabas terá que cruzar as duas listas de ISNs em tempo de execução.
* TRADICIONAL: Filtro composto por descritores separados
FIND CONTRATOS-VIEW WITH CLIENTE-ID = #CLI-PROCURADO
                     AND ANO-CONTRATO = '2026'
  /* O Adabas lê a lista do cliente, lê a lista do ano,
  /* faz a intersecção de ISNs e depois busca no DATA Storage.
  DISPLAY CONTRATO-NUM STATUS VALOR
END-FIND

O Pulo do Gato com Superdescritor

Aqui, usamos o Superdescritor SUPER-CLI-ANO (que é a fusão de CLIENTE-ID e ANO-CONTRATO).
* OTIMIZADO: Busca direta utilizando o Superdescritor (S1)
* O formato da busca concatena as duas variáveis em uma única chave
FIND CONTRATOS-VIEW WITH SUPER-CLI-ANO = #CHAVE-COMBINADA
  /* O Adabas vai direto no endereço exato da combinação.
  /* Zero cruzamento de listas, resposta instantânea!
  DISPLAY CONTRATO-NUM STATUS VALOR
END-FIND
Dica de Performance: Repare que no segundo exemplo, a busca lógica no Associator tornou-se de indexação direta. O ganho de velocidade aqui é exponencial conforme o tamanho do arquivo cresce.

Subdescritor vs. Superdescritor

Para não errar na arquitetura do seu arquivo, siga essa regra de ouro:
Cenário Descritor Justificativa
Preciso filtrar relatórios ou telas por apenas uma parte de um campo (ex: apenas o mês de uma data, ou os primeiros dígitos de um CEP). Sub Evita que você precise criar um campo redundante no Data Storage apenas para guardar um pedaço de informação.
Tenho telas de consulta ou processos batch repetitivos que filtram por dois ou mais campos fixos (ex: Empresa + Filial + Status). Super Evita o cruzamento de listas de ISNs no Associator. A combinação cria um atalho definitivo direto para o dado.
Leia Mais

O que acontece no Adabas depois do END TRANSACTION?

Se você programa em Natural, com certeza usa os comandos STORE, UPDATE e o famoso END TRANSACTION (ET) todos os dias. Mas você já parou para pensar no que acontece "por baixo do capô" do Mainframe quando o código passa por essas linhas? Muitos desenvolvedores enxergam o Adabas como uma caixa preta. Existe uma barreira invisível entre o código Natural e o comportamento do Adabas Nucleus. Hoje, vamos quebrar essa barreira e entender a jornada do dado pelas três principais áreas do Adabas: o Work, o Data e o Associator.

Os Três Pilares do Adabas

Antes de simularmos os comandos, precisamos alinhar quem é quem na arquitetura do Adabas:

Data Storage: É onde o dado bruto realmente mora. Os registros são armazenados de forma compactada e recebem um endereço físico chamado ISN (Internal Sequence Number).

Associator: É o "cérebro" das buscas. Ele não guarda os dados textuais, mas sim os índices (Descriptors), a árvore de inversão e o mapeamento de qual ISN corresponde a qual local físico no Data Storage.
Adabas Fundamentals 035 Adabas Fundamentals 036 Adabas Fundamentals 037
Work: A área dinâmica. Funciona como o diário de bordo e a rede de segurança do Adabas. É aqui que o Nucleus gerencia as transações ativas (pesquisas, buffers de proteção e logs de rollback). A Jornada do Dado: Na Prática Vamos desenhar o cenário: você tem um mapa de arquivo (DDM) e executa um processo de atualização. O que acontece em cada etapa?

1. O comando STORE ou UPDATE Quando o seu programa Natural executa um STORE ou um UPDATE, o dado não vai direto para o disco definitivo (Data Storage) de forma imediata e síncrona.

A Fila de Comandos: O comando entra na fila do Adabas Nucleus.

A Escrita no Work (Parte 1): O Adabas registra essa intenção de mudança no Work (na área de Log de Proteção - Data Protection Log). Ele precisa guardar o "antes" e o "depois" do registro para o caso de o sistema cair ou de você digitar um BACKOUT TRANSACTION.

Memória RAM (Buffer Pool): O dado atualizado é colocado temporariamente no Buffer Pool do Adabas na memória. Para o seu programa, a operação foi rápida, mas o dado ainda está "volátil".
2. O Momento Crucial: O END TRANSACTION (ET) Aqui está o segredo que desmistifica o mainframe. Quando o Natural processa o END TRANSACTION, o Adabas Nucleus realiza os seguintes passos sequenciais:

Passo 1: Consolidação no WORK O Adabas grava imediatamente no Work o registro de que a transação foi fechada com sucesso (commit). A partir desse milissegundo, se o Mainframe sofrer uma queda de energia, o Adabas sabe que aquela transação foi consolidada e usará o Work para refazer o processo (Autorestart). Os locks (bloqueios) dos registros da sua transação são liberados para outros usuários.

3. O "Trabalho de Fundo": Atualizando o DATA e o ASSOCIATOR Muitos acham que o END TRANSACTION espera o dado gravar no arquivo físico de dados para terminar. Mito! Quem faz isso de forma assíncrona (em background) é o Nucleus, otimizando as E/S (Entradas e Saídas) de disco.

Gravando no DATA Storage: O Nucleus pega os dados que estavam no Buffer Pool (RAM) e os escreve fisicamente nos blocos do Data Storage. Se for um STORE, o registro ganha seu ISN definitivo.

Atualizando o ASSOCIATOR: Se o campo alterado ou inserido for um Descriptor (Index), o Adabas precisa atualizar a árvore de índices. Ele vai até o Associator, localiza o descritor correspondente e adiciona ou altera o vínculo daquele valor com o ISN do registro.

Por que o Programador Natural precisa saber disso? Entender esse fluxo muda o seu jogo por três motivos:

Tamanho das Transações: Se você colocar milhares de STORE/UPDATE sem dar END TRANSACTION, você vai lotar o Work (gerando o temido erro de estouro de área de Work). O Work precisa segurar todas as imagens anteriores até você decidir dar o ET.

Performance de Descriptors: Toda vez que você altera um campo que é Descriptor, lembre-se que o Adabas terá o trabalho duplo de mexer no Data e atualizar a árvore no Associator. Use descritores com sabedoria.

Concorrência: O END TRANSACTION limpa a fila de hold (registros retidos). Segurar um ET por muito tempo em um loop significa travar outros programas que tentam atualizar os mesmos registros.

Conclusão

O END TRANSACTION é o aperto de mãos definitivo entre o seu código Natural e a segurança do Adabas Work. É ele quem garante a propriedade ACID (Atomicidade, Consistência, Isolamento e Durabilidade) no ambiente de alta performance do mainframe.

Da próxima vez que digitar um ET, lembre-se: a mágica acontece no Work primeiro, para garantir a segurança, enquanto o Data e o Associator organizam a casa logo em seguida!

Gostou desse mergulho na arquitetura do Adabas? Deixe nos comentários se você já passou por algum sufoco com estouro de área de Work ou retenção de registros!
Leia Mais

sexta-feira, maio 15, 2026

Excluindo Jobs Automaticamente da Fila do Spool

Em ambientes mainframe com grande volume de processamento diário, é comum a fila do spool acumular jobs antigos, procedimentos ou esquecidos. Além de dificultar consultas operacionais, esse acúmulo pode impactar a organização do ambiente e até consumir recursos desnecessários. Para automatizar essa limpeza, é possível utilizar um JCL executando o SDSF em modo batch, enviando comandos diretamente ao JES para remover jobs antigos de acordo com critérios específicos. O exemplo abaixo mostra uma rotina automatizada para exclusão de jobs na fila do spool.

Esse é o JCL completo

//AAFSPOOL JOB (AAF,TSS),CLAUD,CLASS=S,MSGCLASS=Z
//*UQ ALLOW                                                             
//* --------------------------------------------------------------------
//*                    EXCLUIR JOBS DA FILA DO SPOOL                    
//* --------------------------------------------------------------------
//SDSF     EXEC PGM=SDSF                                                
//ISFOUT   DD SYSOUT=Z                                                  
//ISFIN    DD *                                                         
SET CONSOLE BATCH                                                       
SET DELAY 600                                                           
ULOG                                                                    
/$PO JQ,JM=AAFABSEG,A>7                                                 
/$PO JQ,JM=AAFABSEM,A>7                                                 
/$PO JQ,JM=AAFABDIA,A>1                                                 
/$PO JQ,JM=ALY*,A>6    
/$PO JQ,JM=AT*     
END                    

A opção sobre dias:
Comando Descrição
JM=AAFABSEG,A>7 Remove jobs com mais de 7 dias
JM=AAFABDIA,A>2 Remove jobs com mais de 2 dias
JM=AAFABANO,A>160 Remove jobs antigos acima de 160 dias
JM=AAFSA*,A>1 Remove jobs iniciados com AAFSA com mais de 1 dia
JM=AABS*,A>2 Remove jobs iniciados com AABS com mais de 2 dias

Observação, uso esse job para deletar os jobs dos bancos Adabas, monitoro que o jobo rodou ok e não deleto, coloquei em uma rotina que schedula todos os dias para deletar, menos trabalho e mais otimização
Leia Mais

quinta-feira, maio 14, 2026

Conferência Automatica de Aplicativos no z/OS

Monitorar aplicativos em Mainframe não precisa ser um gargalo operacional. A conferência manual, além de consumir tempo precioso, abre margem para falhas invisíveis — especialmente onde a quantidade de processos ativos é elevada. A chave para um monitoramento resiliente é a automação. Criar rotinas em Natural elimina a conferencia manual, garantindo a precisão total na verificação do ambiente. Vamos aprender a configurar um JCL e codificar dois programas em Natural que monitoram, em tempo real, as STCs essenciais. O resultado é um acompanhamento robusto, com menos carga de trabalho e maior segurança para os serviços críticos do seu ambiente.

Esse é o JCL completo

//AAFSNSTC JOB (AAF,TSS),KATIA,CLASS=S,MSGCLASS=A                               
//*UQ ALLOW                                                                     
//* ----------------------------------------------------------------            
//*       CHECANDO OS APLICATIVOS ONLINE/OFFLINE NO MAINFRAME                   
//*                     150 LINHAS - 133 COLUNAS                                
//* ----------------------------------------------------------------            
//SDSF     EXEC PGM=SDSF,PARM='++150,133'                                       
//ISFOUT   DD DSN=AAF.S.OPER1,DISP=SHR                                          
//ISFIN    DD *                                                                 
SET CONSOLE BATCH                                                               
SET DELAY 600                                                                   
ULOG                                                                            
/D A,L                                                                          
END                                                                             
//* ----------------------------------------------------------------            
//*                          FILTRO NO NATURAL                                  
//* ----------------------------------------------------------------            
//FILTRO   EXEC NATURAL,PARM1='SYS=P,MT=0,STACK=(LOGON ADABAS8)'               
//CMWKF01  DD DSN=AAF.S.OPER1,DISP=SHR                                          
//CMWKF02  DD DSN=AAF.S.OPER2,DISP=SHR                                          
//SYSOUT   DD SYSOUT=*                                              
//CMPRINT  DD SYSOUT=*                                              
//SYSPRINT DD SYSOUT=*                                              
//CMPRT01  DD SYSOUT=*                                              
//SYSIN    DD *                                                     
AAFPTSS9                                                            
//* ----------------------------------------------------------------
//*            COLOCANDO EM ORDEM ALFABETICA OS APLICATIVOS         
//* ----------------------------------------------------------------
//SORT     EXEC PGM=SORT                                            
//SYSPRINT DD SYSOUT=*                                              
//SYSOUT   DD SYSOUT=*                                              
//SORTIN   DD DSN=AAF.S.OPER2,DISP=SHR                              
//SORTWK1  DD UNIT=SYSDA,DISP=(,DELETE),SPACE=(CYL,(4),RLSE),       
//            VOL=SER=WRK001                                        
//SORTOUT  DD DSN=AAF.S.OPER3,DISP=SHR                              
//SYSIN    DD *                                                     
   SORT FIELDS=(1,8,CH,A)                                           
   RECORD TYPE=F,LENGTH=(40)                                        
//* ----------------------------------------------------------------
//*                   LISTANDO OS APLICATIVOS                       
//* ----------------------------------------------------------------
//NATD EXEC NATURAL,PARM1='SYS=P,MT=0,STACK=(LOGON ADABAS8)'       
//CMWKF01  DD DSN=AAF.S.OPER3,DISP=SHR
//CMWKF02  DD DSN=AAF.S.OPER1,DISP=SHR                              
//SYSOUT   DD SYSOUT=*                                              
//CMPRINT  DD SYSOUT=G                                              
//SYSPRINT DD SYSOUT=*                                              
//CMPRT01  DD SYSOUT=*                                              
//SYSIN    DD *                                                     
AAFPRSTC
//* ----------------------------------------------------------------

A parte muito importante que pega o comando D A,L e grava em um dataset e usa os dois programas natural acima para mostrar que aplicativos estão online - No primeiro step tem essa parte -- PARM='++150,133' -- significa que o resultado do comando (D A,L) vai separar 150 linhas com 133 de colunas para o resultado do comando, se você tem muitos aplicativos que dê mais de 150 linhas - Resultado depois de rodar o job acima - os aplicativos que estão online vai mostrar de uma forma bem simples, os aplicativos que estiverem offline vão aparecer nas primeiras linhas

1Logon accepted to library ADABAS8.     
1NEXT AAFPRSTC                           
1PAG      1                              
0              AADPRMM             ONLINE
               DB2P0020            ONLINE
               DB2P0030            ONLINE
               DB2P0040            ONLINE
               DB2P0050            ONLINE
               DB2P0060            ONLINE
               DB2P0070            ONLINE
               DB2P0080            ONLINE
               DB2P0082            ONLINE
               DB2P0100            ONLINE
               DB2P0110            ONLINE
               DB2P0120            ONLINE
               DB2P0130            ONLINE
               DB2P0140            ONLINE
               DB2P0141            ONLINE
               DB2P0150            ONLINE
               DB2P0160            ONLINE
               DB2P0170            ONLINE
               DB2P0180            ONLINE
               DB2P0190            ONLINE
               DB2P0210            ONLINE
               DB2P0230            ONLINE
               DB2P0240            ONLINE
               DB2P0241            ONLINE
               DB2P0242            ONLINE
               SERVA240            ONLINE
               SERVB230            ONLINE
               SERVC240            ONLINE
               SERVE240            ONLINE
               SERVF230            ONLINE
               SERVH240            ONLINE
               BROKEDET            ONLINE
               BROKELIN            ONLINE
               BROKENFR            ONLINE
               BROKENID            ONLINE
               BROKENIT            ONLINE
               BROKERCH            ONLINE
               BROKERNV            ONLINE
               SERVK080            ONLINE
               SERVM240            ONLINE
               SERVN240            ONLINE
               SERVR230            ONLINE
               SERVR240            ONLINE
               SERVR241            ONLINE
               SERVR242            ONLINE
               SERVR243            ONLINE
               SERVR244            ONLINE
               SERVR245            ONLINE
               SERVR246            ONLINE
               SERVR247            ONLINE
               SERVR248            ONLINE
               SERVR249            ONLINE
               SERVR250            ONLINE
               SERVR251            ONLINE
               SERVUTSS            ONLINE
               COMPLETD            ONLINE
               COMPLETP            ONLINE
               FTP1                ONLINE
               REFSMTP             ONLINE
               REFSNMP             ONLINE
               REFTCPIP            ONLINE
               REFTELNT            ONLINE
               REFTRVS             ONLINE
               REFTVTAM            ONLINE
               AOPD                ONLINE
               AOPHINVD            ONLINE
               AOPIPPD             ONLINE
               AOPLOGD             ONLINE
               AOPLPD              ONLINE
               AOPNETD             ONLINE
               AOPNETSP            ONLINE
               AOPOUTD             ONLINE
               AOPPRWAY            ONLINE
               AOPSDBD             ONLINE
               AOPSSID             ONLINE
               AOPSUBD             ONLINE
               AOPWSMD             ONLINE
1PAG      2                              
0              RACF                ONLINE
               RMF                 ONLINE
               RMFGAT              ONLINE
               TSO                 ONLINE

AAFPTSS9 - Primeiro programa que vamos fazer um filtro, vamos ler do dataset o comando D A,L e vamos pegar os aplicativos

 0010 * -------------------------------------------------------------------- *                                                       
 0020 * FUNCAO     : CHECANDO OS APLICATIVOS ONLINE NO MAINFRAME             *                                                       
 0030 * CRIADO     : KATIA UETI/CLAUDEMAR MARTINS                            *                                                       
 0040 * DATA       : 27/04/2016                                              *                                                       
 0050 * -------------------------------------------------------------------- *                                                       
 0060 * 
 0070 * 
 0080 * -------------------------------------------------------------------- *                                                       
 0090 DEFINE DATA LOCAL                                                                                                              
 0100 01 #FLAG-ON                      (N01)                                                                                         
 0110 01 #FLAG                         (A02)                                                                                         
 0120 01 #NUM                          (N03)                                                                                         
 0130 * -------------------------------------------------------------------- *                                                       
 0140 01 #LINHA                        (A133)                                                                                        
 0150 01 REDEFINE #LINHA                                                                                                             
 0160   02 FILLER                      04X                                                                                           
 0170   02 #JOBS                       (A04)                                                                                         
 0180   02 FILLER                      125X                                                                                          
 0190 01 REDEFINE #LINHA                                                                                                             
 0200   02 FILLER                      04X                                                                                           
 0210   02 #NOME1                     (A08)                                                                                          
 0220   02 REDEFINE #NOME1                                                                                                           
 0230     03 #PREFIX1                (A02)                                                                                           
 0240     03 #SUFIX1                 (A06)                                                                                           
 0250   02 FILLER                      24X                                                                                           
 0260   02 #PROC1                     (A01)                                                                                          
 0270   02 FILLER                      02X                                                                                           
 0280   02 #NOME2                     (A08)                                                                                          
 0290   02 REDEFINE #NOME2                                                                                                           
 0300     03 #PREFIX2                (A02)                                                                                           
 0310     03 #SUFIX2                 (A06)                                                                                           
 0320   02 FILLER                      24X                                                                                           
 0330   02 #PROC2                     (A01)                                                                                          
 0340   02 FILLER                      61X                                                                                           
 0350 * -------------------------------------------------------------------- *                                                       
 0360 01 #NOME-ARQ                     (A40)                                                                                         
 0370 01 REDEFINE #NOME-ARQ                                                                                                          
 0380   02 #NOME-APLICAT              (A08)                                                                                          
 0390   02 FILLER                     (A32)                                                                                          
 0400 * -------------------------------------------------------------------- *                                                       
 0410 END-DEFINE                                                                                                                     
 0420 FORMAT(1) PS=60                                                                                                                
 0430 RESET #FLAG #FLAG-ON #NUM                                                                                                      
 0440 * -------------------------------------------------------------------- *                                                       
 0450 READ WORK FILE 1 #LINHA                                                                                                        
 0460 * -------------------------------------------------------------------- *                                                       
 0470   IF  #JOBS = 'JOBS'                                                                                                           
 0480     MOVE 'OK' TO #FLAG                                                                                                         
 0490     ESCAPE TOP                                                                                                                 
 0500   END-IF                                                                                                                       
 0510 * -------------------------------------------------------------------- *                                                       
 0520   IF #FLAG = 'OK'                                                                                                              
 0530     IF #JOBS = 'JOBS' AND #NUM  GT 0                                                                                           
 0540       MOVE 1 TO #FLAG-ON                                                                                                       
 0550       ESCAPE BOTTOM                                                                                                            
 0560     END-IF                                                                                                                     
 0570 * -------------------------------------------------------------------- *                                                       
 0580 * MONITORAR TODOS OS APLICATIVOS RE - COLUNA UM                        *                                                       
 0590 * -------------------------------------------------------------------- *                                                       
 0600 *   IF #PREFIX1 = 'RE' AND #PROC1 = 'S'                                                                                        
 0610 *     ADD 1 TO #NUM                                                                                                            
 0620 *     MOVE #NOME1 TO #NOME-APLICAT                                                                                             
 0630 *     WRITE WORK FILE 2 #NOME-ARQ                                                                                              
 0640 ****    WRITE 'TSS4 = '   #NOME-ARQ                                                                                            
 0650 *   END-IF                                                                                                                     
 0660 * -------------------------------------------------------------------- *                                                       
 0670 * MONITORAR TODOS OS APLICATIVOS RE - COLUNA DOIS                      *                                                       
 0680 * -------------------------------------------------------------------- *                                                       
 0690 *   IF #PREFIX2 = 'RE' AND #PROC2 = 'S'                                                                                        
 0700 *     ADD 1 TO #NUM                                                                                                            
 0710 *     MOVE #NOME2 TO #NOME-APLICAT                                                                                             
 0720 *     WRITE WORK FILE 2 #NOME-ARQ                                                                                              
 0730 ****    WRITE 'TSS4 = '   #NOME-ARQ                                                                                            
 0740 *   END-IF                                                                                                                     
 0750 * -------------------------------------------------------------------- *                                                       
 0760 * COLUNA 1 - TODOS OS APLICATIVOS QUE MONITORAMOS                      *                                                       
 0770 * -------------------------------------------------------------------- *                                                       
 0780  IF #NOME1                                                                                                                     
 0790      = 'AADPTLMS' OR = 'DB2P0020' OR = 'DB2P0030' OR = 'DB2P0040' OR                                                           
 0800      = 'DB2P0050' OR = 'DB2P0060' OR = 'DB2P0070' OR = 'DB2P0080' OR                                                           
 0810      = 'DB2P0082' OR = 'DB2P0100' OR = 'DB2P0110' OR = 'DB2P0120' OR                                                           
 0820      = 'DB2P0130' OR = 'DB2P0140' OR = 'DB2P0150' OR = 'DB2P0160' OR                                                           
 0830      = 'DB2P0170' OR = 'DB2P0180' OR = 'DB2P0190' OR = 'DB2P0210' OR                                                           
 0840      = 'DB2P0230' OR = 'DB2P0240' OR = 'DB2P0241' OR = 'DB2P0242' OR                                                           
 0850      = 'SERVA240' OR = 'SERVC240' OR = 'SERVE240' OR = 'SERVF230' OR                                                           
 0860      = 'BROKEDET' OR = 'BROKELIN' OR = 'BROKENID' OR = 'BROKENIT' OR                                                           
 0870      = 'BROKERCH' OR = 'BROKERNV' OR = 'SERVK080' OR = 'SERVM240' OR                                                           
 0880      = 'SERVN240' OR = 'SERVR230' OR = 'SERVR240' OR = 'SERVR241' OR                                                           
 0890      = 'SERVR242' OR = 'SERVR243' OR = 'SERVR244' OR = 'SERVR245' OR                                                           
 0900      = 'SERVR246' OR = 'SERVR247' OR = 'SERVR248' OR = 'SERVR249' OR                                                           
 0910      = 'SERVR250' OR = 'SERVUTSS' OR = 'COMPLETD' OR = 'COMPLETP' OR                                                           
 0920      = 'REFSMTP ' OR = 'REFSNMP ' OR = 'REFTCPIP' OR = 'REFTRVS ' OR                                                           
 0930      = 'REFTVTAM' OR = 'AOPD    ' OR = 'AOPHINVD' OR = 'AOPIPPD ' OR                                                           
 0940      = 'AOPLOGD ' OR = 'AOPLPD  ' OR = 'AOPNETD ' OR = 'AOPNETSP' OR                                                           
 0950      = 'AOPOUTD ' OR = 'AOPPRWAY' OR = 'AOPSDBD ' OR = 'AOPSSID ' OR                                                           
 0960      = 'AOPSUBD ' OR = 'AOPWSMD ' OR = 'RMF     ' OR = 'RMFGAT  ' OR                                                           
 0970      = 'TSO     ' OR = 'RACF    ' OR = 'REFTELNT' OR = 'REDPRMM ' OR                                                           
 0980      = 'AOPPRWAY' OR = 'SERVB230' OR = 'FTP1    ' OR = 'DB2P0141' OR                                                           
 0990      = 'SERVH240' OR = 'BROKENFR' OR = 'SERVR251'                                                                              
 1000       ADD 1 TO #NUM                                                                                                            
 1010       MOVE #NOME1 TO #NOME-APLICAT                                                                                             
 1020       WRITE WORK FILE 2 #NOME-ARQ                                                                                              
 1030 ****    WRITE 'TSS4 = '   #NOME-ARQ                                                                                            
 1040     END-IF                                                                                                                     
 1050 * -------------------------------------------------------------------- *                                                       
 1060 * COLUNA 2 - TODOS OS APLICATIVOS QUE MONITORAMOS                      *                                                       
 1070 * -------------------------------------------------------------------- *                                                       
 1080  IF #NOME2                                                                                                                     
 1090      = 'AADPTLMS' OR = 'DB2P0020' OR = 'DB2P0030' OR = 'DB2P0040' OR                                                           
 1100      = 'DB2P0050' OR = 'DB2P0060' OR = 'DB2P0070' OR = 'DB2P0080' OR                                                           
 1110      = 'DB2P0082' OR = 'DB2P0100' OR = 'DB2P0110' OR = 'DB2P0120' OR                                                           
 1120      = 'DB2P0130' OR = 'DB2P0140' OR = 'DB2P0150' OR = 'DB2P0160' OR                                                           
 1130      = 'DB2P0170' OR = 'DB2P0180' OR = 'DB2P0190' OR = 'DB2P0210' OR                                                           
 1140      = 'DB2P0230' OR = 'DB2P0240' OR = 'DB2P0241' OR = 'DB2P0242' OR                                                           
 1150      = 'SERVA240' OR = 'SERVC240' OR = 'SERVE240' OR = 'SERVF230' OR                                                           
 1160      = 'BROKEDET' OR = 'BROKELIN' OR = 'BROKENID' OR = 'BROKENIT' OR                                                           
 1170      = 'BROKERCH' OR = 'BROKERNV' OR = 'SERVK080' OR = 'SERVM240' OR                                                           
 1180      = 'SERVN240' OR = 'SERVR230' OR = 'SERVR240' OR = 'SERVR241' OR                                                           
 1190      = 'SERVR242' OR = 'SERVR243' OR = 'SERVR244' OR = 'SERVR245' OR                                                           
 1200      = 'SERVR246' OR = 'SERVR247' OR = 'SERVR248' OR = 'SERVR249' OR                                                           
 1210      = 'SERVR250' OR = 'SERVUTSS' OR = 'COMPLETD' OR = 'COMPLETP' OR                                                           
 1220      = 'REFSMTP ' OR = 'REFSNMP ' OR = 'REFTCPIP' OR = 'REFTRVS ' OR                                                           
 1230      = 'REFTVTAM' OR = 'AOPD    ' OR = 'AOPHINVD' OR = 'AOPIPPD ' OR                                                           
 1240      = 'AOPLOGD ' OR = 'AOPLPD  ' OR = 'AOPNETD ' OR = 'AOPNETSP' OR                                                           
 1250      = 'AOPOUTD ' OR = 'AOPPRWAY' OR = 'AOPSDBD ' OR = 'AOPSSID ' OR                                                           
 1260      = 'AOPSUBD ' OR = 'AOPWSMD ' OR = 'RMF     ' OR = 'RMFGAT  ' OR                                                           
 1270      = 'TSO     ' OR = 'RACF    ' OR = 'REFTELNT' OR = 'REDPRMM ' OR                                                           
 1280      = 'AOPPRWAY' OR = 'SERVB230' OR = 'FTP1    ' OR = 'DB2P0141' OR                                                           
 1290      = 'SERVH240' OR = 'BROKENFR' OR = 'SERVR251'                                                                              
 1300       ADD 1 TO #NUM                                                                                                            
 1310       MOVE #NOME2 TO #NOME-APLICAT                                                                                             
 1320       WRITE WORK FILE 2 #NOME-ARQ                                                                                              
 1330 ****    WRITE 'TSS4 = '   #NOME-ARQ                                                                                            
 1340     END-IF                                                                                                                     
 1350 * -------------------------------------------------------------------- *                                                       
 1360   END-IF                                                                                                                       
 1370 END-WORK                                                                                                                       
 1380 END                                                                                                                            

AAFPRSTC - agora vamos listar no nosso job os aplicativos que estão online

 0010 * -------------------------------------------------------------------- *                                                       
 0020 * FUNCAO - VERIFICAR OS APLICATIVOS QUE ESTAO ONLINE/OFFLINE           *                                                       
 0030 * AUTOR  - CLAUDEMAR MARTINS DE SA                                     *                                                       
 0040 * -------------------------------------------------------------------- *                                                       
 0050 DEFINE DATA                                                                                                                    
 0060 LOCAL                                                                                                                          
 0070 * --- ADICIONANDO MAIS UM APLICATIVO AUMENTE O VALOR CONST                                                                                                                                                            
 0080 * --- TEMOS ATUALMENTE 81 APLICATIVOS PARA MONITORAR
 0090 *                                                                                                                              
 0100 01 #TOTAL-APPS       (I2) CONST <81>                                                                                           
 0110 01 #REGISTRO-ENTRADA (A80)                                                                                                     
 0120 01 #LISTA-PESQUISA   (A8/1:#TOTAL-APPS)                                                                                        
 0130   INIT                                                                                                                         
 0140 *                                                                                                                              
 0150 * --- APLICATIVOS A SEREM MONITORADOS - TEMOS 81 STCs
 0160 *                                                                                                                              
 0170  <'AADPTLMS','DB2P0020','DB2P0030','DB2P0040','DB2P0050',                                                                      
 0180   'DB2P0060','DB2P0070','DB2P0080','DB2P0082','DB2P0100','DB2P0110',                                                           
 0190   'DB2P0120','DB2P0130','DB2P0140','DB2P0141','DB2P0150','DB2P0160',                                                           
 0200   'DB2P0170','DB2P0180','DB2P0190','DB2P0210','DB2P0230','DB2P0240',                                                           
 0210   'DB2P0241','DB2P0242','SERVA240','SERVB230','SERVC240','SERVE240',                                                           
 0220   'SERVF230','SERVH240','BROKEDET','BROKELIN','BROKENFR','BROKENID',                                                           
 0230   'BROKENIT','BROKERCH','BROKERNV','SERVK080','SERVM240','SERVN240',                                                           
 0240   'SERVR230','SERVR240','SERVR241','SERVR242','SERVR243','SERVR244',                                                           
 0250   'SERVR245','SERVR246','SERVR247','SERVR248','SERVR249','SERVR250',                                                           
 0260   'SERVR251','SERVUTSS','COMPLETD','COMPLETP','FTP1    ','REFSMTP ',                                                           
 0270   'REFSNMP ','REFTCPIP','REFTELNT','REFTRVS ','REFTVTAM','AOPD    ',                                                           
 0280   'AOPHINVD','AOPIPPD ','AOPLOGD ','AOPLPD  ','AOPNETD ','AOPNETSP',                                                           
 0290   'AOPOUTD ','AOPPRWAY','AOPSDBD ','AOPSSID ','AOPSUBD ','AOPWSMD ',                                                           
 0300   'RACF    ','RMF     ','RMFGAT  ','TSO     '>                                                                                 
 0310 *                                                                                                                              
 0320 * -------------------------------------------------------------------- *                                                       
 0330 *                                                                                                                              
 0340 01 #JA-ENCONTRADO    (L/1:#TOTAL-APPS) INIT                                                                             
 0350 01 #I                (I2)                                                                                                      
 0360 END-DEFINE                                                                                                                     
 0370 *                                                                                                                              
 0380 * -------------------------------------------------------------------- *                                                       
 0390 *                                                                                                                              
 0400 FORMAT LS=183 PS=0                                                                                                             
 0410 * EJECT OFF                                                                                                                    
 0420 * SET CONTROL 'f+'                                                                                                             
 0430 * SET CONTROL 'H'                                                                                                              
 0440 *                                                                                                                              
 0450 * --- 1. FASE DE LEITURA (APENAS IDENTIFICACAO) ---                                                                            
 0460 *                                                                                                                              
 0470 READ WORK FILE 1 #REGISTRO-ENTRADA                                                                                             
 0480   FOR #I = 1 TO #TOTAL-APPS                                                                                                    
 0490     IF #JA-ENCONTRADO(#I)                                                                                                      
 0500       ESCAPE TOP                                                                                                               
 0510     END-IF                                                                                                                     
 0520 * -------------------------------------------------------------------- *                                                       
 0530 * -------------------------------------------------------------------- *                                                       
 0540     IF #REGISTRO-ENTRADA = SCAN #LISTA-PESQUISA(#I)                                                                            
 0550       #JA-ENCONTRADO(#I) := TRUE                                                                                               
 0560       ESCAPE BOTTOM                                                                                                            
 0570     END-IF                                                                                                                     
 0580   END-FOR                                                                                                                      
 0590 END-WORK                                                                                                                       
 0600 *                                                                                                                              
 0610 * --- PRIMEIRO OS APLICATIVOS OFFLINE ---                                                                                      
 0620 *                                                                                                                              
 0630 FOR #I = 1 TO #TOTAL-APPS                                                                                                      
 0640   IF NOT #JA-ENCONTRADO(#I)                                                                                                    
 0650 *                                                                                                                              
 0660    WRITE '             ' #LISTA-PESQUISA(#I) (AL=10)                                                                           
 0670    ' ====  OFFLINE  ===='                                                                                                    
 0680 END-IF                                                                                                                         
 0690 END-FOR                                                                                                                        
 0700 *                                                                                                                              
 0710 * --- SEGUNDO OS APLICATIVOS ONLINE ---                                                                                        
 0720 *                                                                                                                              
 0730 FOR #I = 1 TO #TOTAL-APPS                                                                                                      
 0740   IF #JA-ENCONTRADO(#I)                                                                                                        
 0750     WRITE '             ' #LISTA-PESQUISA(#I) (AL=10)                                                                          
 0760    '         ONLINE       '                                                                                                    
 0770     WRITE WORK FILE 2 #LISTA-PESQUISA(#I)                                                                                      
 0780   END-IF                                                                                                                       
 0790 END-FOR                                                                                                                        
 0800 END 

Datasets que foram criados para o nosso JCL

//AACCBR14 JOB (ALAD,DISA),'SCHED',CLASS=7,MSGCLASS=A             
//*UQ ALLOW                                                       
//* ------------------------------------------------------------  
//*                   CRIA DATASET NO MAINFRAME                   
//* ------------------------------------------------------------  
//S1       EXEC PGM=IEFBR14                                       
//CATLG1   DD DSN=AAF.S.OPER1,                   
//         DISP=(NEW,CATLG,DELETE),                               
//         DCB=(DSORG=PS,LRECL=133,BLKSIZE=1330,RECFM=FB),                    
//         VOL=SER=DISCO1,SPACE=(CYL,(4,1),RLSE),UNIT=SYSDA
//*
//CATLG1   DD DSN=AAF.S.OPER2,                   
//         DISP=(NEW,CATLG,DELETE),                               
//         DCB=(DSORG=PS,LRECL=133,BLKSIZE=1330,RECFM=FB),                    
//         VOL=SER=DISCO1,SPACE=(CYL,(4,1),RLSE),UNIT=SYSDA
//*
//CATLG1   DD DSN=AAF.S.OPER3,                   
//         DISP=(NEW,CATLG,DELETE),                               
//         DCB=(DSORG=PS,LRECL=133,BLKSIZE=1330,RECFM=FB),                    
//         VOL=SER=DISCO1,SPACE=(CYL,(4,1),RLSE),UNIT=SYSDA
//*
//CATLG1   DD DSN=AAF.S.OPER4,                   
//         DISP=(NEW,CATLG,DELETE),                               
//         DCB=(DSORG=PS,LRECL=133,BLKSIZE=1330,RECFM=FB),                    
//         VOL=SER=DISCO1,SPACE=(CYL,(4,1),RLSE),UNIT=SYSDA
//*
Leia Mais