Estou suspeitando do Dbcommit()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Estou suspeitando do Dbcommit()

Mensagem por lugab »

Ola amigos,

Uso o xharbour e aprendi aqui que fica mais rápido usar o Dbcommit() e Dbunlock(), pq eles só agem sobre o arquivo em uso, então, eu troquei tudo.

Desse dia em diante, notei que alguns arquivos (grandes) deram pra ficar com índices corrompidos, aparentemente do nada, quando isso raramente acontecia no passado, usando o COMMIT.

Li a pouco, aqui no tópico https://pctoledo.org/forum/viewto ... mit#p61959 a seguinte postagem do companheiro ALEXTS
Olá!

Se não me falha a memória, tem alguma chave do registro do Windows que interfere no DbCommit().
Gostaria de saber se estou no caminho certo, em desconfiar do Dbcommit e do Dbunlock, pq já reli todo o código e não vi nada errado...

Os meus DBFs eram NTX e eu mudei p/CDX...

Grato a todos,

Gabriel
lugab
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Estou suspeitando do Dbcommit()

Mensagem por alaminojunior »

Como já citei em outros tópicos, o cache de disco do Windows às vezes pode nos pegar de surpresa.
No uso de TEF discado por exemplo, uma das orientações é desabilitá-lo. Eu desabilito em qualquer caso.
Acredito que o problema não seja no uso do dbcommit(), pois o que ele faz é descarregar os dados da memória para o disco, em seguida os índices são atualizados com base no dbf. Agora, é preciso ter certeza de que os índices estão abertos para receberem estas atualizações.
De repente tem algum índice de fora perdendo-as.
Uma situação que pode ocorrer:

Código: Selecionar todos

use arquivo shared new // abre dbf para uso
set index to indice // abre o índice para uso conjunto com o dbf
// considerando que o mesmo já exista
Se, de repente no meio do enterro você cria outro índice condicional/temporário para atender uma situação diferente:

Código: Selecionar todos

index on nome tag nome01 to nomes // indexa o dbf com base noutra chave
e em seguida não deixar os dois abertos ( o índice principal e mais o segundo ) como em:

Código: Selecionar todos

set index to indice, nomes // abre os dois índices para uso com o dbf
as tabelas de índices ficarão desatualizadas ou seja, vão haver registros no dbf sem correspondente no arquivo de índice.
Verifique esta possibilidade, além de outras como a saúde do disco rígido, rede, etc ...
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Estou suspeitando do Dbcommit()

Mensagem por lugab »

No uso de TEF discado por exemplo, uma das orientações é desabilitá-lo. Eu desabilito em qualquer caso.
E como desabilita esse "cache' no XP, Alamino ?
lugab
jamazevedo
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 29 Dez 2005 16:50
Localização: Manaus - AM

Re: Estou suspeitando do Dbcommit()

Mensagem por jamazevedo »

Ola! Bom dia!

Descobri o comando commit em meados de 1990, até então quando o micro desligava por falta de energia todos os registros que tinham sido incluídos até última abertura do dbf eram perdidos, simplesmente porque os registro ficavam guardados em cache e só eram gravados no arquivo quando o cache enchia ou os dbf's eram fechados.

Depois com a evolução do Clipper apareceu a função dbcommit() que atuava no dbf específico.

Até o momento, utilizando o dbcommit(), não tive problemas com perdas de dados ou atualização de dbf's. Hoje estou trabalho em ambiente Linux, mas tenho sistemas em produção rodando em Windows XP. Ambos sem problemas de liberação do cache para o disco rígido.

Um exemplo simples:

Código: Selecionar todos

clientes->( dbappend() )
clientes->codigo := "000001"
clientes->nome   := "jose airton"
.
.
.
clientes->( dbunlock() )
clientes->( dbcommit() )
______________________________________________________
Usando: Linux Ubuntu 18.04, Harbour 3.2.0dev r1811161533
______________________________________________________
José Airton de Menezes Azevedo
Manaus - AM
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Estou suspeitando do Dbcommit()

Mensagem por alaminojunior »

Um exemplo:
Imagem
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Estou suspeitando do Dbcommit()

Mensagem por rochinha »

Amiguinhos,

Caso suspeitem do uso do COMMIT ou DBCOMMIT use SKIP após destravar o registro.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Estou suspeitando do Dbcommit()

Mensagem por lugab »

Ok, amigos.

Vou trabalhar com o Dbskip(0) em lugar do Dbcommit() e vou desbailitar o cache de disco, para ver se resolve.

Mas. acredito que o sistema deve ficar + lento, depois de desabilitar o cache de disco

Obrigado a todos,

Gabriel
lugab
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: Estou suspeitando do Dbcommit()

Mensagem por Itamar M. Lins Jr. »

Nunca precisei mexer em nada disso. Não aconselho a desabilitar o cache de disco.
Se usa o xHarbour, pode ser um bug do RDD, pois ele é copiado do Harbour e tem vários problemas de compatibilidade, segundo o Przmek.
Verifique se está acontecendo o problema em outros clientes, a rede é Wireless ? etc....

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Estou suspeitando do Dbcommit()

Mensagem por lugab »

Itamar,

A rede é cabeada e minha pequena empresa é a única cliente dos meus programas. Eu desenvolvo eles para usar no pequeno negócio comercial da minha família..

Eu vou procurar algum link aqui no fórum, pra baixar e testar outra RDD (?) pro meu xharbour 1.0.0 SIMPLEX

É apenas o arquivo Dbfcdx.lib , que vc sugere que possa estar bugado e que eu devo substituir, né Itamar ?
lugab
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: Estou suspeitando do Dbcommit()

Mensagem por Itamar M. Lins Jr. »

Leia as correções, do próprio xHarbour do RDD CDX 1.0 para 1.1
Acredito que não pode atualizar somente a lib, deverá fazer updrade para versão mais nova do xHarbour.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder