Pesquisar este blog

quinta-feira, 3 de novembro de 2016

Mass Insert DB2 - Inserindo uma caralhada de dados no on-line de uma vez só! Da hora, funciona!

Pequena alteração? Só um insert...

Esses dias me deparei com uma alteração de um programa (já entregue, testado e evidenciado) que precisou de uma “pequena alteração”, só um insert dizia o pedido.

Esse tipo de situação é muito corriqueira (lembro uma vez que trabalhei um carnaval inteiro (desde a sexta feira antes do carnaval até a quarta de cinzas porque tinha que ir pra produção no almoço da quarta de cinzas – esse fiz questão (só pra saber que não era urgente porra nenhuma e que não teria a volumetria informada nunca) de colocar contador de execução e emissão de relatório pra eu saber a real utilização da parada – BINGO, nem o cara que pediu usou na tal quarta de cinzas! Um tempo depois chegou uma solicitação pra desencanar da parada (o “projeto” inicial era bem trabalhoso e saiu só um cotoquinho na quarta de cinzas – afinal milagre é outro departamento, mágica ainda vai!) acho que até hoje deve ter um texto meu no código fonte bem puto explicitando que as vezes fazemos papel de palhaço atendendo pedidos que sabemos que não vai ter futuro, mas que os chefes nas camaradagens e nas boas vizinhanças acabam aceitando (mesmo também sabendo e concordando que não vai vingar) sinceramente não entenderei jamais os meandros do mundo corporativo!

Lembrei de uma vez que o Mané pediu um lê-grava na sexta pra entregar na segunda que era boiada... humpft, outro final de semana e madrugadas, mas esse usaram bastante!

Enfim, voltando a minha pequena alteração de hoje (outubro 2016). Depois que conversei com o figura que fez a solicitação inicial e na hora que integrou tudo reparou que precisava da “alteração” porque esqueceu na hora de “especificar” ou o “cliente” mudou de ideia, enfim, me pagam para além de fazer mágica, resolver pepinos e aqui estou!

A parada era simples, de verdade! Só ler uma tabela recebida via linkage e ir inserindo os caras que não fossem “branco” numa tabela XPTO. Como trabalhei bastante tempo com sistemas on-line de alta performance e diga-se de passagem quando comecei a trabalhar com isso foi justamente retirando os acessos ao DB2 substituindo-os para acesso a arquivos VSAM e outras soluções bem interessantes (como as TS residentes para “tabelas” pequenas).

Isso posto – como diria o nosso advogado Rodrigo – sei e tenho a noção que sair da QR (o programa é CICS e não é ThreadSafe) e ir pra L8 uma porrada de vezes pra gravar no DB2 não é uma boa ideia. Sai então pra pesquisa, afinal alguem já deve ter tido uma situação parecida de fazer uma inserção em massa no DB2 de uma vez só.

A pesquisa foi relativamente simples, tem bastante coisa de DB2 que aparece quando ‘googla’ direitinho (procurei por multiple-row-insert), vi o manual do DB2 – 11 e localizei o que eu precisava. Só os exemplos que estavam meio capengas, mas nada que com uma fuçada aqui e ali não resolvesse.

A parada ficou bem legal pro que eu precisava e deixa eu colocar o código aqui pra não esquecer – afinal pra isso que fiz esse blog!...

Simplificando... a tabela ‘digamos’ que tenha só 2 campos SMALLINT e not null os 2 e a chave é os 2.

As variáveis:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
/                                                              
*---------------------------------------------------------------*
*   MASS INSERT DB2                                            
*---------------------------------------------------------------*
01  FILLER             PIC X(30) VALUE 'MASS INSERT'.
01  GD-MASS-INSERT.
   03 I                PIC S9(4) COMP VALUE 1.
   03 GD-NR-LINHAS     PIC S9(4) COMP VALUE 0.
   03 GD-CAMPO1        PIC S9(4) COMP OCCURS 1000.
   03 GD-CAMPO2        PIC S9(4) COMP OCCURS 1000.
/                                                               

Na section do insert fiz um loopzinho básico pra varrer a entrada e mover os dados válidos e acumular quantos eram eles.

O insert é bem “normal”

    EXEC SQL
        INSERT INTO BVISANET.TABELA_XPTO
        (CAMPO_HUM, CAMPO_DOIS)
        VALUES (:GD-CAMPO01, :GD-COMPO02)
        FOR :GD-NR-LINHAS ROWS
        NOT ATOMIC CONTINUE ON SQLEXCEPTION
    END-EXEC.

E no meu caso nem se deu certo ou não eu precisava, nos testes deu uns erros 253 que indica que “olha eu tentei fazer o que voce pediu, mas não garanto porque deu caca” e o 254 que olha amigo, não rolou nem unzinho! Em ambos ou se quiser analisar a parada mais a fundo tem o “GET DIAGNOSTICS” que sai do escopo desse post (afinal nem usei a criança).

O “NOT ATOMIC” é pra não parar se der erro, afinal eu quero uma inserção em massa, os erros depois vejo o que faço com eles, quer dizer, nesse caso nada!

Fiquei puto com a “pequena alteração” ainda mais sabendo que meu patrão não recebe um centavo disso - na real quem deveria saber e cobrar sequer fica sabendo ou se sabe faz o lance da boa vizinhança, e enfim, entramos no mesmo lance do mundo corporativo que não entendo. mas aprendi uma nova e como não manjo nada de DB2 acho que foi bem produtivo!

Deixa eu colocar a fotinho do TSO pra eu lembrar que sou trouxa e trabalho depois do horário (achei que fosse coisa do meu outro serviço, mas parece que é crônico, afinal tudo é urgente e pra ontem!) e mais trouxa ainda porque não entro na justiça processando meu empregador!...

Figura 1: Buga Troxa

Figura 1: Buga Troxa

Os Códigos de SQL da versão 11 do DB2 podem ser pesquisados no link abaixo

http://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/codes/src/tpc/db2z_n.html

Nota:

Ver com o Aldenon ou com o Thiago se eles ainda tem o e-mail de outra vez que trabalhei igual maluco nas madrugada pra abrir o criptograma na mão com todos os passos e tals...

Achei!
Re: Documentação da função CVN 17 de 22.06.2013 tem o anexo e tudo com o passo a passo! (esse só pra eu lembrar mesmo porque tem muita informação $40, vulgo confidencial) e pra não esquecer que se o viadinho do Chahad tivesse descolado o programinha que ele usava tinha resolvido isso instantâneamente!

segunda-feira, 3 de outubro de 2016

SLATVARS - Saindo da ignorância rumo ao conhecimento!

SLATVARS - Saindo da Ignorância Rumo ao Conhecimento!

Depois de quase uma década trabalhando com mainframe utilizando utilitários da CA para versionamento/controle de versões/etc sempre me deparei com o SLATVARS (incluida pelo step de compilação que chama o librarian) e nos pós compiladores/verificadores/padronizadores de código se a variável não existe ou se esta fora de sintonia com o esperado o programa é rejeitado.

Sempre encontrei problemas com isso justamente por querer saber como que as coisas funcionam e para o que serve cada coisa. Não sou muito fã do copiar e colar, apenas quando é a única opção e essa era a minha opção para o SLATVARS.

Como não existe quase nada sobre mainframe na internet, nunca nenhuma de minhas pesquisas retornou algum dado sobre isso. Da leitura do manual do Roscoe nunca achei nada, no manual do Librarian que eu tinha não falava nada sobre como configurar, de onde vem os dados enfim, não sabia nem qual era o significado do SLATVARS, afinal o VARS é invenção da instalação (shop) que eu trabalhei, o nome correto é só SLAT.

Descobrindo o Significado de SLATVARS

Pelo menos nesse último quesito, o significado, agora é conhecido. SLATVARS é um acrônimo para Source Load Audit Trail! Agora entendo porque meus fontes compilados sem o Step do Librarian caiam pro pessoal de qualidade e eles reclamavam que não tinha o SLATVARS!

Referência Útil

Pra não perder o manual do Librarian - Implementation Guide r4.4.

segunda-feira, 11 de julho de 2016

Manuais do Roscoe - Ca-Roscoe Release 6 - RPF Language Guide - Roscoe User Guide

Manuais CA Roscoe para Mainframe – Download

Tudo bem que atualmente o pessoal está usando o RDz, o MicroFocus e outras ferramentas "modernas" para programar em mainframe, mas sempre vai ter alguém que precisa do bom e velho Roscoe. Então deixa eu salvar os manuais aqui pra não perder.

Manuais Individuais

Nome do Arquivo Tamanho Download
b001733e - User Guide.pdf 1.4 MB Download
b001723e - System Reference Guide.pdf 988 KB Download
b001712e - System Commands Guide.pdf 554 KB Download
b001702e - Security Administration Guide.pdf 307 KB Download
b001692e - RPF Language Guide.pdf 1.2 MB Download
b001682e - Release Guide.pdf 264 KB Download
b001673e - Programs and Utilities Guide.pdf 958 KB Download
b001662e - Messages and Codes Guide.pdf 1,017 KB Download
b001653e - Installation Guide.pdf 476 KB Download
b001642e - Getting Started.pdf 390 KB Download
b001632e - Extended Facilities for System Programmers Guide.pdf 824 KB Download
b001622e - Extended Development Tools Guide.pdf 450 KB Download
b001613e - Command Reference Guide.pdf 1.8 MB Download

Pacote Completo

Pacotão - B001743E.TGZ

quarta-feira, 22 de junho de 2016

PROTEÇÃO DE CÓDIGO FONTE VIA OFUSCAMENTO - Cobol - magos do mainframe - Exemplos

Atualização do TCC: Slides, Vídeo e Arquivos sobre Ofuscamento de Código

Atualização 14.11.2022 – O vídeo parece que perdi, vou procurar em algum backup pra ver se acho, tinha subido no Dropbox, mas aparentemente minha conta foi pro espaço.

Em tempo, achei as lâminas da apresentação:

E no YouTube:

Finalizado o TCC.

O vídeo está tosco porque cortou na hora de mandar pro YouTube, deve ter ficado em casa a versão certinha, mas como é pra eu não esquecer, deixa ele aqui pra garantir.

Tem o PDF e o WORD do TCC entregue. (Coloquei o WORD também porque enche o saco copiar e colar de PDF!)

Vídeo 1: Apresentação

Assista ao vídeo da apresentação no YouTube

sábado, 4 de junho de 2016

6 Bips Máquina de Lavar Roupas LS12Q - Electrolux - Manual de Instruções

Electrolux LS12Q – Saga dos 6 Bips e Solução

Essa máquina deu trabalho!

Os 6 bips (avisos sonoros) intermitentes que de uma hora pra outra faz a máquina parar de funcionar é de deixar qualquer um de cabelo em pé!

Troquei primeiro a válvula de 2 vias que deu pau (nítido porque não entrava água na máquina a contento) depois começaram os bips, aí foi uma verdadeira saga, primeiro troca a placa de nível, vulgo Pressostato Eletrônico,

Pressostato Eletrônico LS12Q

Figura 1: Pressostato Eletrônico LS12Q

volta a funcionar depois volta o problema, depois a placa central (Placa Potência/Controle) PaulaHigh

Placa Potência LS12Q

Figura 2: Placa Potência LS12Q

mas caiu no mesmo esquema, volta a funcionar e a intermitência do problema retoma a vida!).

Por fim achei um site especializado (para técnicos em geral) que tava perguntando/relatando a mesma situação:

http://www.eletrorespostas.com.br/diversas-lavadoras-eletrolux-dando-defeito

Percebi que a parada iria ser na tentativa e erro, sem falar que quando desconectava e reconectava a mangueira do nível o defeito sumia, quando ficava muito tempo desligada também... Enfim, trocamos a fiação/rabicho/chicote e nunca mais deu o problema, acho que era alguma coisa dando mal contato ou oxidada, mas a certeza jamais saberei.

Anexo1: Manual usuário LS12Q

nem alusão aos avisos sonoros (bipes)

Atualização em 11.6.2016

Agora que descolei o manual de serviços! Valeu o comentário do leitor!

Eletrolux LS12Q - Manual de Serviços LS12Q (LAVADORAS DE ROUPAS TOP LOAD - ELETROMECÂNICAS LTR10/LTR12/LTS12/LS12Q)

Eletrolux LS12Q - Manual de Instruções