Página 1 de 2
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 13 Fev 2017 12:35
por fladimir
Olá pessoal,
Tenho alguns sistemas q são DBFs/CDX e trabalho com o ACBr
Sempre tenho alguns problemas, q aparentam ser estranhos e pelo tipo de conversa, já pergunto para meu técnico... vc conferiu se o CACHE do HD esta desativado? Ai ele confere e responde q estava ATIVADO, ai após desativar para os problemas...
Isto pq o Cache do Windows atrapalha fazermos a leitura tipo IF File(...), deletar o arquivo, gravar... etc pq o CACHE meio q prende o arquivo e da um monte de problema.
Apesar do meu pessoal ser orientado a conferir, na correria do dia a dia, em clientes q estavam ok, mas ai trocou de HD ou formatou o micro ou micro novo etc, acabam esquecendo... gerando reclamação no cliente, perca de tempo da equipe técnica etc etc.
Pensei em uma forma de desativarmos o CACHE do HD via programação/sistema.
Pesquisando/fazendo testes em meu micro, ATIVANDO e DESATIVANDO o cache pude perceber q a chave q é alterada varia de HD pra HD dentro do registro do Windows e tb se o for 64 x 32.
Então antes de continuar a empreita gostaria de saber se alguém sabe alguma forma de resolver isto ou já tenha resolvido.
Caso não o q penso em fazer é:
- Via chamadas do programa q manipula o registro exportar o mesmo para um arquivo;
- Varrer o arquivo jogando num array as chaves q forem relativas ao CACHE do HD;
- Fazer testes desativando e sobrescrevendo as chaves para ver se resolve.
Bom é isso ai, continuo na batalha... abraço.
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 13 Fev 2017 13:45
por JoséQuintas
O Harbour tem isso pronto.
win_OsNetRegOk()
Código: Selecionar todos
FUNCTION PCFGWIN()
// Politica de controle de conta de usuario para drives mapeados (UAC) que bloqueia acesso a pastas mapeadas
// Ao que parece, ate mesmo o administrador vira usuario comum para isso
// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]"EnableLinkedConnections"=dword:00000001
IF win_OsNetRegOk()
MsgExclamation( "Windows já configurado" )
ELSE
IF MsgYesNo( "Windows não configurado corretamente para o JPA." + hb_eol() + "Configura agora?" + hb_eol() + ;
"Obs. Conforme versão do Windows, Só vai ser possivel configurar se JPA executado como administrador" )
IF win_OsNetRegOk( .T., .T. )
IF ! MsgYesNo( "Configuração necessária aplicada. Continua?" )
QUIT
ENDIF
ELSE
MsgStop( "Não foi possivel aplicar configuração." )
ENDIF
ENDIF
ENDIF
RETURN NIL
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 13 Fev 2017 14:16
por fladimir
Mas isso é pro CACHE do HD?
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 13 Fev 2017 14:56
por JoséQuintas
É pra rede.
Esse que mencionou aqui nem aparece, nem mesmo pro SSD.
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 13 Fev 2017 16:28
por fladimir
SSD não usa, mas pra SATA normal q é a grande maioria dos HDs Desktop tem essa opção q vem por defaul ATIVADA
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 14 Fev 2017 12:23
por Itamar M. Lins Jr.
Ola!
Uso DBF, nunca me preocupei com isso.
Só uso o tal "WIN_OSNETREGOK(.T.,.T.)" que vem no harbour.
DBF não tem esse problema do CACHE ai que vc informa, que eu saiba. Desativar o cache do HD deixa o sistema extremamente lento.
Isso é um problema do WINDOWS(opportunistic locking) , no Linux não tem esse problema, não precisa disso.
http://www.superbase.com/service_tech_s ... locks.html Boa leitura em inglês.
https://support.microsoft.com/en-us/hel ... windows-nt
Saudações,
Itamar M. Lins Jr.
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 14 Fev 2017 15:33
por fladimir
Obrigado pela explicação, vou testar, agora uma duvida se eu habilitar essa sugestão com o CACHE do HD desativado tem algum problema?
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 14 Fev 2017 17:49
por Jairo Maia
Olá Pessoal,
Mas ao usar essa função, o usuário atual passa a ter privilégios de administrador. E se o cliente não quiser isso pode dar problema.
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 14 Fev 2017 20:37
por JoséQuintas
Pra executar essa função e fazer alterações, precisa privilégios.
Depois de alterado, normal.
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 15 Fev 2017 09:30
por lugab
Bom dia,
Fiquei confuso. Concluí três coisas com esse tópico:
1) Com a "diretiva de gravação em cache" habilitada, o comando DbAppend() não grava os dados no HD e sim num cachê
2) A função Win_OsNetRegOk(.T.,.T.) não trata exatamente essa questão e não se sabe ao certo o que ela faz
3) Considerando que se acessa DBFs num servidor mapeado a partir de uma estação, na prática, a função
Win_OsNetRegOk(.T.,.T.) não fará efeito nenhum na rede, seja qual for o objetivo dessa função
Concluí correto, pesssoal ??
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 15 Fev 2017 10:11
por Jairo Maia
Pois é...
Mas um teste que pode ser feito é o seguinte:
1-Num computador que não tenha ainda sido rodado a Win_OsNetRegOk(.T.,.T.), saia para o prompt de comando;
2-Tente alterar a data e também a hora, você será barrado;
3-Rode a Win_OsNetRegOk(.T.,.T.);
4-Altere data e hora pelo prompt que fica liberado.
PS: Nos testes que fiz, ela apenas alterou sem pedir nada ou dar algum aviso.
O motivo de eu não ter adotado isso para permitir atualizar a data e hora via aplicativo foi essa questão, pois ela atribui privilégios de administrador, então preferi não usar. Mas como você disse, talvez falte mais informação, ou uma forma de após atualizar data e hora voltar o Windows no estado anterior.
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 15 Fev 2017 10:32
por JoséQuintas
É simples, só olhar o fonte pra ver o que a função faz.
https://github.com/vszakats/harbour-cor ... win_os.prg
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 15 Fev 2017 10:35
por Itamar M. Lins Jr.
Ola!
E se o cliente não quiser isso pode dar problema.
Basta rodar uma vez só.
...e não se sabe ao certo o que ela faz
Se sabe sim. É só ler as explicações e olhar o fonte da tal função.
...num servidor mapeado...
Isso foi e é a principal causa do clipper/dbf ser exorcizado por gerentes de redes, mas temos o NETIO, LETODB, ADS e outros para resolver esse problema. Mapeamento = problemas, em qualquer OS. Imagine um DBF de 60Gb para lá e para cá na rede wifi ou cabeada é problema na certa. Melhor usar TS(terminal service/putty etc...)
A função é essa ai em baixo, evita de editar o registro do windows na unha.
O que eu entendo dessa função é não deixar o windows controlar o travamento/compartilhamento dos arquivos, deixa isso por conta do RDD(clipper/Harbour/Fox...) fazer o controle de acesso(flock,rlock...) porque se o windows trava/libera um DBF o nosso sistema não vai saber, uma vez que o RDD não comunica com os processos do windows, não sabe. Por isso os problemas.
Código: Selecionar todos
´/*
* Windows OS - safe LAN networking
*
* Copyright 2004 Peter Rees <peter@rees.co.nz> Rees Software and Systems Ltd
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING.txt. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site https://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/* Function to check and set Windows Registry settings
* for safe networking - for all versions of Windows.
*
* Also includes check for buggy VREDIR.VXD under Win95
* and if the correct patch file is found.
*/
#include "directry.ch"
#include "hbwin.ch"
/* NOTE: To change any of these registry settings
Administrator rights are required by default in Windows. [vszakats] */
FUNCTION win_osNetRegOk( lSetIt, lDoVista )
LOCAL bRetVal := .T.
LOCAL cKeySrv
LOCAL cKeyWks
hb_default( @lSetIt, .F. )
IF ! hb_defaultValue( lDoVista, .T. ) .AND. hb_osIsWinVista()
/* do nothing */
ELSEIF hb_osIsWin9x()
bRetVal := win_regQuery( WIN_HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\VxD\VREDIR", "DiscardCacheOnOpen", 1, lSetIt )
ELSE
cKeySrv := "System\CurrentControlSet\Services\LanmanServer\Parameters"
IF lSetIt
lSetIt := ! hb_osIsWinNT() .OR. wapi_IsUserAnAdmin()
ENDIF
IF hb_osIsWin7()
/* https://groups.google.com/forum/#!msg/harbour-users/RyjXKmlQqWw/QOYwIPS5BQAJ */
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "DisableLeasing", 1, lSetIt )
ELSE
cKeyWks := "System\CurrentControlSet\Services\LanmanWorkStation\Parameters"
/* Server settings */
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "CachedOpenLimit", 0, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLocks", 0, lSetIt ) /* Q124916 */
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLockForceClose", 1, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationDelay", 0, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationRetries", 0, lSetIt )
IF hb_osIsWinVista()
/* If SMB2 is enabled turning off oplocks does not work, so SMB2 is required to be turned off on Server. */
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SMB2", 0, lSetIt )
ENDIF
/* Workstation settings */
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UseOpportunisticLocking", 0, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLocks", 0, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLockForceClose", 1, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UtilizeNtCaching", 0, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UseLockReadUnlock", 0, lSetIt )
IF hb_osIsWinVista()
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "FileInfoCacheLifetime", 0, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "FileNotFoundCacheLifetime", 0, lSetIt )
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "DirectoryCacheLifetime", 0, lSetIt )
ENDIF
IF hb_osIsWin2K()
bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\MRXSmb\Parameters", "OpLocksDisabled", 1, lSetIt )
ENDIF
ENDIF
ENDIF
RETURN bRetVal
FUNCTION win_osNetVRedirOk( /* @ */ nResult )
LOCAL aFiles
LOCAL nSize
LOCAL cTime
nResult := 0
/* Check for faulty files */
IF hb_osIsWin9x() .AND. ;
Len( aFiles := hb_vfDirectory( hb_GetEnv( "WINDIR", "C:\WINDOWS" ) + "\SYSTEM\VREDIR.VXD" ) ) >= 1
nSize := aFiles[ 1 ][ F_SIZE ]
cTime := aFiles[ 1 ][ F_TIME ]
DO CASE
CASE nSize == 156749 .AND. cTime == "11:11:10"
nResult := 1111
CASE nSize == 140343 .AND. cTime == "09:50:00"
nResult := 950
ENDCASE
ENDIF
RETURN nResult == 0
Saudações,
Itamar M. Lins Jr.
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 11 Mar 2017 19:30
por Marcio_Carneiro
Estou me deparando com isto em um único cliente.
O seu HD é SSD.
Seus arquivos principais tem o tamanho de 47 a 50 mb.
Sempre achei estranho pois se copiava um arquivo.dbf para outra pasta e abria via dbu, ás vezes não deixava executar uma função, mesmo abrindo somente no dbu, sem compartilhamento na rede,
ele acusava que o arquivo está lockado, isto é, não permitia acesso. Sempre achei estranho.
Será que se eu passar esse utilitário melhorar a perfomance?
O que os amigos recomendam?
Outra coisa estranha é que neste cliente ficam criando múltiplos arquivos, com nomes de sequencia de letras como: BGDAAOCI, BECOCIEL.
Qual seria a causa da criação destes arquivos?
Harbour, dbf com ntx, utilizando mapeamento para acessar os dados
Problemas com CACHE Windows x Arquivos/DBFs
Enviado: 11 Mar 2017 20:07
por JoséQuintas
Só lembro desse tipo de arquivo em clipper.
Tem certeza de que trocou todos os programas em Clipper?