quinta-feira, 17 de fevereiro de 2011

🔥 SQLCODE no DB2 – Lendo os Sinais da Força (Guia para Padawans Mainframe) 🔥

 

SQLCODE quando o programa Cobol deve tratar o retorno do db2

🔥 SQLCODE no DB2 – Lendo os Sinais da Força (Guia para Padawans Mainframe) 🔥

 


Todo padawan que começa no DB2 passa pelo mesmo rito de iniciação:
o programa compila, o BIND passa…
e na execução surge aquela linha silenciosa e cruel:

SQLCODE = -911

Fim.
Tela verde.
Respiração suspensa.

Mas calma. SQLCODE não é inimigo.
Ele é o oráculo do DB2 — fala pouco, mas fala a verdade.


🧠 O Que é SQLCODE, de Verdade?

SQLCODE é a forma que o DB2 tem de dizer:

👉 “Eu tentei.”
👉 “Funcionou.”
👉 “Funcionou mais ou menos.”
👉 “Deu ruim.”

Cada comando SQL retorna um SQLCODE.
Sempre.
Sem exceção.

💡 Regra de ouro Bellacosa:
Nunca ignore SQLCODE.
Quem ignora SQLCODE, debuga em produção.


⚖️ Zero, Positivo ou Negativo – A Trindade Sagrada

🟢 SQLCODE = 0 → Tudo Certo

O DB2 está feliz.
Você também deveria estar.

  • SELECT encontrou linha

  • INSERT gravou

  • UPDATE atualizou

  • DELETE removeu

💡 Comentário:
Zero não é “talvez”.
Zero é sucesso absoluto.


🟡 SQLCODE > 0 → Aviso (Warning)

Aqui mora a confusão dos iniciantes.

Positivo não é erro.
É o DB2 dizendo:

“Funcionou… mas presta atenção.”

Exemplos clássicos:

  • +100 → nenhuma linha encontrada

  • +802 → divisão por zero evitada

  • +466 → truncate de dado

💡 Dica Padawan:
+100 em SELECT não é falha.
É lógica de negócio.

🥚 Easter egg:
Muitos sistemas tratam +100 como erro… e criam bugs por conta própria.


🔴 SQLCODE < 0 → Erro

Aqui o DB2 cruzou os braços.

Nada foi feito.
Ou pior: foi feito parcialmente.

Negativo significa:

  • SQL inválido

  • Dados inconsistentes

  • Lock

  • Timeout

  • Permissão

  • Conversão errada

💡 Regra Jedi:
SQLCODE negativo exige ação imediata.
Ignorar é lado sombrio.


🧨 SQLCODEs que Todo Padawan Precisa Conhecer

🔥 -100 → Nenhuma linha encontrada (antigo)

Hoje quase arqueologia.
Substituído por +100.


🔥 +100 → Nenhuma linha encontrada

Clássico do SELECT:

SELECT ... INTO ...

Sem registro.

💡 Dica:
Teste +100 como fluxo normal.
Não como exceção.


🔥 -305 → NULL sem indicador

DB2 tentou colocar NULL em campo COBOL “cheio de orgulho”.

💡 Lição:
Campo nullable exige indicador.


🔥 -302 → Conversão ou tamanho inválido

Número grande demais, decimal errado, CHAR mal definido.

💡 Fofoquinha:
90% dos -302 vêm de DCLGEN desatualizado.


🔥 -803 → Violação de chave única

Tentou inserir algo que já existe.

💡 Boa prática:
-803 não é erro técnico.
É regra de negócio.


🔥 -805 → DBRM / PACKAGE não encontrado

O terror noturno.

💡 Tradução Bellacosa:
“Esqueceu o BIND.”


🔥 -818 → Timestamp mismatch

Recompilou, mas não rebindeou.

💡 Comentário:
Esse erro ensina disciplina melhor que qualquer curso.


🔥 -911 / -913 → Deadlock ou Timeout

DB2 desistiu da briga.

💡 Dica Jedi:
Trate retry no código.
Não xingue o DB2 — ele só sobreviveu.


🧪 SQLERRD(3) – O Número que Poucos Olham

Dentro do SQLCA existe um tesouro esquecido:

👉 SQLERRD(3) = número de linhas afetadas

  • UPDATE

  • DELETE

  • INSERT

💡 Easter egg profissional:
Às vezes SQLCODE = 0…
mas SQLERRD(3) = 0.

Executou, mas não mudou nada.


⚙️ Tratamento de SQLCODE no COBOL – Boas Práticas

Nunca faça:

IF SQLCODE NOT = 0
   DISPLAY 'ERRO'
END-IF

Faça:

  • Trate 0

  • Trate +100

  • Trate negativos relevantes

💡 Dica Bellacosa:
SQLCODE é parte da lógica, não exceção.


🗣️ Fofoquices de Sala-Cofre

  • “Mas em QA funciona” → dado diferente

  • “Nunca deu isso antes” → agora deu

  • “É erro intermitente” → lock


🧠 Pensamento Final do El Jefe

SQLCODE é o idioma do DB2.
Quem não fala esse idioma:

  • culpa o banco

  • cria workaround perigoso

  • aprende do jeito difícil

🔥 Para o Padawan:
Leia o SQLCODE.
Entenda o contexto.
Respeite os avisos.

Porque no DB2,
o erro não grita — ele retorna um número. 🧠💾


quarta-feira, 16 de fevereiro de 2011

🔥 Challenges of Running COBOL with Git – Uma Observação Prática (com cheiro de sala-cofre) 🔥

 

COBOL e os desafios do GITHUB e ECLIPSE

🔥 Challenges of Running COBOL with Git – Uma Observação Prática (com cheiro de sala-cofre) 🔥

Durante décadas, COBOL e z/OS viveram felizes no seu ecossistema fechado, previsível e extremamente confiável. ISPF, PDS/PDSE, JCL, compile noturno, café forte e aquele silêncio respeitoso do data center. Então alguém chegou dizendo:

“Agora tudo é Git. Branch, pull request, rebase e pipeline.”

🤔 Pause dramático de mainframer veterano.

Este artigo nasce de pesquisa, observação prática e muita conversa de corredor — aquele tipo de conhecimento que não aparece em Redbook, mas surge no café das 3h da manhã durante um IPL mal-humorado.


🧬 1. EBCDIC vs UTF-8 – A Guerra Invisível dos Bytes

Aqui começa o primeiro boss final.

Git assume UTF-8. COBOL em z/OS respira EBCDIC. Misture isso sem regras claras e você ganha:

  • Literais corrompidos

  • DISPLAY mostrando hieróglifos

  • Compilação falhando sem erro “óbvio”

💡 Dica Bellacosa:
Defina conversão explícita e obrigatória no pipeline. Nada de “ah, o plugin cuida disso”. Ele não cuida.

🥚 Easter egg:
Muitos bugs “fantasma” em COBOL moderno não são lógicos — são encoding bugs disfarçados.


📚 2. Copybooks – O Efeito Dominó Silencioso

COBOL sem copybook é como mainframe sem SMF: tecnicamente existe, mas ninguém confia.

O problema?
Git não entende dependência semântica.

  • Um copybook alterado

  • 137 programas impactados

  • 12 recompilados

  • 125 esquecidos

  • Produção quebra… só amanhã

💡 Dica de guerra:
Pipeline dependency-aware é obrigatório. Ferramentas como DBB, scripts de impacto ou metadados não são luxo — são sobrevivência.

🗣 Fofoquinha real:
Já vi incidente crítico porque “era só um copybook de comentário”. Spoiler: não era.


📐 3. Diffs, Colunas e a Maldade do Espaço em Branco

Git ama linhas.
COBOL ama colunas.

Um espaço fora do lugar vira:

  • Diff gigante

  • Merge impossível

  • Revisão inútil

Comentários deslocados geram mais conflito que erro lógico.

💡 Dica Bellacosa raiz:

  • Padronize formatação

  • Use ferramentas de pretty-print COBOL

  • Trate espaço em branco como código, não estética

🥚 Easter egg clássico:
Um MOVE perfeito na lógica pode falhar só porque começou na coluna errada. Git não entende isso. O compilador sim — e ele não perdoa.


⚙️ 4. Build, Compile e o “CI/CD de Verdade”

Aqui mora a grande ilusão moderna:

“Ah, só dar git push que compila.”

Não, não compila.

COBOL exige:

  • Compile no z/OS

  • Link-edit

  • Bind DB2

  • Execução JCL

  • Controle de RC

  • Logs rastreáveis

Sem automação real, Git vira apenas um repositório bonito.

💡 Dica prática:
Se o commit não dispara compile, bind e validação automática, você não tem CI/CD — só tem GitHub caro.


🧠 5. Cultura, Pessoas e o Choque de Gerações

Aqui não é tecnologia — é gente.

  • Desenvolvedores COBOL dominam ISPF como ninguém

  • Git traz conceitos novos: rebase, squash, branch strategy

  • Sem cuidado, isso vira atrito desnecessário

💡 Dica de liderança técnica:
Não force Git “goela abaixo”. Traduza conceitos:

  • Branch ≈ versão lógica

  • Pull request ≈ revisão formal

  • Pipeline ≈ JCL automático

🗣 Comentário de bastidor:
Os melhores times são híbridos: mainframers aprendendo Git e devops aprendendo z/OS. Quem só ensina e não aprende falha.


🔐 6. Segurança – RACF não é GitHub (e nunca será)

Git trabalha com:

  • Usuário

  • Token

  • Repo

Mainframe trabalha com:

  • Identidade

  • Perfil

  • Dataset

  • Auditoria pesada

Alinhar RACF/ACF2/TSS com Git não é trivial, principalmente em ambientes regulados.

💡 Dica Bellacosa:
Auditoria e rastreabilidade devem nascer no pipeline, não serem “adaptadas depois”.

🥚 Easter egg corporativo:
Compliance sempre descobre o problema depois que o sistema já está em produção.


🧠 Pensamento Final – Git Funciona com COBOL?

Sim.
Mas não por mágica.

Git funciona com COBOL quando existe:

  • Disciplina

  • Ferramentas corretas

  • Pipeline consciente

  • Respeito à cultura mainframe

Sem isso, você só moderniza o problema — não a solução.

🔥 Provocação final do El Jefe:
Quantos ambientes “modernizados” hoje só trocaram o PDS por Git, mas mantiveram os mesmos riscos de 1989?

terça-feira, 15 de fevereiro de 2011

💾 z/OS 1.13 — o último dos clássicos e o primeiro dos modernos ⚙️

 




Bellacosa Mainframe apresenta:
💾 z/OS 1.13 — o último dos clássicos e o primeiro dos modernos ⚙️


🕰️ Ano de lançamento e contexto histórico

O z/OS 1.13 foi lançado em 2011, no embalo da chegada do IBM zEnterprise EC12 (zEC12).
Era o fim de uma era: o último z/OS com numeração “1.x”, antes da transição para o novo formato 2.x.
Um verdadeiro divisor de águas — onde o z/OS deixou de ser apenas o “sistema operacional do mainframe” e começou a se posicionar como o sistema nervoso central do datacenter híbrido.

No mundo real, 2011 foi o ano do boom da virtualização, do Big Data nascente e da corrida por eficiência energética e custo de CPU. E o z/OS respondeu à altura.


🧠 A alma técnica do z/OS 1.13

O z/OS V1R13 trouxe um pacote de avanços que preparou o terreno para o que viria com o z/OS 2.1 e o zBC12.
Vamos aos detalhes dignos de um café forte ☕💻:

⚙️ Gerenciamento de memória e performance

  • Expansão da memória virtual 64-bit, permitindo endereçamento muito mais eficiente.

  • Aprimoramentos no z/Architecture para lidar com Large Pages (1MB e 2GB), reduzindo TLB misses e melhorando a performance de bancos de dados e CICS.

  • O Hiperspaces e o Dataspaces receberam otimizações, tornando o acesso a grandes volumes de dados em memória muito mais rápido.

  • Suporte ampliado a 1 TB de memória real por LPAR (dependendo do hardware).

💡 Curiosidade Bellacosa: Foi aqui que muitos sites começaram a migrar workloads inteiros para DB2 e IMS em modo 64-bit, abrindo o caminho para o mundo da IA que viria anos depois.


🧩 Firmware PR/SM e créditos de CPU

O z/OS 1.13 aproveitou uma grande revisão no PR/SM (Processor Resource/System Manager) introduzida com o zEnterprise.
Esse firmware é o “síndico” do condomínio das LPARs — ele decide quem ganha tempo de CPU, quem dorme, e quem acorda.

Novidades marcantes:

  • HyperDispatch aprimorado: melhora na afinidade entre threads e processadores físicos.

  • HiperSockets e OSA-Express 4S com integração mais fina no z/OS — reduzindo a latência interna de rede.

  • Créditos de CPU (MSU credits) mais dinâmicos, com suporte à política de “on-demand capacity” e “capacity upgrade on the fly”.

  • Melhor controle de Weight e Capping, reduzindo desperdício de ciclos em workloads não prioritários.

💬 Tradução Bellacosa: o z/OS 1.13 começou a pensar em energia e custo como gente grande.
Era o mainframe dizendo: “Posso ser poderoso, mas também posso ser eficiente.”


🧰 Softwares internos e integração

O pacote interno do z/OS 1.13 veio turbinado. Algumas gemas técnicas:

ComponenteNovidades e aprimoramentos
JES2Suporte estendido ao spool em 64-bit e melhorias no checkpoint dataset.
RACFAutenticação com PassTickets aprimorada e integração com LDAP.
DFSMSNovo Space Constraint Relief e HSM otimizado para migração automática.
TCP/IP stackNovos algoritmos de flow control e suporte a IPv6 estável.
RRS (Resource Recovery Services)Recuperação de transações em sysplex mais rápida.
zFSSistema de arquivos z/OS Filesystem agora padrão, substituindo HFS.
z/OSMF (Management Facility)Ferramenta web para gerenciamento, interface moderna (início tímido, mas promissor).

💾 Curiosidade técnica:
Foi também com o z/OS 1.13 que o z/OSMF começou a ser levado a sério — ele ainda era “meio bugado”, mas a IBM já previa que o futuro seria web-based até no mainframe.


🧮 O que muda nas instruções de máquina

O z/OS 1.13 passou a explorar novos z/Architecture instructions do z196 e zEC12:

  • DFP e BFP Floating-Point extensions — operações matemáticas de alta precisão.

  • Cryptographic Extensions — suporte a SHA-2, AES-256 e SSL/TLS acelerados via hardware.

  • Transactional Execution Facility (TEF) — início do suporte a instruções atômicas de transação.

  • Cache Subset Controls — instruções para controle fino de cache L3/L4.

📘 Nota técnica Bellacosa: O z/OS 1.13 é considerado o primeiro z/OS “totalmente preparado para o futuro”, pois ele já foi desenhado para o zEC12 e zBC12, lançados depois.


💬 Avanços de software e operação

Alguns pontos que brilharam:

  • SDSF com interface ISPF aprimorada e novos filtros dinâmicos.

  • Workload Manager (WLM) mais inteligente, com políticas adaptativas baseadas em service class goals.

  • Parallel Sysplex com tolerância de latência reduzida — o tempo de comunicação entre LPARs caiu drasticamente.

  • SMF expandido, com novos tipos de registros para performance e segurança.

  • JES2 Checkpoint Duplexing — o checkpoint podia ser espelhado para maior confiabilidade.


🧬 Curiosidades, histórias e “fofoquices”

  • Muitos chamam o z/OS 1.13 de “o último z/OS raiz” — o último antes da virada para o z/OS 2.x, quando a IBM mudou completamente o modelo de licenciamento e de suporte.

  • O z/OS 1.13 é lembrado com carinho por sysprogs porque era estável como uma rocha — dizem que muitos ambientes o rodaram por 10 anos sem um único IPL completo.

  • É também o primeiro z/OS com suporte “oficial” a RACF passphrase longa (até 100 caracteres!).

  • E, claro, foi o último a rodar “confortavelmente” em hardware da geração z10 — depois disso, o 64-bit virou obrigatório de verdade.


🧭 Resumo técnico Bellacosa

ItemDestaque técnico
Lançamento2011
Hardware alvoz196 / z114 / zEC12
Memória suportadaaté 1 TB por LPAR
Kernelz/Architecture 64-bit
Firmware PR/SMHyperDispatch + capping dinâmico
Novos recursoszFS padrão, JES2 duplexing, z/OSMF, IPv6
Instruções novasCriptografia, FP extensions, Transactional Execution
CuriosidadeÚltima versão da série 1.x do z/OS
Apelido entre sysprogs“O último dos estáveis”

Bellacosa Mainframe conclui:
O z/OS 1.13 foi aquele equilíbrio perfeito entre tradição e inovação.
Ele ainda tinha o charme dos painéis ISPF, a robustez do JES2 e a estabilidade lendária do MVS — mas já piscava o olho para o futuro com o z/OSMF, IPv6 e automação web.

“Se o z/OS fosse um whisky, o 1.13 seria aquele 18 anos envelhecido em tambor de Sysplex: suave, encorpado e impossível de esquecer.” 🥃💾

domingo, 6 de fevereiro de 2011

🔥 Five Major Components of CICS

 

os 5 principais componentes do CICS

🔥 Five Major Components of CICS

 


☕ Midnight Lunch, região CICS no ar e tudo funcionando

13h26.
A região subiu limpa.
Nenhum erro no log.
Usuários entrando.

Alguém pergunta, meio desconfiado:

“Mas… o que realmente faz o CICS funcionar?”

A resposta curta: cinco grandes componentes.
A resposta Bellacosa? Bora destrinchar um por um — com história, prática e verdade de data center.


Five Major Components of CICS

🏛️ História: CICS não é monolito, é orquestra

Desde os anos 60, o CICS foi pensado como:

  • Um monitor transacional

  • Um sistema operacional dentro do z/OS

  • Um orquestrador de recursos

Para isso, ele se organizou em componentes bem definidos, cada um com responsabilidade clara.

📌 CICS funciona porque cada parte sabe o seu lugar.


🧠 Conceito essencial

CICS é dividido em componentes especializados,
não em “funcionalidades soltas”.

Entender isso muda sua forma de debugar, otimizar e projetar.


🧱 Os Cinco Grandes Componentes do CICS


1️⃣ Program Control (PC) – o maestro

O que faz?

  • Carrega programas

  • Controla LINK, XCTL e RETURN

  • Gerencia reentrância

  • Mantém o fluxo da transação

Exemplos de comandos

  • LINK

  • XCTL

  • RETURN

📌 Se o fluxo está errado, comece aqui.


2️⃣ File Control (FC) – o guardião dos dados

O que faz?

  • Acesso a VSAM e outros arquivos

  • Controle de concorrência

  • Lock e recovery

Comandos típicos

  • READ

  • WRITE

  • REWRITE

  • DELETE

📌 Arquivo em CICS não é leitura. É compromisso.


3️⃣ Terminal Control (TC) – a interface humana

O que faz?

  • Comunicação com terminais

  • Envio e recebimento de telas (BMS)

  • Gerenciamento de sessões

Comandos comuns

  • SEND

  • RECEIVE

📌 Se o usuário vê algo estranho, o problema mora aqui.


4️⃣ Storage Control (SC) – o gerente invisível

O que faz?

  • Gerencia memória (MAIN e AUX)

  • Aloca e libera storage

  • Evita vazamentos

Tipos

  • GETMAIN

  • FREEMAIN

📌 Storage mal cuidado derruba região.


5️⃣ Task Control (Dispatcher) – o coração pulsante

O que faz?

  • Cria e encerra tasks

  • Escalona CPU

  • Garante multitasking

📌 É por isso que mil usuários trabalham ao mesmo tempo.


🥊 Componentes vs Problemas comuns

ProblemaComponente suspeito
Fluxo erradoProgram Control
Arquivo travadoFile Control
Tela não apareceTerminal Control
Storage crescendoStorage Control
Lentidão geralTask Control

📌 Diagnóstico começa pelo componente certo.


🛠️ Passo a passo Bellacosa (como pensar CICS)

1️⃣ Usuário entra → Task Control
2️⃣ Tela aparece → Terminal Control
3️⃣ Programa executa → Program Control
4️⃣ Dados acessados → File Control
5️⃣ Storage usado → Storage Control

📌 O CICS é um fluxo vivo.


⚠️ Erros clássicos (easter eggs)

🐣 Misturar responsabilidades
🐣 Culpar “o CICS” sem analisar componente
🐣 Ignorar SC até faltar storage
🐣 READ UPDATE desnecessário
🐣 LINK infinito

📌 Todo incidente grave passa por um desses.


📚 Guia de estudo para mainframers

Para dominar o CICS de verdade:

  • CICS Architecture

  • Program Control & Task Control

  • Storage Management

  • File Control internals

  • Performance tuning

📖 Manual essencial: CICS Transaction Server Administration Guide


🤓 Curiosidades de boteco mainframe

🍺 CICS gerencia memória melhor que muito runtime moderno
🍺 Task Control antecede schedulers atuais
🍺 Program Control inspirou frameworks
🍺 CICS roda há décadas com o mesmo conceito-base


💬 Comentário El Jefe Midnight Lunch

“Quando você entende os componentes,
o CICS deixa de ser mistério e vira ferramenta.”


🚀 Aplicações reais hoje

  • Core bancário

  • Sistemas governamentais

  • Seguros e previdência

  • Pagamentos globais

  • APIs corporativas


🎯 Conclusão Bellacosa

Os cinco grandes componentes do CICS são a espinha dorsal do online corporativo.

Quem domina:

  • Debuga mais rápido

  • Desenha melhor

  • Evita incidente feio

🔥 CICS não é complexo. Ele é organizado.


segunda-feira, 31 de janeiro de 2011

🔥 Aprender COBOL com DB2 — o caminho do programador mainframer de verdade

 

Aprenda COBOL com DB2 ao estilo Bellacosa Mainframe

🔥 Aprender COBOL com DB2 — o caminho do programador mainframer de verdade



🧠 Introdução: por que COBOL + DB2 ainda manda no jogo

Se você quer ser programador mainframe COBOL com DB2, precisa entender uma verdade simples:

COBOL processa.
DB2 guarda.
SQL conecta o cérebro à memória do negócio.

Não estamos falando de tecnologia “antiga”.
Estamos falando da infraestrutura que processa bilhões por dia, com ACID, consistência e auditoria que muita stack moderna ainda tenta copiar.

Esse artigo é um mapa de estrada, do zero até o código profissional, misturando:

  • técnica

  • história

  • prática

  • fofoca de data center

  • e aquela sabedoria que só mainframer velho passa no café ☕


DB2 o banco de dados do Mainframe


🧱 PARTE 1 — Conhecendo o DB2 (o coração dos dados)

📜 Um pouco de história

O DB2 nasce na IBM nos anos 80, baseado no modelo relacional proposto por Edgar F. Codd.

👉 Conceito revolucionário:

  • dados em tabelas

  • relações lógicas

  • SQL como linguagem declarativa

Enquanto o mundo brigava com arquivos VSAM:

“Me diga o que você quer, não como buscar.”


🧩 Modelo Relacional (base de tudo)

  • Tabela → entidade de negócio

  • Linha (row) → registro

  • Coluna (column) → atributo

  • Primary Key → identidade

  • Foreign Key → relacionamento

💬 Bellacosa comenta:

“Se você não entende modelo relacional, não adianta saber COBOL.”


🧾 Tipos de Dados DB2 (o casamento com COBOL)

DB2COBOL
CHAR / VARCHARPIC X
INTEGERPIC S9
DECIMALPIC S9V
DATEPIC X(10)
TIMESTAMPPIC X(26)

🥚 Easter egg:
DB2 guarda DECIMAL melhor do que muito banco moderno guarda FLOAT 😏


Queries SQL no DB2 

🧑‍💻 PARTE 2 — Linguagem SQL no DB2

🗣️ SQL: a língua franca dos dados

SQL não é procedural.
SQL é declarativa.

🔹 DDL — Data Definition Language

CREATE TABLE CLIENTE ( ID_CLIENTE INTEGER NOT NULL, NOME VARCHAR(50), SALDO DECIMAL(9,2), PRIMARY KEY (ID_CLIENTE) );
  • CREATE

  • DROP

  • ALTER


🔹 DCL — Data Control Language

GRANT SELECT ON CLIENTE TO USER01;

Controle de acesso.
Segurança raiz de banco.


🔹 DML — Data Manipulation Language

INSERT INTO CLIENTE VALUES (1, 'JOÃO', 1500.00); SELECT * FROM CLIENTE; UPDATE CLIENTE SET SALDO = SALDO + 100 WHERE ID_CLIENTE = 1; DELETE FROM CLIENTE WHERE ID_CLIENTE = 1;

💬 Bellacosa:

“DELETE sem WHERE é como RM -RF /”


🔍 SELECT, JOIN e afins (onde o bicho pega)

SELECT C.NOME, P.VALOR FROM CLIENTE C JOIN PEDIDO P ON C.ID_CLIENTE = P.ID_CLIENTE;

👉 JOIN mal feito = batch lento = gente te ligando às 3 da manhã.


🛠️ SPUFI e QMF

  • SPUFI → SQL direto no TSO

  • QMF → consultas, relatórios, análise

💡 Dica Bellacosa:

“Todo mundo começa no SPUFI.
Quem fica bom, aprende QMF.”



🧩 PARTE 3 — COBOL com DB2 (onde nasce o profissional)

🏛️ História rápida do COBOL

  • Criado em 1959

  • Foco: negócio

  • Legibilidade

  • Estabilidade

👉 Não é bonito.
👉 É confiável.


🧠 Estrutura de um programa COBOL

  • IDENTIFICATION DIVISION

  • ENVIRONMENT DIVISION

  • DATA DIVISION

  • PROCEDURE DIVISION

📌 Árvore programática é fundamental para não virar macarrão lógico.


🔗 Host Variables (a ponte COBOL ↔ DB2)

EXEC SQL SELECT SALDO INTO :WS-SALDO FROM CLIENTE WHERE ID_CLIENTE = :WS-ID END-EXEC.
  • Sempre com :

  • Tipagem correta

  • Conversão consciente


📊 SQLCA — seu melhor amigo

IF SQLCODE = 0 CONTINUE ELSE DISPLAY 'ERRO DB2 ' SQLCODE END-IF
SQLCODESignificado
0OK
+100NOT FOUND
< 0ERRO

💬 Bellacosa:

“Quem ignora SQLCODE vira operador sem saber.”


📚 DCLGEN — o BOOK sagrado

  • Gera layout da tabela

  • Gera host variables

  • Evita erro humano

//STEP01 EXEC PGM=DSNTEP2

👉 Nunca escreva layout DB2 na mão. Nunca.


Consulta pagina via cursor no DB2

🌀 PARTE 4 — Cursores (nível profissional)

🔄 Cursor para leitura

EXEC SQL DECLARE C1 CURSOR FOR SELECT ID_CLIENTE, NOME FROM CLIENTE END-EXEC.
EXEC SQL FETCH C1 INTO :WS-ID, :WS-NOME END-EXEC.

📌 Sempre:

  • OPEN

  • FETCH

  • CLOSE


✍️ Inserindo, alterando e excluindo via COBOL

  • INSERT → novo registro

  • UPDATE → alteração controlada

  • DELETE → cuidado máximo

💡 Boa prática:

“Nunca DELETE direto sem histórico.”


🧠 PARTE 5 — Boas práticas Bellacosa Mainframe

✔ Use DCLGEN
✔ Sempre trate SQLCODE
✔ Evite SELECT *
✔ Documente regra de negócio
✔ Separe lógica de acesso a dados
✔ Teste com volume real
✔ Pense em performance desde o SELECT

🥚 Easter egg clássico:

“O batch estava lento porque alguém esqueceu o índice.”


🧪 Exercícios de fixação (mentalidade correta)

  1. Criar tabela DB2

  2. Gerar DCLGEN

  3. Programa COBOL com:

    • INSERT

    • SELECT

    • UPDATE

    • DELETE

  4. Programa com CURSOR

  5. Programa com JOIN

  6. Analisar SQLCODE

  7. Ajustar performance

👉 Isso forma programador, não copiador de código.


🧠 Comentário final Bellacosa

Aprender COBOL com DB2 não é aprender uma linguagem.
É aprender:

  • como dados movem o mundo

  • como sistemas críticos pensam

  • como escrever código que não pode falhar

🔥 COBOL + DB2 não é passado.
É o núcleo silencioso do presente.

Enquanto modas passam,
o batch fecha o dia.

 

sábado, 8 de janeiro de 2011

🔥 JCL no z/OS V1R1 — quando o “antigo” ganhou sobrenome moderno

 

Bellacosa Mainframe apresenta JCL Job Control Language


🔥 JCL no z/OS V1R1 — quando o “antigo” ganhou sobrenome moderno



📅 Datas importantes

  • Release (GA): outubro de 2000

  • Final de suporte (EoS/EoM): entre 2004 e 2005 (dependendo do nível de suporte IBM e migração para V1R2+)

O z/OS V1R1 marcou oficialmente a transição do OS/390 para z/OS, e o JCL veio junto — o mesmo DNA dos anos 60, agora rodando num sistema “novo em folha”.


🧬 Contexto histórico

Quando a IBM lançou o z/OS V1R1, o JCL já era um veterano respeitado. Ele não nasceu no z/OS — nasceu lá atrás, no OS/360 (1964) — mas sobreviveu a tudo: MVT, MVS, ESA, OS/390… e chegou ao z/OS sem pedir licença.

O que muda aqui não é a linguagem, mas o ambiente, o poder da máquina, a integração com UNIX System Services, TCP/IP nativo e workloads híbridos.

👉 Moral da história:

“Troca o sistema, troca o nome, troca o marketing… mas o JCL continua mandando no turno da noite.”


JCL V1R1

✨ O que há de “novo” no JCL do z/OS V1R1

Tecnicamente, o JCL é compatível para trás, mas o z/OS V1R1 trouxe melhorias indiretas importantes:

🆕 1. Integração total com o z/OS

  • JCL agora orquestra:

    • Batch tradicional

    • Utilitários do DFSMS

    • Programas que acessam USS (OMVS)

    • Processos ligados a TCP/IP e middleware

🆕 2. JES2/JES3 mais maduros

  • Melhor gerenciamento de:

    • Spool

    • Classes

    • Prioridades

    • Restart de jobs

🆕 3. DFSMS mais forte

  • JCL passa a explorar melhor:

    • SMS-managed datasets

    • Storage Groups

    • Management Classes

    • Data Classes

👉 O JCL continua simples, mas o ecossistema ao redor ficou muito mais poderoso.


🔧 Melhorias e mudanças percebidas no dia a dia

✔ Melhor estabilidade no processamento batch
✔ Melhor convivência entre online (CICS) e batch
✔ Menos “abend misterioso” por problemas de storage
✔ Maior previsibilidade de execução noturna

Nada de comandos novos mirabolantes — o ganho foi operacional.


🥚 Easter Eggs (para mainframer raiz)

  • 🥚 JCL que funcionava no OS/390 funcionava igual no z/OS V1R1
    Isso facilitou migrações gigantes sem reescrever milhares de jobs.

  • 🥚 Muitos shops migraram para z/OS sem mudar uma linha de JCL
    Só recompilaram programas e ajustaram SMS.

  • 🥚 O //STEPLIB DD * continuava sendo usado… mesmo sendo má prática 😅


💡 Dicas Bellacosa para quem viveu (ou estuda) essa época

🔹 Aprenda JCL como linguagem de orquestração, não só como “script batch”
🔹 Entenda bem:

  • DISP

  • SPACE

  • UNIT

  • COND vs IF/THEN/ELSE
    🔹 Leia syslog e JESMSGLG como quem lê log de produção moderna
    🔹 Lembre-se:

JCL errado não falha — ele executa errado.


📈 Evolução a partir do V1R1

Depois do z/OS V1R1, o JCL seguiu firme:

  • V1R3+ → IF/THEN/ELSE mais usado

  • V1R6+ → Melhor integração com ferramentas modernas

  • V2.x → JCL convivendo com DevOps, schedulers e automação

Mas a base?
👉 Exatamente a mesma.


📜 Exemplo clássico de JCL (estilo raiz)

//BELLJOB  JOB (ACCT),'BELLACOSA',CLASS=A,MSGCLASS=X
//STEP01   EXEC PGM=IEFBR14
//OUTFILE  DD  DSN=BELLACOSA.TESTE.JCL,
//             DISP=(NEW,CATLG,DELETE),
//             SPACE=(TRK,(1,1)),
//             UNIT=SYSDA

💬 Comentário Bellacosa:

“Se você entende esse JCL, você entende 70% do batch do mainframe.”


🧑‍🔧O que é DFSMS?

Na verdade, o DFSMS (Data Facility Storage Management Subsystem) não é apenas um utilitário único, mas sim uma suíte poderosa de componentes da IBM para o ambiente z/OS.

Em termos simples: ele é o "gerente de logística" do seu mainframe. Ele automatiza e centraliza a gestão de onde os dados são gravados, por quanto tempo ficam guardados e como são protegidos.


Os 4 Pilares do DFSMS

Para entender o DFSMS no dia a dia do JCL, é preciso conhecer seus principais componentes:

  1. DFSMSdfp (Data Facility Product): O coração do sistema. Gerencia o acesso aos dados e a movimentação básica. É aqui que mora o famoso utilitário IDCAMS.

  2. DFSMSdss (Data Sets Services): Focado em cópia, movimentação e backup de alta performance. O programa principal chamado via JCL é o ADRDSSU.

  3. DFSMShsm (Hierarchical Storage Manager): Responsável por "limpar a casa". Ele migra dados pouco usados para mídias mais baratas (como fita ou discos lentos) e faz o backup automático.

  4. DFSMSrmm (Removable Media Manager): Gerencia suas fitas (físicas ou virtuais), controlando quem pode usá-las e quando podem ser apagadas.


Como ele aparece no seu JCL?

No passado, você precisava dizer exatamente em qual disco (UNIT e VOL=SER) seu arquivo deveria morar. Com o DFSMS (especificamente o componente SMS), o sistema faz isso sozinho através de três parâmetros principais no comando DD:

  • DATACLAS (Data Class): Define os atributos físicos (organização, formato de registro, tamanho).

  • STORCLAS (Storage Class): Define o nível de serviço (em qual disco ele vai morar, se precisa ser um disco rápido ou SSD).

  • MGMTCLAS (Management Class): Define o "prazo de validade" (quando o HSM deve deletar ou migrar o arquivo para fita).

Exemplo de DD com SMS:

Snippet de código
//ARQUIVO  DD DSN=USER.TESTE.DADOS,
//            DISP=(NEW,CATLG,DELETE),
//            DATACLAS=DCPADRAO,
//            STORCLAS=SCFAST,
//            MGMTCLAS=MGT030D

🛠️ Principais Utilitários que você usará

Se você está procurando o "programa" para rodar, os mais comuns vinculados ao DFSMS são:

UtilitárioPara que serve?
IDCAMSCriar, deletar, listar e gerenciar VSAM e catálogos.
ADRDSSUCopiar volumes inteiros ou datasets específicos em alta velocidade.
IEBCOPY(Gerenciado pelo DFP) para copiar e comprimir bibliotecas (PDS/PDSE).

🧠 Comentário final

O JCL no z/OS V1R1 prova uma verdade que todo mainframer aprende cedo:

Tecnologia boa não morre — ela evolui sem fazer barulho.

Enquanto linguagens vêm e vão, o JCL segue lá, silencioso, confiável, rodando milhões de jobs por noite…
…e garantindo que o mundo acorde com banco, energia, avião e folha de pagamento funcionando.

🔥 Longa vida ao JCL.