A alguns meses migramos nossos programas CLIPPER para xHarbour Linux, e estamos usando acesso ao Servidor por SSH... Realmente é "outro mundo" o desempenho do xHarbour no Linux... No entanto, em clientes "maiores" e com maior movimentação de dados, estamos enfrentando problemas de corrupção de índices... Em alguns casos é necessário re-criar os indices 3 vezes ao dia !!
Os problemas são em relação a confiabilidade do índice... ou seja, o programa não é abortado, ou retorna algum erro... Mas os índices ficam "erroneos" ou inoperantes, não encontrando registros que sabidamente estão presentes na base de dados... Após uma re-indexação, tudo volta ao normal... pelo menos a re-indexação é extremamente rápida no xHarour Linux... mas é desgastante "parar" toda a empresa para uma re-indexação
Varri a NET a procura de dicas sobre possíveis problemas e soluções com o RDD CDX no Linux e encontrei algumas dicas que já apliquei sem sucesso... Gostaria ajuda da comunidade xHabrour para a busca da solução desse problema...
Minha rotina de inicialização do RDD está assim:
Código: Selecionar todos
REQUEST DBFCDX // Causes DBFNTX RDD to be linked in
rddSetDefault( "DBFCDX" ) // Set up DBFNTX as default driver
#ifdef __XHARBOUR__
if CP
REQUEST HB_CODEPAGE_PLMAZ // Ajustando a tela
REQUEST HB_CODEPAGE_HR437
hb_settermcp("HR437","PLMAZ",.t.)
endif
set(_SET_EOL,chr(13)+chr(10)) // Ajustando o fim de Linha para DOS/WIN
request hb_lang_pt // Ajustando para Portugues
set(_SET_LANGUAGE,'PT')
// SET DBFLOCKSCHEME TO 1 // Mantem compatibilidade de Travamento com CLIPPER 5.2
#else
FreeTSlice(20) // Apenas CLIPPER. Evita consumo excessivo de CPU
#endif
#IFDEF __PLATFORM__Linux
set(_SET_FILECASE,"LOWER") // Cria arquivos sempre em Minusculas
set(_SET_DIRCASE,"LOWER")
set(_SET_TRIMFILENAME,.t.) // Remove espacos em Branco do Nome de Arq.
set(_SET_DIRSEPARATOR,"/") // Inverte a Barra de diretorios
//umask(2) // Grava sempre arquivos como -rw-rw-r--
umask(6) // Grava sempre arquivos como -rw-rw----
#ENDIF
set exclusive (EXCL)
- Na chamada do programa, estou definindo as váriaveis TMP e TMPDIR, para evitar os erro: (hb_cdxSortWritePage: Can't create temporary file.)
Código: Selecionar todos
#!/bin/bash
export TMPDIR=/tmp/
export TMP=/tmp/
cd /opt/djsystem
./djsystem $1 $2 $3
- As funções abaixo afetam a indexação de arquivos ? (seriam a causa do problema ?)
REQUEST HB_CODEPAGE_PLMAZ // Ajustando a tela
REQUEST HB_CODEPAGE_HR437
hb_settermcp("HR437","PLMAZ",.t.)
- O Unlock vem antes ou depois de dbcommit() ? Estou usando:
dbcommit()
unlock
- É necessário REQUEST DBFFPT ? Atualmente não estou usando... porém meus arquivos DBF/FPT estão sendo encontrados / abertos sem problemas
- Li em alguns tópicos que as funções: set(_SET_FILECASE,"LOWER") e set(_SET_DIRCASE,"LOWER") poderiam causar problemas na criação de índices CDX... Isso é verdade ?
- Como usamos SSH, programamos o Servidor SSH para "matar" as seções que foram derrubadas (Cliente SSH (Putty) encerrado) para evitar que o programa continue rodando no servidor... Isso é feito ajustando o /etc/ssh/sshd_config com:
ClientAliveInterval 15
ClientAliveCountMax 2
O que ocorre com os programas que são "mortos" dessa maneira ? O binário gerado no xHarbour ao receber um KILL, encerra corretamente ? Ou seja, todos os arquivos são fechados e "commitados" na base dados antes do programa finalizar ?
- Estava usando a versão do xHarbour do CVS, e voltei para a versão estável 0.99.60... Notei que houve várias mudanças nos fontes da DBFCDX na versão do CVS... E usando a versão do CVS nosso problema era MAIS GRAVE... em alguns momentos, TODO o arquivo era misteriosamente TRAVADO... e nenhum terminal conseguia incluir / alterar nenhum registro... E isso acontecia com uma frequencia de até 8 vezes ao dia !!!
Alguem teve problemas semelhantes com a versão do CVS ?
Obrigado pela ajuda de todos...


