Translate

Mostrar mensagens com a etiqueta IBMZ. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta IBMZ. Mostrar todas as mensagens

quinta-feira, 21 de maio de 2026

☕🔥 Por que quase ninguém usa ponto flutuante em COBOL?

 


Bellacosa Mainframe uso de ponto flutuante em cobol

☕🔥 Por que quase ninguém usa ponto flutuante em COBOL?

Essa pergunta parece simples… mas toca em um dos temas mais profundos da arquitetura dos sistemas corporativos.

A verdade é que:

O COBOL foi criado para o mundo financeiro.
E o mundo financeiro NÃO tolera erro decimal.

Enquanto linguagens científicas valorizam amplitude numérica e velocidade matemática, o COBOL nasceu em bancos, seguradoras, folha de pagamento, contabilidade e governo — ambientes onde 1 centavo errado pode virar um desastre jurídico, contábil e operacional.

E é exatamente aí que o ponto flutuante começa a se tornar um problema.


O QUE É PONTO FLUTUANTE?

Quando falamos em COMP-1 e COMP-2, estamos falando de números armazenados em formato binário exponencial, parecido com IEEE Floating Point usado em C, Java, Python e hardware matemático.

Em vez de armazenar:

50000.00

o computador guarda algo próximo de:

mantissa × base^expoente

Exemplo conceitual:

5.000000 × 10^4

Isso permite:

✅ números gigantescos
✅ cálculos rápidos
✅ grande amplitude matemática
✅ excelente uso científico

Mas cria um problema clássico:

❌ muitos decimais NÃO existem exatamente em binário.


O GRANDE VILÃO: BINÁRIO NÃO REPRESENTA DECIMAL DIREITO

O mesmo problema ocorre em quase TODAS as linguagens.

Por exemplo:

0.1 + 0.2

Em várias linguagens o resultado interno vira:

0.30000000000000004

Porque:

0.1 decimal

não possui representação binária exata.

É parecido com tentar representar:

1/3

em decimal.

Você obtém:

0.333333333333...

Ou seja:

  • decimal sofre para representar certas frações binárias

  • binário sofre para representar certas frações decimais

E dinheiro é DECIMAL.


POR QUE ISSO É UM PESADELO EM SISTEMAS FINANCEIROS?

Imagine:

  • juros compostos

  • imposto

  • IOF

  • parcelamento

  • amortização

  • câmbio

  • atualização monetária

Agora imagine isso sendo executado:

  • milhões de vezes

  • durante décadas

  • em batchs gigantescos

  • conciliando bilhões

Se cada operação errar:

0.0000001

o erro acumulado explode.

Seu exemplo mostrou isso perfeitamente.


ANALISANDO O EXEMPLO

Seu programa é brilhante porque demonstra algo MUITO real:

perform 5000000 times
    add 0,01 to ponto-fixo
    add 0,01 to float-curto
    add 0,01 to float-longo
end-perform

Teoricamente:

5.000.000 × 0,01 = 50.000,00

O decimal fixo (COMP-3) chega exatamente nisso.

Mas observe os floats:

Float Curto..: 52.159,66
Float Longo..: 49.999,99

O COMP-1 ficou MAIS DE DOIS MIL REAIS errado.

Isso assusta muita gente iniciante.

Mas faz total sentido tecnicamente.


POR QUE O COMP-1 ERRA TANTO?

Porque ele possui apenas cerca de:

7 dígitos de precisão

E seu processamento acumulou arredondamentos continuamente.

O computador não está “errando”.

Ele está armazenando aproximações sucessivas.

Exemplo simplificado:

0,01

internamente pode virar:

0,0099999997

ou:

0,0100000003

Após milhões de somas:

💥 divergência enorme.


O COMP-2 É MELHOR… MAS AINDA NÃO É CONFIÁVEL

O COMP-2 usa 8 bytes.

Possui aproximadamente:

15~16 dígitos de precisão

Por isso o erro final ficou pequeno:

delta +0000000000000,000013

Mas para o mercado financeiro:

“quase certo” ainda significa ERRADO.

Em banco:

  • 0,01 errado é incidente

  • 0,001 errado é problema

  • 0,000013 errado pode quebrar conciliação

Mainframe não trabalha com “praticamente”.

Ele trabalha com:

✅ exatidão auditável
✅ rastreabilidade
✅ conformidade legal
✅ precisão contábil


POR ISSO O COBOL AMA COMP-3

O verdadeiro rei do mundo financeiro é:

PACKED DECIMAL

ou:

COMP-3

Porque ele armazena os dígitos DECIMAIS diretamente.

Exemplo:

PIC S9(7)V99 COMP-3

Armazena:

12345,67

como decimal compactado.

Sem conversão binária aproximada.

Resultado:

✅ precisão absoluta
✅ cálculos exatos
✅ sem erro acumulativo
✅ ideal para dinheiro


O QUE O COMP-3 SACRIFICA?

Ele perde em:

  • velocidade matemática bruta

  • amplitude numérica

  • cálculos científicos

Mas ganha no que importa ao negócio:

✅ confiabilidade financeira

E essa foi a prioridade histórica do COBOL.


O HARDWARE IBM FOI FEITO PARA ISSO

Aqui entra algo MUITO interessante da arquitetura IBM Z.

Os mainframes possuem instruções de hardware específicas para decimal packed.

Não é “emulação lenta”.

O próprio processador IBM Z possui:

  • decimal arithmetic instructions

  • packed decimal engine

  • decimal floating point support (mais moderno)

  • instruções financeiras especializadas

Ou seja:

o hardware foi literalmente desenhado para contabilidade.

Isso é um diferencial gigantesco do mundo mainframe.


POR QUE LINGUAGENS MODERNAS USAM FLOAT O TEMPO TODO?

Porque muitas aplicações modernas:

  • gráficos

  • IA

  • jogos

  • física

  • machine learning

  • rendering

  • estatística

não precisam de precisão decimal absoluta.

Para um jogo:

x = 14.99999997

não importa.

Para uma animação:

0.3000000004

é irrelevante.

Já num banco:

💀 isso vira reconciliação quebrada.


COBOL E O TRAUMA HISTÓRICO DOS CENTAVOS

Existe uma regra não escrita no mundo corporativo:

“Nunca use float para dinheiro.”

Isso veio de décadas de incidentes reais.

Sistemas antigos em C, Java e VB frequentemente causavam:

  • divergência bancária

  • erros de fechamento

  • problemas fiscais

  • falhas de arredondamento

  • diferenças em lote

Por isso Java criou:

BigDecimal

C# criou:

decimal

Python recomenda:

Decimal

Todos tentando reproduzir a filosofia do COBOL.


O PARADOXO

Curiosamente:

o COBOL estava CERTO desde os anos 60.

Enquanto outras linguagens correram atrás depois.

O modelo COBOL de:

✅ decimal fixo
✅ precisão absoluta
✅ representação financeira
✅ aritmética decimal

era exatamente o que sistemas corporativos precisavam.


MAS ENTÃO COMP-1 E COMP-2 SERVEM PARA QUÊ?

Eles existem principalmente para:


1. Aplicações científicas

Exemplo:

  • engenharia

  • estatística

  • meteorologia

  • cálculos atuariais

  • física


2. Integração com outras linguagens

Exemplo:

  • C

  • Java JNI

  • APIs numéricas

  • cálculos externos


3. Processamento matemático de alta amplitude

Exemplo:

6.022 × 10^23

número de Avogadro.

Impossível com decimal fixo convencional.


4. Dados vindos de hardware externo

Exemplo:

  • sensores

  • telemetria

  • cálculos industriais


O COBOL MODERNO E DECIMAL FLOATING POINT

Aqui entra algo avançado.

Os IBM Z modernos suportam:

  • Decimal Floating Point (DFP)

  • IEEE 754R decimal

  • hardware decimal floating

Isso tenta unir:

✅ amplitude
✅ velocidade
✅ precisão decimal

Mas mesmo assim:

em aplicações financeiras clássicas o COMP-3 continua soberano.

Porque ele é previsível, auditável e historicamente confiável.


UM DETALHE IMPORTANTE: ORDEM DAS OPERAÇÕES

Com float, até a ordem das somas pode mudar o resultado.

Exemplo:

(A + B) + C

pode ser diferente de:

A + (B + C)

Isso acontece por arredondamentos intermediários.

Em processamento paralelo isso vira um inferno.

Já decimal fixo reduz drasticamente esse problema.


OUTRA QUESTÃO CRÍTICA: COMPARAÇÃO

Em float:

IF VALOR = 0.3

pode falhar.

Porque internamente:

0.30000000000004

Isso causa bugs clássicos.

Por isso sistemas científicos usam tolerância:

ABS(A-B) < epsilon

Mas imagine isso em contabilidade.

💀 inviável.


O QUE UM PROGRAMADOR MAINFRAME APRENDE CEDO

O desenvolvedor COBOL veterano aprende rapidamente:

✅ dinheiro → COMP-3
✅ contador → COMP
✅ flags → DISPLAY/COMP
✅ float → evitar

É quase uma cultura histórica do mundo IBM.


RESUMO FINAL

COMP-1 / COMP-2 são ótimos para:

✅ ciência
✅ estatística
✅ amplitude numérica
✅ interoperabilidade
✅ cálculos matemáticos extremos


Mas são perigosos para:

❌ dinheiro
❌ contabilidade
❌ juros
❌ impostos
❌ conciliação
❌ sistemas bancários


A GRANDE LIÇÃO

O COBOL não evita ponto flutuante por limitação.

Ele evita porque:

precisão financeira vale mais que velocidade matemática.

E essa decisão arquitetural ajudou o mainframe a sustentar por décadas:

  • bancos

  • bolsas de valores

  • cartões

  • previdência

  • sistemas fiscais

  • compensação bancária

  • processamento financeiro global

com um nível de confiabilidade que poucas plataformas conseguiram igualar.

☕🔥 Guia Completo — ABENDs Clássicos do IBM OS/VS e z/OS

Bellacosa Mainframe e a lista de abends


☕🔥 Guia Completo — ABENDs Clássicos do IBM OS/VS e z/OS

Excelente observação!
No resumo anterior realmente ficaram faltando vários ABENDs importantes da lista original do artigo histórico do OS/VS. Agora segue a versão completa, revisada e expandida, incluindo TODOS os códigos mencionados no documento.


🔥 S013 — OPEN ERROR / DCB ERROR

Mensagem comum

IEC141I

O que significa

Falha ao abrir dataset.

Principais causas

  • BLKSIZE incompatível

  • RECFM incorreto

  • LRECL errado

  • Membro inexistente em PDS

Muito comum em

  • SORT

  • COBOL batch

  • IDCAMS


🔥 S0C1 — OPERATION EXCEPTION

O que significa

Execução de instrução inválida.

Causas

  • Overlay de memória

  • Programa corrompido

  • Executar área de dados como código

  • Compilação/link incorreto


🔥 S0C4 — PROTECTION EXCEPTION

O clássico absoluto do z/OS

O que significa

Acesso inválido à memória.

Causas comuns

  • Subscript fora do limite

  • Ponteiro inválido

  • Tabela ultrapassada

  • LINKAGE SECTION incorreta


🔥 S0C5 — ADDRESSING EXCEPTION

O que significa

Tentativa de acessar endereço inexistente.

Muito comum em

  • CALLs errados

  • Parâmetros incompatíveis

  • Ponteiros inválidos


🔥 S0C7 — DATA EXCEPTION

O ABEND mais famoso do COBOL

O que significa

Campo numérico contém valor inválido.

Exemplos clássicos

MOVE 'ABC' TO WS-VALOR-NUM
ADD 1 TO WS-VALOR-NUM

Principais causas

  • Campo COMP-3 corrompido

  • Dados não numéricos

  • Index fora da tabela

  • Working-storage sem inicialização


🔥 S106 — LINK/LOAD ERROR

O que significa

Falha durante LOAD ou LINK.

Causas

  • Biblioteca incorreta

  • Módulo inconsistente

  • Problema de disco


🔥 S213 — DATASET NOT FOUND

Mensagem comum

IEC143I

O que significa

Dataset inexistente.

Causas

  • DSNAME errado

  • Dataset não catalogado

  • VOL=SER incorreto


🔥 S222 — JOB CANCELADO

Mensagem comum

IEF301I

O que significa

Operador cancelou o job.

Normalmente ocorre por

  • Loop infinito

  • Job preso

  • Alto consumo


🔥 S2F3 — SYSTEM FAILURE

O que significa

Falha do sistema operacional durante execução.

Causas

  • Crash do sistema

  • IPL

  • Problema interno do z/OS

Procedimento

  • Reexecutar o job

  • Verificar logs do sistema


🔥 S322 — TIME EXCEEDED

O que significa

Job excedeu o tempo permitido.

Muito comum em

  • Loops infinitos

  • SQL sem índice

  • SORT gigantes

Exemplo

TIME=1

🔥 S613 — TAPE I/O ERROR

Mensagem comum

IEC147I

O que significa

Erro de I/O em fita magnética.

Causas

  • Fita mal posicionada

  • Multi-volume incorreto

  • Problema físico na fita


🔥 S722 — SYSOUT LIMIT EXCEEDED

O que significa

Quantidade de linhas impressas excedeu limite.

Muito comum em

  • LOOP com DISPLAY

  • Relatórios infinitos

  • Dumps excessivos


🔥 S804 — INSUFFICIENT VIRTUAL STORAGE

O que significa

Falta de memória virtual.

Causas

  • REGION pequena

  • Programa gigante

  • Uso excessivo de tabelas

Exemplo

REGION=512K

🔥 S806 — MODULE NOT FOUND

O loader não encontrou o módulo

Causas

  • STEPLIB errada

  • LOADLIB ausente

  • Nome incorreto do programa

Mensagem clássica

CSV003I REQUESTED MODULE NOT FOUND

🔥 S80A — STORAGE SHORTAGE

O que significa

Complemento do S804.

Causa principal

Falta de memória virtual disponível.


🔥 S813 — TAPE LABEL ERROR

Mensagem comum

IEC149I

O que significa

Nome do dataset na fita não bate com DD.

Causas

  • LABEL incorreto

  • DSNAME errado

  • Volume errado


🔥 S913 — RACF SECURITY VIOLATION

Mensagem comum

IEC150I

O que significa

Acesso negado pelo RACF.

Muito comum em

  • Produção

  • Db2

  • GDGs

  • VSAM corporativo


🔥 SA13 — END OF TAPE / FILE NOT FOUND

Mensagem comum

IEC151I

O que significa

Arquivo não encontrado na fita.

Causas

  • LABEL incorreto

  • Número sequencial errado

  • Volume incorreto


🔥 SB37 — OUT OF SPACE

Mensagem comum

IEC030I

O que significa

Dataset ficou sem espaço.

Causas

  • Espaço secundário insuficiente

  • Muitas extents

  • Volume cheio


🔥 SD37 — NO SECONDARY SPACE

Mensagem comum

IEC031I

O que significa

Acabou espaço primário e não existe secondary allocation.

Exemplo clássico

SPACE=(CYL,(10,0))

🔥 SE37 — EXTENT LIMIT EXCEEDED

Mensagem comum

IEC032I

O que significa

Dataset atingiu limite máximo de extents.

Muito comum em

  • PDS antigos

  • SORT gigantes

  • Arquivos temporários


☕🔥 Os ABENDs Mais Icônicos da História do Mainframe

ABENDSignificado
S0C7Data Exception
S0C4Protection Exception
S806Module Not Found
S913RACF Violation
SB37Dataset sem espaço
S322Timeout
S213Dataset não encontrado

☕ Curiosidade Histórica

Nos tempos do:

  • OS/360

  • OS/VS1

  • OS/VS2

  • MVS/XA

os operadores praticamente decoravam os ABENDs “na raça”.

Muitos programadores COBOL antigos conseguiam identificar o erro apenas olhando:

IEF450I

ou:

IEC141I

sem precisar abrir dump.

Isso virou quase uma “linguagem secreta” do mundo mainframe.


sexta-feira, 17 de abril de 2026

💥 Operador de CICS Não Aperta Botão: Ele Evita Caos em Milhões de Transações (E Quase Ninguém Percebe)

 

Bellacosa Mainframe descreve as atividade de um operador mainframe em CICS

💥 Operador de CICS Não Aperta Botão: Ele Evita Caos em Milhões de Transações (E Quase Ninguém Percebe)

Se você acha que o operador de mainframe só “fica olhando tela verde”… cuidado.
No universo do CICS, ele é o guardião silencioso que impede filas travadas, regiões colapsando e clientes reclamando no app do banco.

Hoje vamos abrir essa caixa-preta no estilo Bellacosa Mainframe: direto, provocativo e com aquele tempero de quem já viu CICS pegando fogo às 3 da manhã. ☕


🧠 O Papel REAL do Operador de CICS

O operador não programa… mas mantém o sistema RESPIRANDO.

Ele atua em três frentes:

🔹 1. Monitoramento contínuo

  • Região CICS ativa?
  • Transações fluindo?
  • CPU explodindo?
  • Tasks presas?

🔹 2. Intervenção rápida

  • Mata transação travada
  • Habilita/desabilita recursos
  • Responde incidentes antes do usuário perceber

🔹 3. Comunicação

  • Aciona suporte (sysprog, dev, DBA)
  • Documenta incidentes
  • Traduz problema técnico em impacto real

👉 Em resumo:
O operador não resolve tudo — mas sabe exatamente quando algo está errado.


⚙️ Comandos CICS que TODO operador deve dominar

Dentro do CICS (via terminal ou console), esses são os clássicos:

🔥 CEMT — O CANIVETE SUÍÇO

O mais importante. Se o operador souber só um… que seja esse.

Exemplos:

CEMT I TASK

→ Lista tasks ativas

CEMT I TRANS

→ Mostra transações

CEMT SET TRANS(xxxx) DISABLED

→ Desabilita transação problemática

CEMT SET FILE(nome) CLOSED

→ Fecha arquivo (VSAM/DB2 ligado)

CEMT SET TASK(xxxx) PURGE

→ Mata task travada

💡 Dica Bellacosa:
Se você usou PURGE mais de 3x no dia… tem problema estrutural.


🔥 CEDA — Definições (nível mais avançado)

CEDA I TRANS(xxxx)

→ Ver definição da transação

👉 Operador usa menos, mas precisa reconhecer.


🔥 CECS / CECI — Testes

Mais usados por dev, mas operador esperto sabe identificar uso indevido.


🖥️ Onde o SDSF entra no jogo?

Aqui começa o poder real.

O SDSF é o radar do operador.


🔍 Telas que ele MAIS usa:

🔹 ST (Status)

  • Ver address space do CICS
  • CPU, memória, status

👉 Identificar se o CICS está:

  • Loopando
  • Travado
  • Consumindo CPU absurda

🔹 DA (Display Active)

  • Tasks no z/OS
  • Ver impacto fora do CICS

🔹 LOG

  • Mensagens do sistema

👉 Aqui mora o OURO.

Exemplo:

  • AICA abends
  • DFHxxxx mensagens
  • Falhas de recurso

💡 Easter egg:
Se aparecer DFHAC2001 com frequência…
👉 Pode apostar: alguém esqueceu commit ou está em loop.


🔹 SP (Spool)

  • Logs de jobs
  • Dumps

🚨 Quando o CICS está “aberto” — o que se espera do operador?

CICS aberto = ambiente em produção, usuários ativos.

O operador precisa:

✅ 1. Garantir disponibilidade

  • Região UP
  • Transações habilitadas

✅ 2. Detectar anomalias

  • Lentidão
  • Travamentos
  • Picos

✅ 3. Agir ANTES do caos

  • Kill de tasks
  • Disable de transação problemática

✅ 4. Seguir procedimento

  • Nada de “inventar moda”
  • Produção NÃO é laboratório

🧨 Situações clássicas (vida real)

💣 Caso 1 — Loop infinito

Sintoma:

  • CPU 100%
  • Usuários travados

Ação:

CEMT I TASK
CEMT SET TASK(xxxx) PURGE

💣 Caso 2 — Arquivo travado

Sintoma:

  • Transações não respondem

Ação:

CEMT SET FILE(nome) CLOSED
CEMT SET FILE(nome) OPEN

💣 Caso 3 — Transação problemática

CEMT SET TRANS(xxxx) DISABLED

🕵️ Curiosidade raiz (história real de datacenter)

Um operador notou que o CICS estava “normal”…
Mas usuários reclamavam.

Ele fez algo simples:

CEMT I TASK

Percebeu centenas de tasks iguais.

👉 Era um bug em produção gerando loop silencioso.

Ele matou UMA task… e o problema sumiu.

💡 Moral:
Nem sempre o problema é barulhento.


🎯 Dicas nível Bellacosa (ouro puro)

🔥 Nunca saia dando PURGE sem entender
🔥 Sempre olhe o SDSF antes de agir
🔥 Aprenda a reconhecer padrões (isso separa operador de operador)
🔥 Documente TUDO
🔥 Conheça mensagens DFH (isso é superpoder)


🧩 Easter Egg técnico

Se você digitar:

CEMT I SYSTEM

Vai ver:

  • Status geral
  • Recursos
  • Saúde do CICS

👉 Pouca gente usa… mas deveria.


🚀 Conclusão

O operador de CICS não é figurante.
Ele é o primeiro firewall humano entre o sistema e o caos.

Enquanto desenvolvedores escrevem código…
👉 Ele garante que o sistema NÃO PARE.

E quando tudo está funcionando perfeitamente…










👉 Foi porque ele fez o trabalho certo — e ninguém percebeu.


quinta-feira, 9 de abril de 2026

🔥 SEU MAINFRAME ESTÁ SEGURO… OU SÓ PARECE?

 

Bellacosa Mainframe em um pequeno bate papo sobre segurança racf saf

🔥 SEU MAINFRAME ESTÁ SEGURO… OU SÓ PARECE?

A Verdade Crua da Segurança no z/OS (Do RACF ao Crypto Express)


☕ Introdução — Um Café com a Realidade

Se você acha que segurança no mainframe é “coisa do passado”, deixa eu te dar um choque de realidade:

O z/OS é um dos ambientes mais seguros do planeta — mas só quando bem configurado.

Porque na prática?

👉 O problema nunca foi a tecnologia
👉 O problema sempre foi quem configura

E é exatamente aqui que começa nossa jornada.


🕰️ Um pouco de história (e por que isso importa)

Nos anos 70, quando surgiram os primeiros sistemas corporativos massivos, a IBM percebeu algo:

“Se todo mundo acessa tudo… uma hora dá ruim.”

Nasce então o conceito de controle centralizado de acesso, que evolui para:

  • RACF
  • SAF
  • E todo o ecossistema de segurança do z/OS

Enquanto o mundo distribuído ainda estava descobrindo autenticação…

👉 O mainframe já tinha segurança granular por recurso


🧠 O Coração da Segurança: SAF + RACF

Pensa nisso como um fluxo batch:

Usuário → SAF → RACF → decisão (ALLOW / DENY)

🧩 Quem faz o quê?

  • SAF → interface (o “porteiro”)
  • RACF → decisão (o “juiz”)

💡 Easter egg Bellacosa:

SAF nunca decide nada… ele só “encaminha o problema” 😄


🔐 O Mandamento Supremo: Least Privilege

Se você tiver que lembrar de UMA coisa:

“Dê o mínimo necessário — nunca o máximo possível.”

Exemplo clássico:

  • Admin RACF → gerencia segurança
  • Storage admin → só mexe em dataset

👉 Separação + privilégio mínimo = sistema saudável


💣 O ERRO QUE MAIS DERRUBA AMBIENTE

❌ PROTECTALL desligado

Sem isso:

Dataset sem perfil → acesso liberado 😱

👉 Simples assim.
👉 Sem perfil = sem segurança

💡 Curiosidade:
Muitos incidentes em mainframe não são ataques…
São configuração mal feita.


🔥 Criptografia no z/OS: Outro nível

Enquanto muita gente ainda “liga TLS”, o z/OS já faz:

🔐 Pervasive Encryption

  • Dados em disco
  • Dados em trânsito
  • Dados protegidos sem mudar aplicação

🧬 A Hierarquia das Chaves (isso cai MUITO!)

Master Key → protege → Operational Key → protege → Data

Tipos importantes:

  • Master Keys → topo da cadeia
  • Symmetric → performance
  • Asymmetric → troca segura
  • Operational → uso diário

💡 Easter egg:

Se perder a master key… acabou o jogo.


⚙️ ICSF — O Tradutor da Criptografia

Aplicação nunca fala direto com hardware.

Ela fala com:

👉 ICSF

Que fala com:

👉 CPACF / Crypto Express


🛡️ Níveis de proteção (isso é ouro de prova)

NívelSegurança
Clear Key😬
Protected Key👍
Secure Key🔥🔥🔥

👉 Secure Key = dentro do hardware (Crypto Express)


💻 APF — Quem pode ser “superpoderoso”

Nem todo programa pode rodar com privilégio.

👉 Só quem está no APF

Programa fora do APF → sem privilégio
Programa no APF → modo supervisor

💡 Isso evita:

  • código malicioso
  • erro catastrófico

🌐 Rede no z/OS — Não é só TCP/IP

z/OS Communications Server

  • TCP/IP (moderno)
  • SNA (legado que ainda vive 😄)

Segurança:

  • TLS → camada transporte
  • IPSec → VPN (nível rede)

📊 SMF — O “log que conta tudo”

Se algo aconteceu:

👉 O SMF sabe

Mas atenção:

Nada é logado automaticamente se você não configurar


🧪 Caso real (estilo Bellacosa)

Empresa com:

  • RACF instalado
  • Criptografia ativa
  • Auditoria configurada

Mas…

❌ PROTECTALL desligado
❌ UACC READ em datasets críticos

Resultado?

👉 Vazamento interno
👉 Sem ataque externo

💡 Moral:

Segurança não é tecnologia — é configuração.


🧠 Mentalidade Mainframe

Enquanto no mundo distribuído se fala:

“vamos adicionar segurança”

No mainframe é:

“vamos NÃO remover a segurança”


🔥 Frases pra tatuar no cérebro

  • “SAF conecta, RACF decide”
  • “Sem PROTECTALL, está exposto”
  • “Sem chave, não há segurança”
  • “ALL = mostra tudo”
  • “SPECIAL = poder total (cuidado!)”

🏁 Conclusão — A Verdade Final

O z/OS não é seguro por acaso.

Ele é seguro porque:

  • Foi projetado assim
  • Evoluiu assim
  • Exige disciplina

Mas…

Um mainframe mal configurado é tão vulnerável quanto qualquer outro sistema.


☕ Fechamento estilo Bellacosa

Segurança no mainframe não é só técnica.

É filosofia.

É controle.

É respeito ao sistema.

E principalmente:

É saber que o perigo não está fora… está dentro da configuração.

terça-feira, 7 de abril de 2026

🧪 LAB SMP/E — “Do APPLY sem CHECK ao RESTORE salvador”

 

Bellacosa Mainframe indica um lab para troubleshooting no Z/os SMP/E

🧪 LAB SMP/E — “Do APPLY sem CHECK ao RESTORE salvador”

🎯 Objetivo

Você vai:

  • Executar RECEIVE → APPLY → ACCEPT → RESTORE
  • Simular um erro real
  • Diagnosticar via relatórios
  • Recuperar o sistema corretamente

👉 Traduzindo:

você vai errar com segurança para aprender de verdade


🧱 Cenário do LAB

🖥️ Ambiente

  • z/OS (real ou Hercules TK5)
  • SMP/E configurado
  • CSI existente
  • Zonas:
    • GLOBAL
    • TARGET
    • DLIB

📦 Dados do exercício

  • FMID: HXYZ123
  • PTFs:
    • UQ00001 (base)
    • UQ00002 (dependente)
    • UQ00003 (com problema 💀)

🔄 FASE 1 — RECEIVE

🎯 Objetivo

Carregar SYSMODs no SMP/E


🧾 JCL

//RECEIVE JOB ...
//SMPE EXEC PGM=GIMSMP
//SMPCSI DD DISP=SHR,DSN=SEU.CSI
//SMPPTFIN DD DISP=SHR,DSN=SEU.PTF.INPUT
//SMPCNTL DD *
SET BDY(GLOBAL).
RECEIVE SYSMODS.
/*

✅ Esperado

  • SYSMODs no SMPPTS
  • GLOBAL ZONE atualizada

🔍 Validar

  • SMPRPT
  • LIST SYSMODS

💣 FASE 2 — ERRO PROPOSITAL (APPLY SEM CHECK)

🎯 Objetivo

Simular erro real de produção


🧾 JCL (errado propositalmente)

//APPLY JOB ...
//SMPE EXEC PGM=GIMSMP
//SMPCSI DD DISP=SHR,DSN=SEU.CSI
//SMPCNTL DD *
SET BDY(TARGET).
APPLY SELECT(UQ00003).
/*

💥 Resultado esperado

  • Aplicação incompleta OU
  • Sistema inconsistente

🧠 O que você fez

💀 ignorou dependências + não usou CHECK


🔍 FASE 3 — DIAGNÓSTICO

🎯 Objetivo

Descobrir o problema


📄 Analisar:

  • SMPOUT
  • SMPRPT
  • Causer Report

💡 Encontrar:

  • Dependência faltando (UQ00002)
  • Possível HOLD

🧠 Insight

SMP/E não falha — ele te avisa


🔁 FASE 4 — APPLY CORRETO

🎯 Objetivo

Corrigir com CHECK


🧾 JCL

//APPLY JOB ...
//SMPE EXEC PGM=GIMSMP
//SMPCSI DD DISP=SHR,DSN=SEU.CSI
//SMPCNTL DD *
SET BDY(TARGET).
APPLY CHECK SELECT(UQ00003) GROUPEXTEND.
/*

✅ Resultado

  • Lista completa de dependências
  • Nenhuma alteração real

🔥 Agora aplicar certo:

APPLY SELECT(UQ00003) GROUPEXTEND.

📦 FASE 5 — ACCEPT

🎯 Objetivo

Consolidar mudança


🧾 JCL

//ACCEPT JOB ...
//SMPE EXEC PGM=GIMSMP
//SMPCSI DD DISP=SHR,DSN=SEU.CSI
//SMPCNTL DD *
SET BDY(DLIB).
ACCEPT CHECK.
/*

⚠️ Depois:

ACCEPT.

💀 Agora você não volta fácil…


🚨 FASE 6 — INCIDENTE

🎯 Simular problema pós-APPLY

👉 Imagine:

  • Programa começa a falhar
  • Load module inconsistente

🔄 FASE 7 — RESTORE

🎯 Objetivo

Reverter mudança


🧾 JCL

//RESTORE JOB ...
//SMPE EXEC PGM=GIMSMP
//SMPCSI DD DISP=SHR,DSN=SEU.CSI
//SMPCNTL DD *
SET BDY(TARGET).
RESTORE SELECT(UQ00003) GROUP CHECK.
/*

🔍 Ajustar dependências

Depois:

RESTORE SELECT(UQ00003) GROUP.

✅ Resultado

  • TARGET revertido
  • Sistema estável

💣 VARIAÇÃO AVANÇADA (nível sênior)

😈 Faça isso:

  1. APPLY
  2. ACCEPT
  3. Tente RESTORE

💥 Resultado:

RESTORE não resolve


🧠 Aprendizado:

ACCEPT muda o jogo completamente


📊 CHECKLIST DO LAB

EtapaStatus
RECEIVE executado
APPLY sem CHECK (erro)
Diagnóstico feito
APPLY correto
ACCEPT realizado
RESTORE executado

🧠 LIÇÕES DO LAB

🔥 1. RECEIVE define o futuro

🔥 2. APPLY muda o presente

🔥 3. ACCEPT congela o sistema

🔥 4. RESTORE depende do passado


☕ FRASE FINAL

💀 “O erro não está no SMP/E… está em quem pula etapas.”


quarta-feira, 28 de janeiro de 2026

💥 Git no z/OS: O Casamento IMPROVÁVEL que Virou Revolução DevOps no Mainframe

 

Bellacosa Mainframe apresenta o GIT para padawans em Mainframe

💥 Git no z/OS: O Casamento IMPROVÁVEL que Virou Revolução DevOps no Mainframe


🧠 Contexto: Antes era “impossível”… hoje é padrão

Em 2018, falar de git rodando dentro do z/OS era quase heresia.

  • Não existia Z Open Automation Utilities
  • Open Source no mainframe? Ainda engatinhando
  • DevOps? Só no mundo distribuído

Hoje… 👇
👉 Temos comunidade ativa
👉 Bash rodando no USS
👉 Ferramentas open source integradas
👉 E sim… git funcionando NATIVAMENTE no z/OS

💣 Traduzindo: o mainframe deixou de ser isolado e entrou no jogo moderno.


🔗 Parte 1 — Conectando z/OS ao GitHub (SSH)

Aqui começa a mágica.

🧩 Problema clássico

z/OS “raiz” muitas vezes não tem DNS configurado.

🔧 Solução (tradução + comentário)

vi /etc/resolv.conf

Adicione:

nameserver 8.8.8.8

💡 Comentário Bellacosa:
Isso aqui parece simples, mas é o que separa você de:

❌ “Host desconhecido”
✔️ Integração com o mundo externo


🔄 Restart do resolver

opercmd "stop resolver"
opercmd "start resolver"

💥 Aqui entra realidade de mainframe:

  • Precisa permissão
  • Ou chama o sysprog amigo 😎

🔍 Teste de DNS

host github.com

Se vier IP → 🎯 sucesso


🔐 Parte 2 — Criando chave SSH (segurança de verdade)

ssh-keygen -t rsa -b 4096 -C "seu-email"

👉 Isso gera:

  • chave privada (fica no z/OS)
  • chave pública (vai pro GitHub)

🚀 Ativando agente SSH

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

📋 Copiando chave pública

vi ~/.ssh/id_rsa.pub

Cola no GitHub:

  • Settings
  • SSH Keys
  • New Key

💡 Insight Bellacosa:
Isso elimina senha.
Você entra no mundo:

👉 autenticação forte
👉 automação
👉 pipelines DevOps reais


🧰 Parte 3 — Instalando Git no z/OS

Aqui é onde muita gente trava.

📦 Solução moderna:

zopen install -y git

🔥 Isso instala:

  • git
  • dependências
  • bash (ESSENCIAL!)

💡 Tradução prática:
Você acabou de transformar seu z/OS em um mini Linux dentro do USS.


🧪 Testando conexão com GitHub

ssh git@github.com

Saída esperada:

You've successfully authenticated, but GitHub does not provide shell access.

💣 Isso aqui é perfeito.
Significa:

👉 conexão OK
👉 autenticação OK
👉 pronto pra usar git


⚙️ Parte 4 — Configuração do ambiente

Edite o profile:

vi ~/.profile

Adicione:

git config --global user.name "Seu Nome"
git config --global user.email "seu-email"
git config --global init.defaultBranch main
bash

💡 Insight poderoso:

👉 O bash aqui muda o jogo
👉 Você sai do shell limitado e entra num ambiente moderno


🔄 Reinicie sessão e valide

ps

Se aparecer:

bash

🎯 Missão cumprida


📂 Parte 5 — Clonando repositório

git clone git@github.com:usuario/repositorio.git
cd repositorio

💡 Aqui começa o DevOps REAL no mainframe.


🌿 Trabalhando com branch (fluxo moderno)

Criar branch

git checkout -b WordPressChange

Adicionar alteração

git add setenv.sh

Validar

git status

Commit

git commit

Enviar pro GitHub

git push origin WordPressChange

💥 TRADUÇÃO BELLACOSA:

Você acabou de fazer isso no z/OS:

👉 versionamento moderno
👉 branch strategy
👉 integração com GitHub
👉 colaboração distribuída

🔥 ISSO É DEVOPS NO MAINFRAME


🧠 Camada EXTRA — O que ninguém te conta

💣 1. USS é o segredo

Sem USS (Unix System Services), isso aqui não existiria.


💣 2. Git não entende dataset nativo

Você está trabalhando com:

👉 arquivos USS
👉 não diretamente com PDS/VSAM


💣 3. Ponte com COBOL

Fluxo real:

  1. Código COBOL no USS
  2. Versionado com git
  3. Deploy → dataset
  4. Compilação via JCL

🔥 Isso conecta dois mundos.


💣 4. Open Source salvando o mainframe

Sem a comunidade:

👉 nada disso existiria
👉 IBM acelerou depois


🧪 Exemplo real (mentalidade enterprise)

Imagine:

  • Squad distribuído
  • Dev Java + Dev COBOL
  • Pipeline CI/CD

👉 GitHub → z/OS → compile → deploy → CICS

🔥 Isso já é realidade hoje


🏁 Conclusão estilo Bellacosa

💥 O que antes era “mainframe isolado” virou:

👉 plataforma integrada
👉 DevOps-ready
👉 open source friendly

E o git?

👉 virou a ponte entre gerações de tecnologia


☕ Frase pra fechar no estilo raiz:

“O mainframe não ficou ultrapassado…
você que ainda não viu ele rodando com git.” 😎🔥