S.o.s daño de bases de datos por pico de luz

Buenos días, necesito ayuda de como se pueden proteger las bases de datos (.dbf) cuando están abiertos, por picos de luz; sacando el mensaje de error "not a table ". Se tiene estabilizador pero no es suficiente.
Agradezco sus comentarios.
Cordialmente,
sofia2

1 respuesta

Respuesta
1
El perjuicio por los cortes y picos de luz, en una BD, esa lo más normal del mundo, cada interrupción brusca daña la cabecera de los archivos DBF, sin embargo un etabilizador no es suficiente, puedes hacer 2 cosas :
Un mantenimiento preventivo, y un correctivo
Para el mantenimiento preventivo lo que tienes ue hacer es adquirir una unidada UPS, en mi país cuestan alrededor de US 60, este dispositivo eléctrico, te protegerá con unos minutosa adicionale de energía esto te dará segurridad ffente a los apagones.
Si aún con esto no es suficiente y la distribución eléctrica de tu localidad tiene esa naturaleza, ni modo ya debes de empezar a considerar la posibilidad de pasar tus datos a SQL Server, que maneja los archivos de una manera más segura.
Para el mantenimiento correctivo, puedes utilizar un código de reparar tablas, (sI no lotienes me avisasa para pegartelo en este foro)
Gracias, por tu respuesta, respecto a pasar los datos a SQL Server no sabría como empezar ya que es un aplicativo bastante grande hecho en foxprow 2.5b.
**Me interesa lo del mantenimiento correctivo para reparar tablas, te agradezco si me lo puedes suministrar.
Gracias,
SOFIA
Lo que puedes hacer es pegar este código, en un archivo PRG, coloca primero el SET DEFAULT, en el directorio donde guardas tus tablas o BD
no olvides hacer primero un Back Up de los mismos:
*************inicio del programa*****
***********************************
set talk off
dimension l1dbfs(1)
=adir(l1dbfs,'.\*.dbf')
l1err=.f.
clear
? 'Verificando tablas '
?
if alen(l1dbfs)<>1
for l1dbf=1 to alen(l1dbfs)/5
l1file=l1dbfs(l1dbf,1)
? right(' '+l1file,12)+' ['
store fopen(l1file,2) to l1mess
store fseek(l1mess, 0, 2) to l1ndx_sz
=fseek(l1mess,0)
l1str=fread(l1mess,4)
l1ass=readx(4)
l1head=readx(2)
l1rec=readx(2)
l1actual=(l1ndx_sz-(l1head+1))/l1rec
l1actual=iif(l1ndx_sz=l1head,0,l1actual)
if l1actual<>l1ass
l1err=.t.
?? 'X]'
=fseek(l1mess,0)
l1str=fread(l1mess,4)
l1replace=right('00000000'+hex(l1actual),8)
l1tmp=''
for l1loop=1 to 4
l1tmp=chr(dec(substr(l1replace,l1loop*2-1,2)))+l1tmp
endfor
=fwrite(l1mess,l1tmp)
else
?? chr(251)+']'
endif
= fclose(l1mess)
endfor
endif
?
? iif(l1err,'Errores Encontrados! Haga reindex a las tablas que aparecen marcadas con x','Todo esta ok')
return
Function Readx
parameter l1len
l1str=fread(l1mess,l1len)
l1tmp=''
for l1loop=1 to l1len
l1tmp=right('00'+hex(asc(substr(l1str,l1loop,1))),2)+l1tmp
endfor
l1value=dec(l1tmp)
return l1value
Function Hex
parameters l1int
private l1loop,l1hex,l1str
l1str='0123456789ABCDEF'
l1hex=''
for l1loop=7 to 0 step -1
l1part=int(l1int/(16^l1loop))
l1hex=l1hex+substr(l1str,l1part+1,1)
l1int=l1int-l1part*(16^l1loop)
endfor
do while left(l1hex,1)='0'.and.len(l1hex)>1
l1hex=substr(l1hex,2)
enddo
return l1hex
Function Dec
parameters l1hex
private l1loop,l1int,l1str,l1ctr
l1str='0123456789ABCDEF'
l1int=0
for l1loop=len(l1hex)-1 to 0 step -1
l1int=l1int+(16^l1loop)*(at(substr(l1hex,len(l1hex)-l1loop,1),l1str)-1)
endfor
return l1int
*****************************************fin del **prkgrama***************************
No olvides reindexar con elk comando REINDEX, para aquellas tablas que parezcan como falladas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas