Re: [oracle_br] RES: Inconsistência em tabelas des normalizadas: replicação ?

2005-07-25 Por tôpico Marcel
Buenas Ederson

As mensagens não estão desabilitadas; o único commit está após o bloco onde
sempre as 3 tabelas são manipuladas. Acho que o mais interessante ainda, é
que na tabela de auditoria que montei aparece que o update "duplicado",
apareceu vários segundos após os outros, depois também de outros updates
corretos. Ou seja, parece um "comando perdido" sendo executado fora de hora.

Assim, novamente não vejo outro local que pudesse estar causando o erro,
exceto a replicação. E aí voltaria a minha dúvida original.

De qualquer maneira, agradeço a todos que tentaram dar uma pista para a
solução deste problema. Se alguém estiver disposto a dar uma olhada com um
pouco mais de profundidade, eu posso mandar em PVT o código que faz as
alterações e a listagem da tabela de auditoria, onde aparece a alteração
"fantasma".

Grato a todos

Marcel


.
- Original Message - 
From: "Ederson" <[EMAIL PROTECTED]>
To: 
Sent: Monday, July 25, 2005 2:05 PM
Subject: [oracle_br] RES: Inconsistência em tabelas desnormalizadas:
replicação ?


Marcel,



Com certeza o Forms é diferente na forma de trabalhar das outras linguagens
visuais. Mas mesmo usando campos Based_Table, não deveria haver problemas de
dados, pois se houver alteração nos campos de tela e vc mudar de
Camvas/Window ou fechar, acontece um evento do Forms que dá mensagem de
Changed-values, e como é default receber a mensagem, vc saberia. Caso os
desenvolvedores tenham desabilitado as mensagens, o programa poderia estar
passando por cima de avisos, mas só aconteceria uma gravação se o valor
chegasse na variável em um ponto do programa que haja um commit.



Difícil acreditar que um programa de faturamento esteja ruim assim.





Estou usando o [EMAIL PROTECTED], veja informações do produto em:



http://www.unimix.com.br/replic.html



Um dos desenvolvedores do [EMAIL PROTECTED], o Sr.Renan Medeiros, participa da
nossa lista.





Ederson Elias de Oliveira

DBA Oracle

Setransp - GO

---

  _

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Marcel
Enviada em: segunda-feira, 25 de julho de 2005 13:16
Para: oracle_br@yahoogrupos.com.br
Assunto: Re: [oracle_br] RES: Inconsistência em tabelas desnormalizadas:
replicação ?



Buenas Ederson

Realmente, a alteração da replicação Multimaster para Snapshot Read-only
reduziu bastante o problema. Só que eu esperava que os mesmos acabassem, o
que não ocorreu. O Salvio sugeriu a reescrita da aplicação como não base
table, sugerindo que algum evento do Form possa estar sendo disparado sem
que eu consiga ter percebido ou identificado. É uma hipótese que eu não
havia pensado.

Qual foi o produto que vocês adotaram para a replicação?

[]'s

Marcel
.




__

Histórico: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
Falar com os Moderadores:([EMAIL PROTECTED])
Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar 
__ 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 




Re: [oracle_br] RES: Inconsistência em tabelas des normalizadas: replicação ?

2005-07-25 Por tôpico Marcel
Buenas Ederson

Realmente, a alteração da replicação Multimaster para Snapshot Read-only
reduziu bastante o problema. Só que eu esperava que os mesmos acabassem, o
que não ocorreu. O Salvio sugeriu a reescrita da aplicação como não base
table, sugerindo que algum evento do Form possa estar sendo disparado sem
que eu consiga ter percebido ou identificado. É uma hipótese que eu não
havia pensado.

Qual foi o produto que vocês adotaram para a replicação?

[]'s

Marcel
.
- Original Message - 
From: "Ederson" <[EMAIL PROTECTED]>
To: 
Sent: Monday, July 25, 2005 10:03 AM
Subject: [oracle_br] RES: Inconsistência em tabelas desnormalizadas:
replicação ?


Marcel,

Estou há pouco tempo na empresa atual, e quando cheguei, me deparei com um
ambiente com replicação multimaster.

Havia uma série de problemas que aconteciam devido o problema das transações
não serem cronologicamente respeitadas. Isto causava perdas de informações,
pois poderiam haviam dois updates no mesmo registro que deveria ser
respeitado a cronologia, e o último continha a informação atual. Porém,
devido à não-serialização da transação, como vc bem lembrou, era aplicado no
banco remoto, em primeiro lugar, aquela que deveria ser o último valor, e em
seguida, a transação mais antiga chegava e sobescrevia o valor, retornando a
informação ao valor anterior, ficando assim o(s) banco(s) com informações
diferentes.

Havia tb o problema da transação com muitas linhas, que a replicação
multimaster considera como "uma transação com muitas linhas" e não conseguia
fazer a mesma remotamente na mesma ordem, então eram feitas as transações
com "uma ou poucas linhas" primeiro, contudo estas transações com poucas
linhas alteravam registros que já haviam sido alterados pela transação
grande. Novamente, a informação última (atual) era perdida.

Fora os problemas de sincronia, também deparei com uma grande fragilidade no
"esquema" de replicação, pois haviam as famosas "regras de resolução de
conflitos" que tinham que tratar diferenças entre registros, já que a
replicação Oracle sempre sobescreve o registro inteiro e não apenas o
atributo alterado, o que NOVAMENTE causava diferenças e problemas.

Sem contar os problemas de paralisação da replicação quando caía link ou
quando acumulava muitos erros ...

A boa notícia é que resolvi todos estes problemas TROCANDO a replicação
Oracle Multi-Master por um produto de terceiros especializado em replicação,
que garante a serialização da informação e não possui a idéia de "resolução
de conflitos" simplesmente porque não há conflitos. Neste produto, a
transação com muitas linhas ao enviar um "commit", o banco inicia a escrita
nas tabelas locais, e isto faz com que a replicação "colete" de cada tabela
replicada, o comando sql nela aplicado, gravando em uma tabela própria que
era descarregada no banco remoto e uma trigger local se encarregava de
executar as linhas na ordem correta.

Desta forma, a replicação fica transparente e independente da aplicação,
como deve ser.

Se quiser mais informações, estou à disposição.


Ederson Elias de Oliveira
DBA Oracle
Setransp - GO
---
-Mensagem original-
De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Marcel
Enviada em: segunda-feira, 25 de julho de 2005 08:48
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Inconsistência em tabelas desnormalizadas: replicação ?

Prezados senhores(as)

Antecipadamente peço desculpas pela extensão da descrição do problema, mas é
na tentativa de ser o mais claro possível.

Estou trabalhando com um sistema legado que possui 3 tabelas de estoque
desnormalizadas, da seguinte forma (as chaves primárias compostas estão
identificadas pela #):
- Tabela ESTOQUE
 # Id,
 # Empresa,
 # DataFabricacao,
 # Valor,
   Qtd

- Tabela SITUACAO_EST
 # Sit_Id,
 # Sit_Empresa,
 # Sit_DataFabricacao,
 # Sit_Valor,
 # Situacao,
   Qtd

- Tabela CLASSE_SIT_EST
 # Cl_Sit_Id,
 # Cl_Sit_Empresa,
 # Cl_Sit_DataFabricacao,
 # Cl_Sit_Valor,
 # Cl_Situacao,
 # Classe,
   Qtd

Um exemplo: podemos ter:

Na tabela ESTOQUE, o seguinte material (uma camisa, cuja Id = CAM01):
 - id = CAM01, empresa = ABC, data = 01/01/2005, valor = 10, qtd = 500

Na tabela SITUACAO_EST, o material acima estaria distribuído assim:
 - CAM01, ABC, 01/01/2005, 10, situacao = DISPONIVEL, 300
 - CAM01, ABC, 01/01/2005, 10, TRANSITO, 200

Na tabela CLASSE_SIT_EST, o material acima estaria distribuído assim:
 - CAM01, ABC, 01/01/2005, 10, DISPONIVEL, classe = 1, 250
 - CAM01, ABC, 01/01/2005, 10, DISPONIVEL, 2, 50
 - CAM01, ABC, 01/01/2005, 10, TRANSITO, 1, 200

Ou seja, o material id = CAM01, empresa = ABC, data = 01/01/2005, valor = 10
tem que somar 500 em cada uma das tabelas.

Quando uma GUIA é emitida, o material sai da situação DISPONIVEL e passa
para TRANSITO. Assim, no exemplo acima, existe uma guia em aberto com 200
camisas.
Ao QUITAR uma guia, a quantidade em TRANSITO é zerada e a quantidade
correspondente

Re: [oracle_br] RES: Inconsistência em tabelas des normalizadas: replicação ?

2005-07-25 Por tôpico Renan da Silveira Medeiros
Eu seiestou de brincadeira...

Renan Medeiros
Coordenador de Suporte/Treinamento/Pré-venda
Unimix Tecnologia Ltda
0 xx 61 9994 0586
0 xx 61 3201 

  - Original Message - 
  From: Ederson 
  To: oracle_br@yahoogrupos.com.br 
  Sent: Monday, July 25, 2005 10:27 AM
  Subject: [oracle_br] RES: Inconsistência em tabelas desnormalizadas: 
replicação ?


  Renan, não há problemas nisto por aqui, mas como pode ver, o Marcel está
  passando por aqueles problemas que não tenho saudades ...





  Ederson Elias de Oliveira

  DBA Oracle

  Setransp - GO

  ---

_  

  De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
  nome de Renan da Silveira Medeiros
  Enviada em: segunda-feira, 25 de julho de 2005 10:22
  Para: oracle_br@yahoogrupos.com.br
  Assunto: Re: [oracle_br] RES: Inconsistência em tabelas desnormalizadas:
  replicação ?



  Fala meu caro Ederson, td bem por ai ?
  E os problemas de replicaçÃO ? risos...
  Um grande abraço.

  Renan Medeiros
  Coordenador de Suporte/Treinamento/Pré-venda
  Unimix Tecnologia Ltda
  0 xx 61 9994 0586
  0 xx 61 3201 

- Original Message - 
From: Ederson 
To: oracle_br@yahoogrupos.com.br 
Sent: Monday, July 25, 2005 10:03 AM
Subject: [oracle_br] RES: Inconsistência em tabelas desnormalizadas:
  replicação ?


Marcel,

Estou há pouco tempo na empresa atual, e quando cheguei, me deparei com um
ambiente com replicação multimaster.

Havia uma série de problemas que aconteciam devido o problema das
  transações
não serem cronologicamente respeitadas. Isto causava perdas de
  informações,
pois poderiam haviam dois updates no mesmo registro que deveria ser
respeitado a cronologia, e o último continha a informação atual. Porém,
devido à não-serialização da transação, como vc bem lembrou, era aplicado
  no
banco remoto, em primeiro lugar, aquela que deveria ser o último valor, e
  em
seguida, a transação mais antiga chegava e sobescrevia o valor, retornando
  a
informação ao valor anterior, ficando assim o(s) banco(s) com informações
diferentes.

Havia tb o problema da transação com muitas linhas, que a replicação
multimaster considera como "uma transação com muitas linhas" e não
  conseguia
fazer a mesma remotamente na mesma ordem, então eram feitas as transações
com "uma ou poucas linhas" primeiro, contudo estas transações com poucas
linhas alteravam registros que já haviam sido alterados pela transação
grande. Novamente, a informação última (atual) era perdida.

Fora os problemas de sincronia, também deparei com uma grande fragilidade
  no
"esquema" de replicação, pois haviam as famosas "regras de resolução de
conflitos" que tinham que tratar diferenças entre registros, já que a
replicação Oracle sempre sobescreve o registro inteiro e não apenas o
atributo alterado, o que NOVAMENTE causava diferenças e problemas.

Sem contar os problemas de paralisação da replicação quando caía link ou
quando acumulava muitos erros ...

A boa notícia é que resolvi todos estes problemas TROCANDO a replicação
Oracle Multi-Master por um produto de terceiros especializado em
  replicação,
que garante a serialização da informação e não possui a idéia de
  "resolução
de conflitos" simplesmente porque não há conflitos. Neste produto, a
transação com muitas linhas ao enviar um "commit", o banco inicia a
  escrita
nas tabelas locais, e isto faz com que a replicação "colete" de cada
  tabela
replicada, o comando sql nela aplicado, gravando em uma tabela própria que
era descarregada no banco remoto e uma trigger local se encarregava de
executar as linhas na ordem correta.

Desta forma, a replicação fica transparente e independente da aplicação,
como deve ser.

Se quiser mais informações, estou à disposição.


Ederson Elias de Oliveira
DBA Oracle
Setransp - GO
---




  [As partes desta mensagem que não continham texto foram removidas]



  __

  Histórico: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
  Falar com os Moderadores:([EMAIL PROTECTED])
  Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar 
  __ 



--
  Links do Yahoo! Grupos

a.. Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/
  
b.. Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
  
c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço 
do Yahoo!. 



[As partes desta mensagem que não continham texto foram removidas]




Re: [oracle_br] RES: Inconsistência em tabelas des normalizadas: replicação ?

2005-07-25 Por tôpico Renan da Silveira Medeiros
Fala meu caro Ederson, td bem por ai ?
E os problemas de replicaçÃO ? risos...
Um grande abraço.

Renan Medeiros
Coordenador de Suporte/Treinamento/Pré-venda
Unimix Tecnologia Ltda
0 xx 61 9994 0586
0 xx 61 3201 

  - Original Message - 
  From: Ederson 
  To: oracle_br@yahoogrupos.com.br 
  Sent: Monday, July 25, 2005 10:03 AM
  Subject: [oracle_br] RES: Inconsistência em tabelas desnormalizadas: 
replicação ?


  Marcel,

  Estou há pouco tempo na empresa atual, e quando cheguei, me deparei com um
  ambiente com replicação multimaster.

  Havia uma série de problemas que aconteciam devido o problema das transações
  não serem cronologicamente respeitadas. Isto causava perdas de informações,
  pois poderiam haviam dois updates no mesmo registro que deveria ser
  respeitado a cronologia, e o último continha a informação atual. Porém,
  devido à não-serialização da transação, como vc bem lembrou, era aplicado no
  banco remoto, em primeiro lugar, aquela que deveria ser o último valor, e em
  seguida, a transação mais antiga chegava e sobescrevia o valor, retornando a
  informação ao valor anterior, ficando assim o(s) banco(s) com informações
  diferentes.

  Havia tb o problema da transação com muitas linhas, que a replicação
  multimaster considera como "uma transação com muitas linhas" e não conseguia
  fazer a mesma remotamente na mesma ordem, então eram feitas as transações
  com "uma ou poucas linhas" primeiro, contudo estas transações com poucas
  linhas alteravam registros que já haviam sido alterados pela transação
  grande. Novamente, a informação última (atual) era perdida.

  Fora os problemas de sincronia, também deparei com uma grande fragilidade no
  "esquema" de replicação, pois haviam as famosas "regras de resolução de
  conflitos" que tinham que tratar diferenças entre registros, já que a
  replicação Oracle sempre sobescreve o registro inteiro e não apenas o
  atributo alterado, o que NOVAMENTE causava diferenças e problemas.

  Sem contar os problemas de paralisação da replicação quando caía link ou
  quando acumulava muitos erros ...

  A boa notícia é que resolvi todos estes problemas TROCANDO a replicação
  Oracle Multi-Master por um produto de terceiros especializado em replicação,
  que garante a serialização da informação e não possui a idéia de "resolução
  de conflitos" simplesmente porque não há conflitos. Neste produto, a
  transação com muitas linhas ao enviar um "commit", o banco inicia a escrita
  nas tabelas locais, e isto faz com que a replicação "colete" de cada tabela
  replicada, o comando sql nela aplicado, gravando em uma tabela própria que
  era descarregada no banco remoto e uma trigger local se encarregava de
  executar as linhas na ordem correta.

  Desta forma, a replicação fica transparente e independente da aplicação,
  como deve ser.

  Se quiser mais informações, estou à disposição.


  Ederson Elias de Oliveira
  DBA Oracle
  Setransp - GO
  ---
  -Mensagem original-
  De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
  nome de Marcel
  Enviada em: segunda-feira, 25 de julho de 2005 08:48
  Para: oracle_br@yahoogrupos.com.br
  Assunto: [oracle_br] Inconsistência em tabelas desnormalizadas: replicação ?

  Prezados senhores(as)

  Antecipadamente peço desculpas pela extensão da descrição do problema, mas é
  na tentativa de ser o mais claro possível.

  Estou trabalhando com um sistema legado que possui 3 tabelas de estoque
  desnormalizadas, da seguinte forma (as chaves primárias compostas estão
  identificadas pela #):
  - Tabela ESTOQUE 
  # Id, 
  # Empresa, 
  # DataFabricacao, 
  # Valor, 
 Qtd
 
  - Tabela SITUACAO_EST
  # Sit_Id, 
  # Sit_Empresa, 
  # Sit_DataFabricacao, 
  # Sit_Valor, 
  # Situacao, 
 Qtd

  - Tabela CLASSE_SIT_EST
  # Cl_Sit_Id, 
  # Cl_Sit_Empresa, 
  # Cl_Sit_DataFabricacao, 
  # Cl_Sit_Valor, 
  # Cl_Situacao, 
  # Classe,
 Qtd

  Um exemplo: podemos ter:

  Na tabela ESTOQUE, o seguinte material (uma camisa, cuja Id = CAM01):
  - id = CAM01, empresa = ABC, data = 01/01/2005, valor = 10, qtd = 500

  Na tabela SITUACAO_EST, o material acima estaria distribuído assim:
  - CAM01, ABC, 01/01/2005, 10, situacao = DISPONIVEL, 300
  - CAM01, ABC, 01/01/2005, 10, TRANSITO, 200

  Na tabela CLASSE_SIT_EST, o material acima estaria distribuído assim:
  - CAM01, ABC, 01/01/2005, 10, DISPONIVEL, classe = 1, 250
  - CAM01, ABC, 01/01/2005, 10, DISPONIVEL, 2, 50
  - CAM01, ABC, 01/01/2005, 10, TRANSITO, 1, 200

  Ou seja, o material id = CAM01, empresa = ABC, data = 01/01/2005, valor = 10
  tem que somar 500 em cada uma das tabelas.

  Quando uma GUIA é emitida, o material sai da situação DISPONIVEL e passa
  para TRANSITO. Assim, no exemplo acima, existe uma guia em aberto com 200
  camisas.
  Ao QUITAR uma guia, a quantidade em TRANSITO é zerada e a quantidade
  correspondente é abatida na tabela ESTOQUE. Ou seja, ao quitar a gui