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)
-   -   Error al conectar BD Firebird (https://www.clubdelphi.com/foros/showthread.php?t=86824)

Angel.Matilla 09-10-2014 12:47:45

Error al conectar BD Firebird
 
Tengo una base de datos en Firebird creada al ejecutarse una aplicación por primera vez y ahor no logro conectarme a ella aunque creo que no he modificado nada. Si trato de abrirla con SQL Manager Lite me da esta información:
Cita:

Wrong or obsolete version
.
Unsupported on-disk structure for file C:\DatCol\Tablas\COLEGIO.GDB; found 32779, support 10.

SQL Code: -820
IB Error Number: 335544379
y al tratar de conectarme con la aplicación me dice lo mismo pero en vez support 10 pone support 15.

Estoy usando Firebird 2.5.2.26540 y tuve instalado Firebird 2.5.3.26778 pero da lo mismo. He probado a arreglarla con la herramienta gfix de Firebird pero o no entiendo como funciona o no hace nada.

duilioisola 09-10-2014 13:48:25

Puede ser que la base se ha corrompido.

¿La has copiado mientras alguna aplicación estaba conectada?
¿Estás seguro de que es una base de datos GDB/FDB y no un backup GBK/FBK al que hayas cambiado el nombre?
¿Tienes una copia anterior que si funcione para comparar tamaño?
¿Cómo se crea la primera vez? Es una copia de una "Base Modelo" o la creas mediante SQL.

jgutti 09-10-2014 14:27:36

lo mas probable es que en nuevo firebird que instalastes soporte solo .fdb

- para solucionar el problema volver a instalar Firebird 2.5.2.26540 o convertir colegio.gdb a colegio.fdb
- para convertir .gdb a .fdb
1.- Generar backup de la base actual (colegio.gdb)
2.- ejecutar gbak -c colegio.GBK nuevocolegio.fdb -user SYSDBA -password masterkey
3.- renombrar nuevocolegio.fdb a colegio.fdb


saludos

Casimiro Notevi 09-10-2014 15:24:14

Cita:

Empezado por duilioisola (Mensaje 482807)
Puede ser que la base se ha corrompido.
¿La has copiado mientras alguna aplicación estaba conectada?
¿Estás seguro de que es una base de datos GDB/FDB y no un backup GBK/FBK al que hayas cambiado el nombre?
¿Tienes una copia anterior que si funcione para comparar tamaño?
¿Cómo se crea la primera vez? Es una copia de una "Base Modelo" o la creas mediante SQL.

Sí, seguro que es eso.



Cita:

Empezado por jgutti (Mensaje 482811)
lo mas probable es que en nuevo firebird que instalastes soporte solo .fdb
- para solucionar el problema volver a instalar Firebird 2.5.2.26540 o convertir colegio.gdb a colegio.fdb
- para convertir .gdb a .fdb
1.- Generar backup de la base actual (colegio.gdb)
2.- ejecutar gbak -c colegio.GBK nuevocolegio.fdb -user SYSDBA -password masterkey
3.- renombrar nuevocolegio.fdb a colegio.fdb
saludos

No, no es eso. Puedes poner la extensión que quieras, en cualquier momento (que no haya conexiones abiertas), a cualquier versión.

Angel.Matilla 09-10-2014 17:49:46

Gracias a los tres por las respuestas.
Cita:

Empezado por duilioisola (Mensaje 482807)
Puede ser que la base se ha corrompido.

¿La has copiado mientras alguna aplicación estaba conectada?
¿Estás seguro de que es una base de datos GDB/FDB y no un backup GBK/FBK al que hayas cambiado el nombre?
¿Tienes una copia anterior que si funcione para comparar tamaño?
¿Cómo se crea la primera vez? Es una copia de una "Base Modelo" o la creas mediante SQL.

Vamos por partes.
1. La copia se hizo estando cerrado todas las aplicaciones, excepto el escritorio remoto (TeamViewer) con la que me la traje.
2. Sí, estoy seguro que no es un backup.
3. No, por desgarcia no tengo una copia anterior.
4. La primera vez se crea mediante comandos SQL, por ejemplo:
Código SQL [-]
CREATE TABLE Alumnos (Alumno CHAR(30), Registro INTEGER, Referencia CHAR(5), Recibo CHAR(7), Dni CHAR(9), Padre INTEGER,
Domicilia INTEGER, Formacion INTEGER, Curso INTEGER, Observaciones BLOB(0, 1), Exento INTEGER, Seccion CHAR(1), Lectivo INTEGER,
PRIMARY KEY (Alumno, Registro, Referencia, Recibo))
El problema es que la aplicación original, que tengo que adaptar al nuevo formato de emisión de recibos de acuerdo al estándar SEPA, está funcionando sin error alguno.
Cita:

Empezado por jgutti (Mensaje 482811)
para solucionar el problema volver a instalar Firebird 2.5.2.26540 o convertir colegio.gdb a colegio.fdb

La versión de Firebird en el equipo en el que está trabajando es la misma que tengo yo ahora instalada en mi máquina. Sí es cierto que dispongo de un backup (gbk); probaré a restaurar la base de datos. Me hace falta únciamente para probar la adaptación de las bases de datos. Ya os diré como va la cosa.

Angel.Matilla 09-10-2014 18:08:22

He probado restaurando la base de datos desde el backup con gbak y me da el mismo mensaje de error. La única diferencia es que ahora dice esto:
Cita:

Wrong or obsolete version
.
Unsupported on-disk structure for file C:\DatCol\Tablas\Colegio_Ant\COLEGIO2.GDB; found 32779, support 15.

SQL Code: -820
IB Error Number: 335544379

duilioisola 09-10-2014 18:32:04

La forma de transportar una base de datos de un ordenador a otro es haciendo backup/restore.
Si has copiado la base de datos, es muy probable que se haya corrompido.

¿Cuál es la línea de comando que utilizas para hacer le backup?
¿Cuál es la línea de comando que utilizas para hacer le restore?

Si alguna vez has cambiado de versión de Firebird, asegúrate que el archivo GBAK.EXE es el que corresponde a la versión.
Me ha sucedido que un compañero, para no tener que escribir toda la ruta al archivo, lo copio al lado de la base de datos.
Tiempo después se actualizó la versión pero nadie se acordó de copiar el GBAK de la nueva versión al lado de la base de datos y los backups empezaron a dar errores.

Código:

C:\Program Files\Firebird\Firebird_2_5\bin>gbak.exe -z
gbak:gbak version WI-V2.5.3.26778 Firebird 2.5
gbak: ERROR:requires both input and output filenames
gbak:Exiting before completion due to errors


Casimiro Notevi 09-10-2014 18:35:07

Me acabo de fijar en que una era la 2.5.2 y la otra 2.5.3

Deberías de probar a hacerlo "normalmente". Supongo que el backup que tienes es de la 2.5.2, y supongo que no existe el backup con el parámetro "transportable", así que:

Con firebird 2.5.2 restauras el backup. Debería estar bien.
Luego haces un backup transportable, con el parámetro -t

gbak -b -t -v -user zzzzzzz -password yyyyyy basedatos.fdb basedatos.fbk

Luego desisntalas esa versión e instalas la 2.5.3

Ahora la restauras normalmente:

gbak -r -p 8192 -v -user zzzzzzz -password yyyyyy basedatos.fbk basedatos.fdb


EDITO: Ahora veo el mensaje de [duilioisola]. Realmente es eso, una mezcla de versiones y haber hecho un backup no transportable.

Young 09-10-2014 22:29:19

En las ultimas versiones de Delphi si uno no pone atención se instala Interbase XE, y usa aun el mismo nombre de dll (GDS32.DLL), cuando se instala firebird posteriormente este no puede reescribir esa dll y puede causar problemas (...y me los causó).

Saludos.

Lepe 09-10-2014 23:35:17

Creo recordar es como dice Young.

En principio el orden para localizar la dll gds32 o fbclient.dll es:
- carpeta del ejecutable
- carpeta system32 ó SYSWOO64
- variables de entorno

En system32 siempre deberá estar la dll de la versión más moderna, ya que tiene compatibilidad hacia atrás hasta Interbase 6. Si un Firebird más nuevo quiere conectarse con una gds32.dll antigua, lo más normal es que dé problemas.

Hoy en día lo que se está haciendo es distribuir una versión de Firebird personalizada para tu aplicación, de esa forma, pueden coexistir en el servidor físico, 3 servidores firebirds por puertos distintos. El escenario es simple, un servidor de una empresa donde usan 3 programas de distintos creadores, cada uno con su servicio de Guardian y Server. Todos viven y dejan vivir.

Las tareas son simples:
- copiar todas las subcarpetas de archivos de programa\Firebird\Firebird_2_5 en una subcarpeta de tu instalación.
- En la carpeta bin de firebird tienes unos ficheros bat para registrar tu servicio, tan simple como:
c:\mi programa\fb252\bin\instreg MiPrograma
Eso creará el servicio de Firebird llamado "Firebird Guardian MiPrograma", "Firebird Server MiPrograma" y los arrancará.
- El Firebird.conf debe estar preparado con tus opciones:
- El puerto 3050 y 3051 cambiarlos a los que tú quieras por ejemplo 3066 y 3067
- RemoteServiceName: en lugar del gds_db, pones "MiPrograma"
(ya de memoria no recuerdo las demás cosas, pero está documentado: http://www.destructor.de/firebird/multiinstance.htm eah!, para los vagos ;))

Para conectar a tu base de datos desde delphi: 192.168.1.12/3066:c:\bdMiPrograma\dd.fdb

Saludos!!

Angel.Matilla 10-10-2014 10:34:33

Una cosa que se me olvidó comentar: La aplicación está hecha en C++ Builder 5.
Cita:

Empezado por duilioisola (Mensaje 482828)
¿Cuál es la línea de comando que utilizas para hacer le backup?
¿Cuál es la línea de comando que utilizas para hacer le restore?

El backup lo hago directamente con un TIBBackupService y este código:
Código:

Backup->LoginPrompt = false;
Backup->Params->Add("user_name=sysdba");
Backup->Params->Add("password=masterkey");
Backup->Verbose = true;
Backup->Active  = true;
try
{
    Backup->DatabaseName = fColegio->Colegio->DatabaseName;
    Backup->BackupFile->Add(fColegio->DirDlg->SelectedFolder + "\\" + Now().FormatString("yyyymmdhhnnss") + ".gbk");
    tColegio->Active = true;
    tColegio->Commit();
    Backup->ServiceStart();

    while (!Backup->Eof)
    {
          cCadena = Backup->GetNextLine();
          Barra->Caption = "Backup » " + Trim(cCadena.SubString(cCadena.Pos(":") + 1, cCadena.Length()));
          slBackup->Add(Barra->Caption);
    }
}
__finally
{
    Backup->Active = false;
}

El restore lo estaba haciendo con gbak y con esta orden:
Cita:

gbak -r o -v -user SYSDBA -pass word masterkey c:\datcol\tablas\colegio_ant\20130911092620.gbk c:\datcol\tablas\colegio_ant\colegio2.gdb
En teoría sí restaura la base de datos (aparece ese ficherop colegio2.gdb), pero sigue dando el mismo mensaje de error
Cita:

Empezado por Casimiro Notevi (Mensaje 482829)
Me acabo de fijar en que una era la 2.5.2 y la otra 2.5.3

¿Cómo averiguas cual es la versión de Firebird?

Angel.Matilla 10-10-2014 10:44:28

Cita:

Empezado por Casimiro Notevi (Mensaje 482829)
gbak -r -p 8192 -v -user zzzzzzz -password yyyyyy basedatos.fbk basedatos.fdb

He probado esta línea. Se restaura la base de datos; he sacado esta información al restaurar:
Cita:

gbak: opened file c:\datcol\tablas\colegio_ant\20130911092620.gbk
gbak: backup file is compressed
gbak:created database c:\datcol\tablas\colegio_ant\colegio2.gdb, page_size 8192 bytes
gbak:started transaction
gbak:restoring domain RDB$1
gbak:restoring domain RDB$2
[...]
gbak: activating and creating deferred index ALUMNOS
gbak: activating and creating deferred index REFREC
gbak: committing metadata
gbak:finishing, closing, and going home
Pero sigue sin poderse abrir. :(

duilioisola 10-10-2014 11:30:06

Cita:

gbak:finishing, closing, and going home
Esto quiere decir que el restore tuvo éxito.

Cita:

Pero sigue sin poderse abrir.
¿Cuál es el mensaje de error?
¿Te refieres a que SQL Manager Lite no lo puede abrir o es tu aplicación?

Yo creo que si el restore tuvo éxito, el problema está en algún lío de versiones por parte del cliente o por parte del servidor.
Prueba hacer una máquina virtual limpia, le instalas Firebird y el SQL Manager, haces el restore y pruebas la conexión.

Angel.Matilla 10-10-2014 11:33:49

Cita:

Empezado por duilioisola (Mensaje 482869)
¿Cuál es el mensaje de error?
¿Te refieres a que SQL Manager Lite no lo puede abrir o es tu aplicación?

El mesaje de error, tanto con IBManager como con la aplicación, es el mismo:
Cita:

Wrong or obsolete version
.
Unsupported on-disk structure for file C:\DatCol\Tablas\COLEGIO.GDB; found 32779, support 15.

SQL Code: -820
IB Error Number: 335544379

Angel.Matilla 10-10-2014 12:03:08

Cita:

Empezado por Casimiro Notevi (Mensaje 482829)
gbak -b -t -v -user zzzzzzz -password yyyyyy basedatos.fdb basedatos.fbk
gbak -r -p 8192 -v -user zzzzzzz -password yyyyyy basedatos.fbk basedatos.fdb

Efectivamente las versiones de Firebird donde está corriendo la aplicación y la mía son distintas; allí está la 2.5.1 y aquí la 2.5.2. He hecho esto que sugería Casimiro, pero la base de datos restaurada da el mismo error y me estoy volviendo loco.

Casimiro Notevi 10-10-2014 12:26:50

No te vuelvas loco. Detente, relájate un rato y después vuelve paso a paso, con las cosas claras.

Versión con la que se hizo el backup y restaurarlo con la misma versión. Ya hecho y funciona.
Crear un nuevo backup transportable para llevarlo a otra versión.

En la otra versión, restaurar el backup.
No hay más.

Tan solo debes estar seguro de que las versiones están correctamente instaladas y no están mezcladas. (gds32.dll fbclient.dll gbak etc...)
Simplemente eso.

jgutti 10-10-2014 15:31:49

Angel si continuas con el error realiza los pasos siguientes (Tuve este problemas al cambiar la base de servidor en mas de una vez y solucione el problema con las indicaciones sgtes):

lo mas probable es que en nuevo firebird que instalastes soporte solo .fdb

- para solucionar el problema volver a instalar Firebird 2.5.2.26540 o convertir colegio.gdb a colegio.fdb
- para convertir .gdb a .fdb
1.- Generar backup de la base actual (colegio.gdb)
2.- ejecutar gbak -c colegio.GBK nuevocolegio.fdb -user SYSDBA -password masterkey
3.- renombrar nuevocolegio.fdb a colegio.fdb

Casimiro Notevi 10-10-2014 15:43:01

Cita:

Empezado por jgutti (Mensaje 482877)
lo mas probable es que en nuevo firebird que instalastes soporte solo .fdb

Toma una base de datos que tengas, por ejemplo: pruebas.fdb y ahora, sin que haya ninguna conexión abierta a ella, la renombras a: pruebas.zzz
Intenta conectar a pruebas.zzz


Pregunto: ¿acaso firebird ha incluido esa característica a la última versión?, es que no lo he leido en ningún sitio, de momento.

Angel.Matilla 10-10-2014 17:54:05

Gracias por vuestros mensajes. Debo ser algo más que bruto... :mad:
Cita:

Empezado por Casimiro Notevi (Mensaje 482872)
No te vuelvas loco. Detente, relájate un rato y después vuelve paso a paso, con las cosas claras.

Versión con la que se hizo el backup y restaurarlo con la misma versión. Ya hecho y funciona.
Crear un nuevo backup transportable para llevarlo a otra versión.

En la otra versión, restaurar el backup.
No hay más.

Tan solo debes estar seguro de que las versiones están correctamente instaladas y no están mezcladas. (gds32.dll fbclient.dll gbak etc...)
Simplemente eso.

Las versiones están bien instaladas porque donde corre la aplicación (2.5.1) se está usando sin problemas y en mi máquina (2.5.2) tengo otras bases de datos que funcionan (o funcionaban bien). Esta mañana hice un backup transportable (gbak -t) en el equipo donde está ahora instalada la aplicación, me lo traje a mi máquina (con TeamViewer) y lo restauré con los comandos que pusistéis. No funcionó.
Cita:

Empezado por jgutti (Mensaje 482877)
- para convertir .gdb a .fdb
1.- Generar backup de la base actual (colegio.gdb)
2.- ejecutar gbak -c colegio.GBK nuevocolegio.fdb -user SYSDBA -password masterkey
3.- renombrar nuevocolegio.fdb a colegio.fdb

Acabo de hacerlo y sigue saliendo el mismo mensaje de error:
Cita:

Wrong or obsolete version
.
Unsupported on-disk structure for file C:\DATCOL\TABLAS\COLEGIO_ANT\NUEVOCOL.FDB; found 32779, support 15.

SQL Code: -820
IB Error Number: 335544379
Cita:

Empezado por jgutti (Mensaje 482877)
lo mas probable es que en nuevo firebird que instalastes soporte solo .fdb

Esto ya me despista del todo. Tanto la base de datos como las tablas se crean por código:
Código:

try
{
    tColegio->Active = false;
    Colegio->Connected = false;
    Colegio->DatabaseName = AnsiString(cTablas) + "\\colegio.gdb";
    Colegio->Params->Clear();
    Colegio->Params->Add("USER 'sysdba'");
    Colegio->Params->Add("PASSWORD 'masterkey'");
    Colegio->Params->Add("PAGE_SIZE 4096");
    Colegio->SQLDialect = 3;
    Colegio->CreateDatabase();
}
catch(...)
{
    return false;
}

Con este código IBManager sí abre la base de datos.

Voy a probar otra cosa. Esta mañana, buscando con Google encontré un enlace Firebird Recuperación de bases de datos que utiliza la herramienta IBPump. Y en caso extremo, a las malas, como en el equipo donde corre la aplicación si funciona intentaré descargarme las tablas en ficheros de texto con la herramienta de extracción de bases de datos a un fichero de texto y la cargaría a la bestia. Ya sé que es una burrada, pero visto lo visto...:confused:

Casimiro Notevi 10-10-2014 21:29:06

¿Seguro que no tienes una mezcla rara de versiones?
Es que si has hecho un restore correctamente, entonces tendrías que abrirla igualmente.



La franja horaria es GMT +2. Ahora son las 08:40:40.

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