Duvida Roolback

Discussão em 'Progress 4GL' iniciado por julianfiglioli, Setembro 28, 2015.

  1. julianfiglioli

    julianfiglioli Membro Participativo

    Senhores, bom dia.

    Fui surpreendido om uma situação, na verdade uma dúvida que não soube responder.

    Comentaram comigo que quando se esta fazendo algum procedimento muito grande que atualiza várias linhas e tabelas, caso caia a energia do terminal do usuário, o procedimento que havia atualizado apenas metade das informações necessárias, não faz um Roolback destas informações, deixando o processo pela metade.
    Tendo então que abrir um chamado na Totvs para que ela envie um programa de acerto de base para corrigir estes dados.

    Eu achei a situação estranha.

    Mas os senhores com maior experiência.

    Já viram algo do tipo. É possível que isso aconteça, ou se acontece é por culpa da aplicação e não do banco.

    Obrigado.
  2. julianfiglioli

    julianfiglioli Membro Participativo

    Desculpe pela falha na grafia do "Rollback" .... Digitei rápido e não fiz a revisão! rsrs
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Sim , isso é verdade!!!

    Fiz dezenas de teste de transação e o único que consegue impedir essa BÓSNIA é algo assim:

    Código:
    TMaior:
    DO TRANS ON ERROR UNDO, LEAVE:
        DO ON QUIT UNDO TMaior, LEAVE:
           DO ON STOP UNDO TMaior, LEAVE:
              DO ON ERROR UNDO, LEAVE:
                [OPERAÇÕES]
              END.
           END.
        END.
    END.
    
    rhemati curtiu isso.
  4. julianfiglioli

    julianfiglioli Membro Participativo

    @rafael.andrade

    No caso isso tem que ser tratado na aplicação então. Não tem nada no banco que podemos fazer para evitar ou corrigir?
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Você consegue simular esta situação colocando uma mensagem no meio e matando o usuário via proshut, tipo:

    Código:
    FOR EACH TabelaTeste EXCLUSIVE-LOCK.
          DELETE TabelaTeste.
    END.
    
    TMaior:
    DO TRANS ON ERROR UNDO, LEAVE:
        DO ON QUIT UNDO TMaior, LEAVE:
           DO ON STOP UNDO TMaior, LEAVE:
              DO ON ERROR UNDO, LEAVE:
                 CREATE TabelaTeste.
                 ASSIGN TabelaTeste.Campo = "ABCDE".
                 MESSAGE "Hora de matar este usuário" VIEW-AS ALERT-BOX INFO BUTTONS OK.
              END.
           END.
        END.
    END.
    
    Depois de matar o usuário, testa se o registro foi criado e preenchido na transação normal e nessa.

    Na época que fiz os testes era o Progress 10.1C, não sei se ainda continua no 10.2B.
    rhemati e julianfiglioli curtiram isso.
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Pois é, até onde eu conheço só podemos tratar a nível de aplicação...infelizmente.
    rhemati e julianfiglioli curtiram isso.

Compartilhe esta Página