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)
-   -   Button Backup y Restore Firebird (https://www.clubdelphi.com/foros/showthread.php?t=95896)

pgranados 28-09-2022 01:42:52

Button Backup y Restore Firebird
 
Buen día compañeros, tengo la siguiente consulta.

Necesito crear en mi formulario un botón llamado "Generar Respaldo" y "Regresar Respaldo" y que hagan dicha función con mi base de datos (En este caso: TEST.FDB), mi base de datos está hecha en Firebird 3.0

¿Alguien sabe cómo lo puedo implementar en Delphi?

He leído varios foros, incluso artículos de este mismo pero cada uno el código que utilizan es muy diferente.

Saludos y muchas gracias por su apoyo.

Neftali [Germán.Estévez] 28-09-2022 08:28:26

Puedes realizar el BACKUP y el RESTORE utilizando la utilidad que trae FB y llamándola desde la línea de commandos.
La utilidad es GBAK.

El commando de backup será algo similar a eso:
Cita:

GBAK -backup -user NombreUsuario -password Contraseña \\SERVIDOR-PC\C:\CARPETA\MiBaseDatos.FDB C:\CARPETA\MiBackup.FBK
Y el commando de RESTORE algo parecido a esto:
Cita:

GBAK -c -v -user NombreUsuario -password Contraseña D:\CARPETA\CONTA.FBK D:\CARPETA\CONTA2.FDB
Para llamar a esos commandos desde un programa delphi puedes usar ShellExecute (si buscas ejempos de cómo utilizarlo encontrarás muchos).

Revisa los link que hay al final de esta página o estos otros, aunque si buscas en los foros encontrarás más:
https://www.clubdelphi.com/foros/showthread.php?t=57566
http://www.clubdelphi.com/foros/showthread.php?t=79416
https://www.clubdelphi.com/foros/showthread.php?t=28506

pgranados 28-09-2022 18:23:53

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 548512)
Puedes realizar el BACKUP y el RESTORE utilizando la utilidad que trae FB y llamándola desde la línea de commandos.
La utilidad es GBAK.

El commando de backup será algo similar a eso:


Y el commando de RESTORE algo parecido a esto:


Para llamar a esos commandos desde un programa delphi puedes usar ShellExecute (si buscas ejempos de cómo utilizarlo encontrarás muchos).

Revisa los link que hay al final de esta página o estos otros, aunque si buscas en los foros encontrarás más:
https://www.clubdelphi.com/foros/showthread.php?t=57566
http://www.clubdelphi.com/foros/showthread.php?t=79416
https://www.clubdelphi.com/foros/showthread.php?t=28506


Gracias por el aporte, solamente me queda una duda, ¿la función gbak se ejecuta en ISQL? Lo ejecuto de la siguiente maneja y arroja error

Código:

SQL> gbak -v -t -user SYSDBA -password "masterkey" C:\Users\Paul\Desktop\PROYECTO\TEST.FDB C:\Users\Paul\Desktop\PROYECTO\TEST.FBK;

Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 1, column 1

Saludos :D

duilioisola 28-09-2022 18:46:14

GBAK es un programa Win32 o Win64, dependiendeo de la instalación que hayas hecho.
Suele estar en C:\Program Files\Firebird\Firebird_2_5\bin (Version Firebird 2.5 Win32).
Para Firebird 3.0 supongo que será C:\Program Files\Firebird\Firebird_3_0\bin
Para Firebird 4.0 es C:\Program Files\Firebird\Firebird_4_0\

Por lo tanto la sentencia completa sería
Código:

C:>"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -v -t -user SYSDBA -password masterkey "C:\Users\Paul\Desktop\PROYECTO\TEST.FDB" "C:\Users\Paul\Desktop\PROYECTO\TEST.FBK"

pgranados 28-09-2022 19:39:50

Cita:

Empezado por duilioisola (Mensaje 548533)
GBAK es un programa Win32 o Win64, dependiendeo de la instalación que hayas hecho.
Suele estar en C:\Program Files\Firebird\Firebird_2_5\bin (Version Firebird 2.5 Win32).
Para Firebird 3.0 supongo que será C:\Program Files\Firebird\Firebird_3_0\bin
Para Firebird 4.0 es C:\Program Files\Firebird\Firebird_4_0\

Por lo tanto la sentencia completa sería
Código:

C:>"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -v -t -user SYSDBA -password masterkey "C:\Users\Paul\Desktop\PROYECTO\TEST.FDB" "C:\Users\Paul\Desktop\PROYECTO\TEST.FBK"

Gracias amigo, ya pude realizar el backup de mi base de datos y también ya pude convertir el FBK en FDB. Ahora con este paso avanzado espero implementarlo en mi programa. ¿Hay algún post donde alguien lo haya implementado? Saludos !

ecfisa 28-09-2022 20:38:31

Hola.

Cita:

Empezado por pgranados (Mensaje 548534)
Gracias amigo, ya pude realizar el backup de mi base de datos y también ya pude convertir el FBK en FDB. Ahora con este paso avanzado espero implementarlo en mi programa. ¿Hay algún post donde alguien lo haya implementado? Saludos !

Revisa si te sirve este enlace: Usar el Gbak desde mi aplicacion

Saludos :)

duilioisola 29-09-2022 09:04:20

Yo lo que agregaría a todo esto es la verificación de que todo haya salido bien.
  1. Borras el fichero resultado_backup.log si existe.
  2. Haces backup con la opción "-y resultado_backup.log" y SIN la opcion "-v"
  3. Verificas que el fichero resultado.log está vacío. Esto quiere decir que ha terminado con exito. De lo contrario muestras lo que contenga, que es el mensaje de error.
  4. Borras el fichero resultado_restore.log si existe.
  5. Haces restore con la opción "-y resultado_restore.log" y SIN la opcion "-v"
  6. Verificas que el fichero resultado.log está vacío. Esto quiere decir que ha terminado con exito. De lo contrario muestras lo que contenga, que es el mensaje de error.

Notas:
1.
Es importante borrar el fichero .log ya que el comando fallará si ya existe.
Para evitar posibles errores suelo nombrar el fichero como "resultado_backup_[FECHA_HORA_SIN_SEPARADORES].log" (resultado_backup_20220929_090332.log)

2.
Si utilizas la opción "-y", debes verificar que termine que una línea que pone "gbak:finishing, closing, and going home". De lo contrario hubo error.

3.
Ten en cuenta que el hacer un backup no garantiza que puedas hacer un restore.
Por esto, siempre hago los dos pasos y verifico que no haya errores.

duilioisola 29-09-2022 09:14:16

Otro punto a tener en cuenta durante el restore es no sobreescribir la base de datos original.
El problema es que si falla el restore y estamos sobreescribiendo la base de datos perderemos todo.

Por esto suelo seguir estos pasos:
  1. Restore a una base nombrada "base_de_datos.RES".
  2. Verifico que el restore termine si errores (restore.log vacío).
  3. Si es correcta, desconecto de la base de datos.
  4. Renombro la base de datos a "base_de_datos_[FECHA_HORA].BAK"
  5. Renombro restore a "base_de_datos.FDB"
  6. Reconecto a la base de datos.

pgranados 29-09-2022 16:02:39

Cita:

Empezado por duilioisola (Mensaje 548537)
Otro punto a tener en cuenta durante el restore es no sobreescribir la base de datos original.
El problema es que si falla el restore y estamos sobreescribiendo la base de datos perderemos todo.

Por esto suelo seguir estos pasos:
  1. Restore a una base nombrada "base_de_datos.RES".
  2. Verifico que el restore termine si errores (restore.log vacío).
  3. Si es correcta, desconecto de la base de datos.
  4. Renombro la base de datos a "base_de_datos_[FECHA_HORA].BAK"
  5. Renombro restore a "base_de_datos.FDB"
  6. Reconecto a la base de datos.


Gracias por las sugerencias, se aprecian bastante, llevo unas pocas semanas trabajando con Delphi y Firebird y aún estoy practicando.

¿Cuál es la forma correcta de desconectar mi aplicativo de la base de datos para poder hacer un backup y restore?

Casimiro Notevi 29-09-2022 17:01:25

Cita:

Empezado por pgranados (Mensaje 548539)
Gracias por las sugerencias, se aprecian bastante, llevo unas pocas semanas trabajando con Delphi y Firebird y aún estoy practicando.

¿Cuál es la forma correcta de desconectar mi aplicativo de la base de datos para poder hacer un backup y restore?

Depende de los componentes que estés usando, pero más o menos:
Código Delphi [-]
ibdatabase.close;
ibdatabase.active:=false;

pgranados 29-09-2022 17:17:52

Cita:

Empezado por Casimiro Notevi (Mensaje 548541)
Depende de los componentes que estés usando, pero más o menos:
Código Delphi [-]
ibdatabase.close;
ibdatabase.active:=false;

Que tal, el código que estoy usando para generar el respaldo es:

Código Delphi [-]

procedure TForm4.Button1Click(Sender: TObject);
var psFichero,psinstruccion:string;
begin
  psFichero:='C:\Program Files (x86)\Firebird\Firebird_3_0\gbak.exe';
  psInstruccion:='-v -t -user SYSDBA -password masterkey  "C:\Test.FDB" "C:\Test.FBK"';
  ShellExecute(Handle, nil, PChar(psFichero), PChar(psInstruccion), nil, SW_HIDE);

Casimiro Notevi 29-09-2022 17:23:54

No hace falta desconectar la BD para hacer un backup.

pgranados 29-09-2022 23:53:33

Cita:

Empezado por Casimiro Notevi (Mensaje 548541)
Depende de los componentes que estés usando, pero más o menos:
Código Delphi [-]
ibdatabase.close;
ibdatabase.active:=false;

Hola Casimiro, estoy revisando esta parte pero no encuentro una forma de crear un botón llamado Desconectar y utilizar las funciones que me comentas, ¿tendrás algún ejemplo de cómo llevarlo a cabo? Estoy usando FB 3.0. Saludos.

Casimiro Notevi 30-09-2022 10:42:10

Cita:

Empezado por pgranados (Mensaje 548548)
Hola Casimiro, estoy revisando esta parte pero no encuentro una forma de crear un botón llamado Desconectar y utilizar las funciones que me comentas, ¿tendrás algún ejemplo de cómo llevarlo a cabo? Estoy usando FB 3.0. Saludos.

No hace falta desconectar la BD para hacer un backup.

pgranados 30-09-2022 16:30:55

Cita:

Empezado por Casimiro Notevi (Mensaje 548551)
No hace falta desconectar la BD para hacer un backup.

No hablo de un backup, hablo de un restore.

Casimiro Notevi 30-09-2022 16:47:30

¿Has contestado ya qué componentes estás usando? es que no lo veo.


La franja horaria es GMT +2. Ahora son las 22:47:49.

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