Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #99961
    Dba_RS
    Participante

      Olá pessoal!!! No mês passado ocorreu uma situação muito estranha que não sei como resolver. O usuário executou vários deletes e updates em uma tela de uma aplicação em Delphi (16 operações ao todo). Depois entrou numa outra tela e imprimiu o relatório correspondente, ou seja, as operações tinham sido salvas no banco. Mas, um tempo depois foi consultá-las e elas haviam sumido.
      Bom, pesquisamos pelo logminer e vimos que as 16 operações apareciam numa mesma transação (mesmo XID) e, ao final da décima sexta, foram todas desfeitas (mais 16 linhas na v$logminer_contents, com rollback=1). Mas o usuário havia impresso o relatório, o que confirma que as operações foram salvas. Vocês já viram algo semelhante? Tem dois pontos nessa situação que me intrigam: Primeiro, que o commit foi feito pelo Delphi (método post) e segundo que cada operação deveria ser uma transação, pois na tela do delphi é executado um post(save) a cada operação. Não consigo entender por que no logminer consta como se as 16 operações fossem de uma única transação e muito menos por que foi feito esse rollback e as transações foram perdidas. Se souberem me dar uma dica, agradeço.

      #99967
      Ishii
      Participante

        Olá,

        Mas poderia ter acontecido da Impressão do Relatório usar a mesma sessão do Oracle? Com isso os dados estariam ainda na sessão mas sem o commit. Portanto, a impressão aproveitou os dados da sessão mas não efetivamente da Tabela (com isso apenas em outra sessão ou depois de “fechar” o sistema). Aparentemente pelo histórico do logminer que você postou, parece ser a situação mais provável.

        No final (fechamento do sistema) pode não ter ocorrido o commit, por qualquer razão (queda de conexão por exemplo) e os dados não seriam salvos…

        Na verdade são suposições, pois não conheço exatamente como foi feito o sistema….

        []s Ishii

        #99971
        marlontk
        Participante

          Bom dia,
          Possivelmente aconteceu o que o Ishii explicou mas só para constar que tua descrição Primeiro, que o commit foi feito pelo Delphi (método post).
          Que eu saiba o método post apenas aplica as alterações que estão na memória da maquina para a session no banco e não efetua commit.
          Isto falando de Clientdataset o método que aplica isso no banco é o applyupdates.

          Mais um detalhe se estiver trabalhando com Transaction no delphi exige-se efetuar commit da transação mesmo aplicando com o applyupdates.

          #99991
          Dba_RS
          Participante

            Olá, obrigada pelas respostas.
            Nesta tela os desenvolvedores não usam o applyupdates, pois trabalham diretamente com o DBNavigator, vinculado a uma TQuery.
            Como eu não trabalho com o Delphi, estava me baseando naquilo que me relataram, de que a cada post no DBNavigator, o registro deve ser comitado no BD.
            Mas se não for dessa forma, faz sentido o que foi relatado pelo logminer.

            Vou questionar melhor essa questão do Delphi, pois o que estão relatando, “que registros comitados estão sendo perdidos”, foge a toda garantia de integridade do SGBD. Pensei até que pudesse ser algum bug. O problema é que o sistema existe há anos, e só agora começou a apresentar esse “problemão”. Desde janeiro já aconteceram 2 situações semelhantes de perda de informação.

            Obrigada

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.