- Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 8 meses atrás por
Dba_RS.
-
AutorPosts
-
12 de julho de 2011 às 7:11 pm #99961
Dba_RS
ParticipanteOlá 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.13 de julho de 2011 às 1:36 am #99967Ishii
ParticipanteOlá,
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
13 de julho de 2011 às 3:10 pm #99971marlontk
ParticipanteBom 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.
14 de julho de 2011 às 6:10 pm #99991Dba_RS
ParticipanteOlá, 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
-
AutorPosts
- Você deve fazer login para responder a este tópico.