Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Programación de respaldos automáticos para la base de datos Firebird (https://www.clubdelphi.com/foros/showthread.php?t=71985)

ContraVeneno 22-01-2011 00:25:53

Programación de respaldos automáticos para la base de datos Firebird
 
Que tal.

¿Alguien me podría recomendar alguna herramienta que me ayude a programar respaldos automáticos para bases de datos en Firebird? (2.1 actualmente, próximamente: 2.5)

El primero en mi lista es el FIBS 2.02, parece que es sólido, sencillo y confiable, además, se puede bajar el código fuente y los componentes utilizados (en delphi).

¿Alguien tendrá alguna otra recomendación o comentarios sobre FIBS 2.02?

Gracias

Casimiro Notevi 22-01-2011 01:37:35

Ese es bueno :)
Yo hice uno sencillito hace tiempo y lo subí al ftp, a ver si lo encuentro...

Aquí está. Si quieres el código fuente, me lo dices.

Caral 22-01-2011 02:07:16

Hola
Me gustaria ver el codigo, el programa se ve sencillo de usar.
Tal vez lo puedo adaptar a mi programa.
Saludos

pacopenin 22-01-2011 12:48:29

Hola Casimiro.

A mi también me gustaría poder "curiosear" por los fuentes.

Saludos,

Casimiro Notevi 23-01-2011 00:06:27

Aqui está.
Sed benévolos, está hecho en plan "salir del paso" :)

Caral 23-01-2011 00:28:34

Hola
Gracias amigo.
Saludos

pacopenin 23-01-2011 16:12:45

Muchas gracias.
Grandes soluciones se han hecho "para salir del paso".

Eres muy amable.

Saludos.

Toni 25-01-2011 08:36:36

Muchas gracias por compartir este pequeño GRAN programa.

rastafarey 27-01-2011 00:32:19

Resp
 
Bueno en informatica hay una cosa muy cierta que dice "Lo que esta hecho no se vuelve hacer". Por lo tanto yo usuaria Gbak crearia un .bat y creacia una tarea con el programador de tareas con linux o unix creo que hay una cosa que se llama cron.

ContraVeneno 28-01-2011 18:00:29

muchas gracias por sus comentarios... interesante tu propuesta Casimiro, pero al equipo le gusto más FIBS, así que ese será el que vamos a usar.

Casimiro Notevi 28-01-2011 18:24:12

Es que no sé venderme :D

Cañones 31-01-2011 19:22:22

Gracias, lo voy a estudiar.

Toni 01-02-2011 17:34:54

Hola Casimiro,

He mirado tu programa de realizar backups de firebird y me ha gustado mucho. De hecho lo e instalado en un servidor y lo estoy probando mas afondo. Queria comentarte que cuando consulto el historico de logs me indica que han ocurrido errores en la realizacion del backup, pero sin embargo consulto el ultimo gbak y no veo ningun mensaje de error del gbak. Ademas tambien he probado a realizar los backups directamente con el gbak con las mismas opciones y no me indica ningun error.

Tienes idea a que se puede deber que me indique que hay errores pero no sale nada?

Código SQL [-]
Creando backup: C:\Archivos de programa\GenesisSGA\Backup\GENESIS3R99_20110201000008.gbk

¡¡¡Han ocurrido errores durante el backup!!!
Backup realizado en: C:\Archivos de programa\GenesisSGA\Backup\GENESIS3R99_20110201000008.gbk
Verifique los ficheros, pueden estar dañados

El programa me hace exactamente lo que yo me queria hacer y ademas esta muy bonito. Pero me gustaria poder resolver esta duda para quedarme tranquilo con las copias de seguridad.

Muchas gracias.

Casimiro Notevi 01-02-2011 17:41:25

Hola, me alegra que te guste y que te sea útil.
Lo del mensaje en el ".log", pues la verdad es que es algo que no he mirado muy a fondo, ¿has comprobado que el gbak está hecho?. Si es así, entonces no habrá que hacerle mucho caso, o mejor borra el log, por si acaso han sido pruebas que has hecho antes.
Avísame con lo que sea y si acaso busco un rato para echarle un vistazo.

Toni 01-02-2011 18:07:33

De todas las ultimas copias que ha realizado en el log indica lo del error. La copia si que esta y la he restaurado y tampoco no ha dado ningun mensaje de error de ningun tipo y ha creado el archivo nuevo. Mas que nada que como se trata de copias de seguridad quiero asegurarme de que todo va bien. Ademas como el programa te puede avisar si hay problemas pues seria interesante poder utilizar esta opcion.

Casimiro Notevi 01-02-2011 18:17:01

Entonces será que el mensaje se envía aunque lo haya hecho mal o bien. A ver si le echo un vistazo.

Toni 02-02-2011 16:14:07

Me da la impresión que ya se porque puede ser, creo que lo debe de hacer tu programa para saber si hay un error es mirar si existe el literal 'error' en todo el texto que devuelve el gbak. Y resulta que yo tengo definidas en esta base de datos excepciones que empiezan con el literal 'Error...'

Casimiro Notevi 02-02-2011 17:55:43

Entonces qué hacemos, ¿modificas tú o modifico yo? :D

Toni 02-02-2011 18:58:54

Casimiro, esto es una deduccion que he sacado yo. Pero ni siquiera he visto los fuentes. Y mucho menos se si es eso seguro. Y el problema es que yo no tengo Delphi trabajo con el C++ Builder y no creo que me permita abrir un proyecto completo de Delphi, unidades sueltas si.

Casimiro Notevi 02-02-2011 19:17:16

Es que sí hace eso, busca la palabra "error" en el resultado.

Toni 03-02-2011 19:42:50

Bueno por el momento ya me quedo mas tranquilo porque no hay errores en el respaldo. El problema sera si algun dia los hay que no me enterare. Seria facil solventarlo haciendo que busque la palabra 'error' pero con un espacio 'error ' asi no lo confundiria con ningun objeto de la base de datos.

Casimiro Notevi 03-02-2011 20:14:47

Bueno, creo que firebird siempre ponía dos puntos después de la palabra error, o sea: 'ERROR:'.
Lo he modificado de esa manera, aquí lo tienes, pruébalo.

p.d.: Testea antes con algún antivirus, que está compilado en una vieja máquina virtual sin antivirus.

Toni 22-02-2011 09:20:34

Hola Casimiro,

Por fin lo he podido probar, funciona perfectamente. Ahoro ya no da el mensaje de error al realizar el backup. Muchas gracias Casimiro.

Casimiro Notevi 22-02-2011 11:12:16

A disfrutarlo :)

Cañones 08-04-2011 16:11:59

Cita:

Empezado por Casimiro Notevi (Mensaje 389701)
Entonces qué hacemos, ¿modificas tú o modifico yo? :D

Si entre los interesados lo empezamos a actualizar.
Si podés pasarme los fuentes, estoy interesado en la aplicación y quiero agregarle una función que cuando termine de hacer el backup lo suba a un servidor FTP para tener otra copia de los backup.
Saludos.

Casimiro Notevi 08-04-2011 16:14:55

Amigo Cañones, si lees los posts de arriba verás que ya lo modifiqué... y si sigues leyendo desde el principio verás que también hay un enlace para descargas los fuentes :)
Así, que ya sabes, cuando lo modifiques acuérdate de ponerlo aquí con los cambios que has hecho para quien quiera usarlo. Gracias :)

Cañones 08-04-2011 20:17:04

Casimiro, olvide mencionar que el enlace a la descarga del codigo fuente, ya no funciona, por eso lo volvia a solicitar.
La cita del mensaje de quien lo modificaba, no era por ese caso puntual, si no que me referia a empezar a actualizarlo entre todos.

Casimiro Notevi 08-04-2011 21:03:51

Gracias por el aviso, ya está solucionado, estuve ordenando las cosas y olvidé actualizar los enlaces. Aquí está.

Cañones 09-04-2011 00:05:16

Muchas gracias.
Cuando termine las modificaciones lo vuelvo a subir.
No se cuanto me llevará porque estoy con mucho trabajo.
Saludos.

Casimiro Notevi 09-04-2011 01:25:32

No hay prisa, lo importante es el resultado :)

waly2k1 20-04-2011 20:03:34

Respaldo
 
Hola yo utilizo el gbak.exe q viene en Firebird:
Les paso un ejemplo:

Código:

sPassword := Data.IBConx.Password;
sFileDBF  := Data.GetShortName( Data.IBConx.Database );
sFileBAK  := sBAKPath + '\BAK' + FormatDateTime('yymmddHHmmss', Now) + '.fbk';
sParamet := ' -b -t -user sysdba -password ' + sPassword + ' ';

sFileEXE := sFIREPath + '\gbak.exe';
sFileEXE := Data.GetShortName( sFileEXE );
// sFIREPath es la carpeta bin de firebird q parametrizo porque nose donde lo instalan

Data.EjecutarExe( sFileEXE, sParamet + sFileDBF + ' ' + sFileBAK, true, false );

Y copio por las dudas la rutina EjecutarExe que tambien la encontré por ahí:

Código:

procedure TData.EjecutarExe( const ruta, args: string; bWait: boolean; bShow:boolean );
var
    salida: DWord;
    PSEI: PShellExecuteInfo;
    SEI: TShellExecuteInfo;
    iShow:integer;
begin
    iShow := SW_HIDE;
    if bShow then iShow := SW_NORMAL;

    if not FileExists( ruta ) then exit;
    with SEI do
    begin
        hInstApp := 0;
        lpVerb := nil;
        lpDirectory := nil;
        nShow := iShow;
        cbSize := SizeOf(SEI);
        lpFile := PChar(ruta);
        wnd := GetDesktopWindow;
        lpParameters := PChar(args + #0);
        fMask := SEE_MASK_NOCLOSEPROCESS;
    end;
    PSEI := @SEI;
    ShellExecuteEx( PSEI );
    if not bWait then exit;
    repeat
        salida := WaitforSingleObject( SEI.hProcess, 500 );
        Application.ProcessMessages;
    until ( salida <> WAIT_TIMEOUT );
end;

Nota: Ojo con los paths largos....

Y una vez al dia se copia la BD completa, este respaldo lo hago cada hora +/- donde tengo información critica y hasta ahora no tuve problemas. Inclusive zipeo el bak si es muy grande con el componente ZipMaster que es free.
Bueno nada de otro mundo, pero por ahí les sirve de algo. Saludos!
Walter

JXJ 11-05-2011 02:21:58

hola

waly2k1

// sFIREPath es la carpeta bin de firebird q parametrizo porque nose donde lo instalan


sFIREPath como obtienes ese parametro.

sFIREPath := ???(directorio de firebird)como lo obtienes?


otra cosa

como programas tu aplicacion para que se ejecute cada hora?

usas un timer?

o un timer con alguna rutina mas fina

lo dijo por que en ocaciones se pone lenta la pc y
no se de otra forma mas elegante que poner un timer y cada segundo
estar checando si ya es la hora minuto o segundo..

yo voy a hacer una aplicacion que me haga un respaldo de la base
de datos.
enuna hora en especifico.
digamos 8:30 pm
y a esa hora inicie.

no quiero poner un timer cada segundo reivsando si ya son las 8:30 pm
y detenerlo cuando empieze el respaldo y activarlo al terminar el respaldo.

gracias..

waly2k1 11-05-2011 21:17:53

Rta...
 
Hola!
La variable sFIREPath la cargo en un parametro en una tabla de configuraciones, o la puedes poner en un .ini o como mas te guste nose

Código:

sFIREPath := Data.ReadRegString( HKEY_LOCAL_MACHINE, '\Software\Microsoft\Windows\CurrentVersion\', 'ProgramFilesDir' ) + '\Firebird\Firebird_2_1\bin';
Ahí tienes por ej. de Firebird 2.1
Esa funcion lee del registro la key de firebird, hay varias por acá en el foro y nose si la misma la saqué de por acá también (cosa que no dudo hehe) y le agregué nada mas la key de Firebird

El timer lo pongo cada 30 segundos y voy incrementando un contador cuando sea la hora, lo vuelvo a 0 y ejecuto el backup. Lo pongo en 30 porque uso un reloj en la barra y se actualiza cada 30 seg.

El valor maximo del timer si no me equivoco es de 60000. De ahi vas contando la cantidad de veces que ingresa a la rutina timer_timer. O en tu caso que pregunte la hora nada mas y si está dentro de las 08-09 que se ejecute y guardas un flag de ejecutado, asi no lo hace nuevamente, cuando sale de tu rango de horas lo pones en falso el flag.

Hoy por hoy con la tecnología que tenemos no se nos puede achanchar una aplicación por un timer, sí por lo que se ejecute cada cierto tiempo si no fuera necesario o si es posible evitarse.

En fin, espero haberte sido util, y me avisas cualquier problema.
Saludos y éxitos!
Walter

JXJ 13-05-2011 20:23:16

una cosa mas.

Código Delphi [-]
Data.ReadRegString
o 
procedure TData.EjecutarExe( const ruta, args: string; bWait: boolean; bShow:boolean );
var

Data y Tdata es una clase. no un record.
¿verdad?

sFIREPath := Data.ReadRegString( HKEY_LOCAL_MACHINE,
gracias Walter.

JXJ 14-05-2011 19:13:56

bueno ya voy avanzando algo.


una duda relacionada a esto.

¿se puede mostrar un progressbar
que muestre el avanze del backup
que esta haciendo gbak?

noten que no he revisado los codigos de casimiro ni el fibs.
no se si ellos lo hayan implementado el progressbar.

ando viendo eso

gracias.

Casimiro Notevi 14-05-2011 20:43:12

En principio, creo que no se puede porque gbak no devuelve ninguna información con el porcentaje de trabajo hecho.

waly2k1 15-05-2011 20:04:28

Rta...
 
Nooo, Data es un Datamodule
lo que sucede es que como uso un Datamodule en todos los proyectos, uso
variables y funciones publicas ahí de acceso global.
No hay forma de saber el % realizado, lo que puedes hacer es mostrar una
barra de progreso de esas que llegan al final y comienzan otra vez, con el
unico fin de que se vea que "hace algo" y no está colgada la aplicación.
Además si tu BD no es muuuy grande esto lo hace muy rapido y no hace
falta mostrar el estado actual o entretener mucho.
Saludos!

Cañones 05-06-2011 16:05:52

Casimiro, la verdad que el código es muy avanzado para mi.
Antes de empezar con el FTP, quería solucionar un problema que detecté; Cuando tengo mas de un backup por hacer en la grilla, solo me hace el ultimo de la grilla y los demás no los hace.
Esto te sucede a vos también?
Voy a seguir estudiando el código para ver que puedo hacer.
Gracias y saludos.

Casimiro Notevi 05-06-2011 16:52:40

A mí me funciona bien, está instalado en algunos clientes y no me han comentado nada al respecto, así que supongo que les va bien.

ronimaxh 30-01-2017 02:34:46

Ayuda con la herramienta de backup
 
Hola amigos del club, estaba buscando como hacer backup automáticos en firebird 2.5 me encontré este foro, lo he probado y me da el siguiente error cuando realizo el backup y luego intento comprimir el archivo zip. abrí el archivo log me dice el siguiente error:

Código Delphi [-]

Creando backup: C:\DbTemporal\SIGNEDB_20170129160809.gbk
Comprimiendo backup a formato zip
Failed to load DelZip179.dll
Failed to load DelZip179.dll
Backup realizado en: 
[---------------]


La franja horaria es GMT +2. Ahora son las 20:41:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi