Pesquisar este blog

terça-feira, 2 de maio de 2017

IBM Debug Tool perdendo os break points a cada execução e não guarda a configuração da tela

JCL para Recuperar Configuração do Debug Tool no Mainframe

No mainframe, o Debug Tool utiliza dois arquivos de controle: um para salvar os breakpoints e outro para guardar suas configurações personalizadas. Como no ambiente em que trabalho os arquivos são deletados automaticamente sem aviso, já perdi minhas preferências algumas vezes. Para não passar mais por isso, montei um JCL que recria tudo de forma automática. Agora, sempre que entro no sistema, rodo junto com o HRECALL e mantenho minha configuração do jeito que gosto!


//C001BUGA JOB BUGA,BUGA,CLASS=K       RESTART=STEP#002
/*NOTIFY WALBUGA
//*--------------------------------------------------------------------
//* Aloca arquivos utilizados pelo debug tool no z/OS
//*--------------------------------------------------------------------
//STEP#001  EXEC PGM=IEFBR14
//SAVINGS     DD DSN=WALBUGA.DBGTOOL.SAVESETS,
//               DISP=(NEW,CATLG,DELETE),
//               UNIT=SYSDA,SPACE=(CYL,(20,10)),
//               DCB=(LRECL=3204,BLKSIZE=0,DSORG=PS,RECFM=VB)
//SETTINGS    DD DSN=WALBUGA.DBGTOOL.SAVEBPS,
//               DISP=(NEW,CATLG,DELETE),
//               UNIT=SYSDA,SPACE=(CYL,(20,10)),
//               DCB=(LRECL=3204,BLKSIZE=0,DSORG=PO,RECFM=VB),
//               DSNTYPE=LIBRARY
//*--------------------------------------------------------------------
//* Carrega configuracoes que o Buga gosta!
//*--------------------------------------------------------------------
//STEP#002  EXEC PGM=IEBGENER
//SYSIN      DD DUMMY
//SYSPRINT   DD SYSOUT=X
//SYSUT1     DD *
      COMMENT YES - DO NOT MODIFY THIS LINE 12/18/2018 10:50:06 AM;
      SET ASSEMBLER OFF;
      SET ASSEMBLER STEPOVER EXTONLY;
      SET AUTOMONITOR ON NOLOG CURRENT;
      SET CHANGE STATEMENT;
      SET COLOR TURQUOISE NONE     HIGH TITLE HEADERS;
      SET COLOR GREEN     NONE     LOW  TITLE FIELDS;
      SET COLOR TURQUOISE REVERSE  LOW  MONITOR AREA;
      SET COLOR TURQUOISE REVERSE  LOW  MONITOR LINES;
      SET COLOR WHITE     REVERSE  LOW  SOURCE AREA;
      SET COLOR TURQUOISE REVERSE  LOW  SOURCE PREFIX;
      SET COLOR YELLOW    REVERSE  LOW  SOURCE SUFFIX;
      SET COLOR RED       REVERSE  HIGH SOURCE CURRENT;
      SET COLOR GREEN     NONE     LOW  SOURCE BREAKPOINTS;
      SET COLOR TURQUOISE NONE     HIGH PROGRAM OUTPUT;
      SET COLOR YELLOW    NONE     LOW  TEST INPUT;
      SET COLOR GREEN     NONE     HIGH TEST OUTPUT;
      SET COLOR BLUE      REVERSE  HIGH LOG LINES;
      SET COLOR WHITE     NONE     HIGH COMMAND LINE;
      SET COLOR GREEN     REVERSE  HIGH WINDOW HEADERS;
      SET COLOR BLUE      REVERSE  HIGH TOFEOF MARKER;
      SET COLOR RED       NONE     HIGH TARGET FIELD;
      SET DEFAULT LISTINGS;
      SET DEFAULT DBG;
      SET DEFAULT MDBG;
      SET DEFAULT SCROLL PAGE;
      SET DEFAULT VIEW STANDARD;
      SET DEFAULT WINDOW SOURCE;
      SET DISASSEMBLY OFF;
      SET DYNDEBUG ON;
      SET ECHO ON;
      SET EXECUTE ON;
      SET EXPLICITDEBUG OFF;
      SET FIND BOUNDS 1 *;
      SET HISTORY ON 100;
      SET IGNORELINK OFF;
      SET LDD SINGLE;
      SET LIST TABULAR OFF;
      SET LIST BY SUBSCRIPT OFF;
      SET LOG OFF;
      SET LOG KEEP 1000;
      SET LOG NUMBERS ON;
      SET LONGCUNAME ON;
      SET MONITOR DATATYPE OFF;
      SET MONITOR LIMIT 1000;
      SET MONITOR NUMBERS ON;
      SET MONITOR WRAP ON;
      SET MSGID OFF;
      SET PACE 2;
      SET PF1      "?"... =   ?;
      SET PF2      "STEP" = STEP;
      SET PF3      "QUIT" = QUIT;
      SET PF4      "LIST" = LIST;
      SET PF5      "FIND" = IMMEDIATE FIND;
      SET PF6      "AT/CLEAR" =AT TOGGLE;
      SET PF7      "UP" =   IMMEDIATE UP;
      SET PF8      "DOWN" = IMMEDIATE DOWN;
      SET PF9      "GO" =   GO;
      SET PF10     "ZOOM" = IMMEDIATE ZOOM;
      SET PF11     "ZOOM LOG" =IMMEDIATE ZOOM LOG;
      SET PF12     "RETRIEVE" =IMMEDIATE RETRIEVE;
      SET PF13     "?"... =   ?;
      SET PF14     "STEP" = STEP;
      SET PF15     "QUIT" = QUIT;
      SET PF16     "LIST" = LIST;
      SET PF17     "FIND" = IMMEDIATE FIND;
      SET PF18     "AT/CLEAR" =AT TOGGLE;
      SET PF19     "UP" =   IMMEDIATE UP;
      SET PF20     "DOWN" = IMMEDIATE DOWN;
      SET PF21     "GO" =   GO;
      SET PF22     "ZOOM" = IMMEDIATE ZOOM;
      SET PF23     "ZOOM LOG" =IMMEDIATE ZOOM LOG;
      SET PF24     "RETRIEVE" =IMMEDIATE RETRIEVE;
      SET POPUP 15;
      SET PROMPT LONG;
      SET REFRESH OFF;
      SET RESTORE SETTINGS AUTO;
      SET RESTORE BPS AUTO;
      SET RESTORE MONITORS AUTO;
      SET REWRITE 50;
      SET SAVE SETTINGS AUTO;
      SET SAVE BPS AUTO FILE WALBUGA.DBGTOOL.SAVEBPS;
      SET SAVE MONITORS AUTO;
      SET SCROLL DISPLAY ON;
      SET SUFFIX ON;
      SET WARNING ON;
      WINDOW SIZE 3 LOG;
      WINDOW SIZE 28 SOURCE;
      WINDOW SIZE 8 MONITOR;
      SET SCREEN ON;
      SET SCREEN 1 MONITOR SOURCE LOG;
      SET KEYS ON 12;
      SET MONITOR COLUMN ON;
//SYSUT2     DD DSN=WALBUGA.DBGTOOL.SAVESETS,
//              DISP=(OLD,CATLG,DELETE),
//              UNIT=SYSDA,SPACE=(CYL,(20,10)),
//              DCB=(LRECL=3204,BLKSIZE=0,DSORG=PS,RECFM=VB)
//

Dica: Usando esse JCL, você nunca mais perde suas configurações do Debug Tool, mesmo que o sistema delete seus arquivos sem aviso. Personalize o nome dos datasets conforme sua necessidade!

Figura 1: Tela do Debug Tool no mainframe z/OS mostrando arquivos de configuração e breakpoints alocados
Figura 1: Debug Tool iniciando o debug de um programa

sexta-feira, 10 de fevereiro de 2017

O Dia da Telefonia

O dia da Telefonia

Caraca, quanta gente na loja da TIM será que tão dando aparelho pré pago de graça?

Mal ai os erros de português, sejam eles de concordância, ortográficos, regência entre tantos outros que ocorrerão ao longo do texto. Ai que me caiu a ficha... quem tá lá pode não estar descontente com a TIM, mas com sua antiga operadora, no meu caso eu já me fodi de verde e amarelo com celular uma pá de vez...

Tinha meu BCP em Sampa que funcionava uma boa nos primórdios mas só em Sampa, mudei pro interior de São Paulo pra fazer faculdade e o BCP já não me atendia mais, comprei um TESS que funcionava de vez em quando e até em outros estados uma maravilha, aí uma tal de CLARO comprou a tal da TESS e então que começaram meus problemas com celular... a CLARO só queria colocar no meu toba, sei lá deve ser porque eu morava em Campinas e tal... aí mandei pras picas a CLARO e comprei não, digo, minha mina de saco cheio de ver eu reclamando da CLARO e me deu um TIM, putz, show de bola falar de graça ou por 7 centavos (nem lembro mais) funcionava que era uma maravilha até que um dia o telefone simplesmente parou de funcionar...

Esses ainda tenho os protocolos de reclamação neles e na ANATEL... deixa eu procurar aqui... merda não achei, mas lembro que foi mais de 50 ligações daquelas que você fica esperando uma cara e depois de uma meia hora a linha simplesmente cai... mas consegui depois de muito custo que me respondessem que o que tava com problema era meu chip, beleza, mandei pras picas a TIM e fiquei mais umas 4-5 semanas sem celular, afinal o TIM já não funcionava a uns 25 dias mesmo, e fui feliz no meu breve período sem celular, mas aí já viu né, não ter um celular o pessoal taxa você de fugiu a palavra e tal... então fui lá e comprei um da VIVO.

Ah lembrei aqui que antes do BCP minha mãe tinha um TELESP mas era meados de 90 e era um símbolo de digamos status e precisava ter ele. Pô, nem lembro mais onde eu estava ah sim... que comprei um VIVO, até aí tudo bem, depois da primeira conta desisti, tinham clonado a criança logo na primeira semana depois da compra... mandei cancelar, paguei a multa de cancelamento de contrato e tal (não paguei a conta ao menos isso) e mandei de volta o celular pra eles com aviso de recebimento e tudo mandando o Jones enfiar ele bem no meio da musiquinha... hehe... falaram que a mina foi no jo um dia desses mas eu to dormindo cedo já faz algum tempo...

Bom... como já tinha experimentado todas as operadoras do estado fiquei meio sem opção e resolvi comprar um Vesper, uma vez que eu estava viajando muito pouco e em Campinas ele me atendia na cidade inteira... pegava até me Pedreira!! Uma maravilha de operadora (tudo bem que é fixa! hahah, mas tá valendo!) e fui feliz por um bom tempo, comprei um TIM de novo e tudo ia na boa...

Ah lembrei uma vez em Minas comprei duma tal de Oi eu acho ou era Telemig (sei lá) e dessa não tive do que reclamar, funcionou belezinha em toda minha visita pelo estado, tudo bem que o tiozinho que me vendeu o chip cobrou 30tão pra fazer o meu TIM funcionar com o cartão que ele tava me vendendo, até que saiu barato... bom e aí vai com alguns solavancos até que aí me mandaram pro meio do planalto central transferi o meu celular ainda estava com um TIM e bah nem te conto deu o mesmo pau que eu já presenciara anos atrás com meu telefone mudo, sem fazer nem receber ligação e às vezes recebia mensagens que tinham me ligado e tal...

Dessa vez foi mais rápida a resposta, me ligaram no trampo perguntaram se eu podia falar naquele momento, disse que não e ok, pensei que me ligariam depois e tal... que nada, porra nenhuma... depois de uns 3 dias da ligação que recebi, liguei lá de novo e me informaram que a minha reclamação estava encerrada e que o problema estava resolvido... ri e com toda elegância e fineza que recebi de algum lugar mandei a atendente ir tomar no meio da musiquinha e fiquei muito feliz mesmo... liguei mais umas 3 vezes até conseguir que me reabrissem o chamado, nesse meio tempo liguei na ANATEL que registrou novamente a minha reclamação como problema continua. Deu uns dias me ligaram informando que em minha região não havia torre e que meu celular nunca funcionou no endereço que indiquei nem no meu trampo pois é área não coberta, ri denovo, nessa altura já tinha comprado um celular da BrasilTelecom (merda igual, mas depois eu conto) e tava com o TIM só esperando ver o que daria minhas reclamações... enfim com a TIM acabou não dando em nada, me cansei... sai de mentiroso, afinal meu celular nunca funcionou em casa nem no trampo e que eu deveria procurar outra operadora... não que eu não tenha feito isso conforme disse acima, mas vai tomar no cu, funcionava e um belo dia parou...

Dessa vez descobri que tiraram a porra da antena daqui de perto e que mais uma porrada de gente tinha tomado no boga e perdido o precioso número do telefone... mas beleza... sem galho... eu nunca fiquei muito tempo com o mesmo telefone só mesmo o 19 30328810 esse era clássico e todo mundo tinha... hoje ainda ligo nele perguntando se alguém deixou recado pra mim... hahaha e o pior que de vez em quando tem e olha que o cara é gente fina e me avisa... eu já dei meus telefones certinho pra ele, falando nisso preciso ligar lá e passar o meu novo telefone que comprei ontem um da Claro, porque a BrasilTelecom me deixou na mão na primeira semana e olha que tive que ir rapidinho pra Sampa resolver uns problemas tipo comprei o celular na quinta e viajei na sexta, algo assim, e a criança parou de funcionar no sábado...

Depois de muita reclamação o sistema bloqueou minhas chamadas, pois eu estava em roaming e meu padrão de utilização não "seguia" a tendência de uso... hahaha... que padrão... eu tinha acabado de comprar e isso não existe, detesto algumas regras de negócios que o pessoal da tecnologia tem que seguir e programar em seus sistemas essa trava é idiota, mas tá certo né... até o boy já teve um diretinho (celular com conta que alguém abre com documentos falsos e funciona uns dias depois já era...) nem sei se hoje ainda tem, mas o fato é que mandei a BrasilTelecom pras picas e passei no shoppinho num quiosquinho da Claro e comprei meu chip e desbloqueei meu celular que acabara de comprar na outra semana da BrasilTelecom...

Muito complicado agora cansei desse tal de conta e cansei mesmo... comprei o chip pré pago já com o desbloqueio e saiu 50tinha. O celular pagarei multa novamente, mas já acostumei, deve sair uns 700 mangos pra eu desistir da BrasilTelecom, acho que dessa vez vou ligar o foda-se e que meu CPF me perdoe! Afinal tempo pra ir no Procon nunca terei e advogado que se preze não perde tempo com picuinha (afinal aqui não é os istatis). Acho que é isso aí pessoal, Bom final de semana, Buga Ah porra tava esquecendo... o porque que escrevi isso tudo... não importa qual, já testei quase todas e cara acho que nenhuma se safa. Se pelo menos os meus aparelhos fossem desbloqueados eu teria muito menos dor de cabeça e menos gastos com cláusulas muito inteligentes nos contratos - como gostei de um que dizia assim - Não li mas concordo!!!!

Fui.

Provavelmente escrito em Brasilia em meados de Julho de 2009

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