Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 22
burasu Va por buen camino
Realizar el GFIX a una BD sin usar el fichero GFIX.EXE????

Hola amigos, estoy usando el Firebird 1.5, en mi aplicación cada vez que creo una nueva BD debo usar el fichero GFIX para poder asegurar la integridad de dicha base de datos.

Usar el fichero este significa tener que copiarselo a cada equipo en caso que la aplicación funciones en cliente/servidor.

Quisiera saber como puedo realizar el GFIX sin tener que usar el fichero en cuestion.


Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 09-08-2004
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 21
Rufus Va por buen camino
Cita:
Hola amigos, estoy usando el Firebird 1.5, en mi aplicación cada vez que creo una nueva BD debo usar el fichero GFIX para poder asegurar la integridad de dicha base de datos.
La herramienta gfix se utiliza para cambiar ciertos parámetros de la base de datos, como son el modo síncrono o asíncrono, el número de transacciones para realizar una limpieza automática de las mismas, el modo de accesso, solo lectura o lectura-escritura, echar abajo la base de datos, etc y tambien para relizar una reparación en caso de corrupción de la base de datos.

Dicho esto, no necesitas utilizar el gfix recien creas una base de datos, generalmente, a no ser que quieras cambiar uno o más de los parámetros por defecto de la base de datos. (Casi) siempre se utiliza una vez que la base de tos lleve cierto tiempo funcionando.

Justamente para lo que no te hace falta es para, como tu dices, asegurar la "integridad" de la base de datos: eso lo haces tu mismo con el diseño que hayas hecho de la base de datos.

Cita:
Usar el fichero este significa tener que copiarselo a cada equipo en caso que la aplicación funciones en cliente/servidor.
¡Justamente al contrario! Si tu sistema está construido utilizando métodos cliente/servidor significa que tienes una SOLO una base de datos en un equipo que actua como servidor y que tienes uno o varios clientes que acceden a ella. Solo te hace falta el gfix en el servidor ¿para que quieres tenerlo en todos los clientes?

Eso te haria falta precisamente si no utilizas cliente/servidor sino sistemas locales, es decir, que en cada equipo en el que instalas tu software creas una base de datos local e independiente de los otros equipos, en ese caso si que seria util ponerlo en todos, aunque si estan conectados en red tampoco es estrictamente necesario.
__________________
Milo
Responder Con Cita
  #3  
Antiguo 09-08-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 22
burasu Va por buen camino
Si verás resulta que esa aplicación podrá ser utilizada tanto en cliente/servidor como en monopuesto.

Te pongo un ejemplo de mi aplicación (bueno de la aplicación que estamos haciendo en la empresa en la que trabajo) la aplicación podrá ser tanto cliente/servidor como monopuesto, a su vez las bases de datos podrán estar tanto en linux como en sistemas windows en servidores. En aquellos que son windows, la carpeta donde están las bd está en una unidad compartida. Dicho esto, el fichero gFIX en el servidor no está accesible para los usuario, entonces por eso paso el fichero junto con los demás ficheros de mi aplicación. Entonces por ello quiero una sentencia que me suplante el tener que hacer este caos.

No se si me he explicado bien
Responder Con Cita
  #4  
Antiguo 10-08-2004
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 21
Rufus Va por buen camino
Cita:
En aquellos que son windows, la carpeta donde están las bd está en una unidad compartida
Y...¿para que?. Para acceder y administrar la base de datos no hace falta, a no ser que tengas necesariamente que proporcionar acceso al archivo(s) de la base de datos.

Cita:
No se si me he explicado bien
Pues no lo se, pero da igual la historia que quieras montar. Empecemos por tu pregunta inicial:

-- ¿Cómo puedo hacer lo que hace el gfix.exe pero sin tener el gfix.exe?



Eso es como si me dices:

-- ¿Cómo puedo hacer lo que hace el winamp.exe pero sin tener el winamp.exe?


Por otro lado, es que no le veo ningún problema a poner el gfix en todos los equipos donde pongas un servidor firebird. Si instalas firebird en local, estas instalando un servidor local en el equipo, si no no funciona ¿no?, entonces ¿que inconveniente hay en poner el gfix al mismo tiempo que haces la instalacion del servidor?. Una vez con el gfix ahí, puedes utilizarlo como quieras, puedes ejecutarlo como algo periodico o puede ser una opcion que incluyas en tu aplicacion. Aunque más a menudo que el gfix yo utilizaría el gbak y haría restauraciones periodicas de la base de datos.

Por último, todavia no se muy bien para qué quieres utilizar el gfix nada más crear las bases de datos. Quizá para cambiar el modo a asíncrono en los windows ??
__________________
Milo
Responder Con Cita
  #5  
Antiguo 10-08-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 22
burasu Va por buen camino
Precisamente para eso ultimo que has indicado, si no recuerdo mal (a no ser que en las nuevas versiones halla cambiado) la base de datos se crea en modo asincrónico o al reves, es decir no fuerza a grabar los datos en la BD. Por lo tanto eso es inestable por que se puede dañar la base de datos, no? Bueno pues por eso precisamente realizo el gFIX cuando creo la BD.

Al tenerla en el servidor alojada en una carpeta compartida, pero no así los drivers necesarios de Firebird no puedo hacer desde mi aplicación Delphi la siguiente sentencia:

Código:
      ComandoGFIX := 'gfix.exe -write sync -user ' + UPPERCASE(ModuloDatos.RegFichIni.UsrBD) + ' -password ' +
                      Clave_Usuario + ' ' + ModuloDatos.SacarRuta + Nom_Fich + ModuloDatos.Ext_Global;
      WinExec(PChar(ComandoGFIX),SW_HIDE);
Por que obviamente la aplicación no puede rastrear las carpetas de una unidad que no está compartida. Por esto precisamente copio en cada equipo cliente la sentencia GFIX. Por ello intento buscar algún componente o linea de comando que pueda reemplazar esta operación que realizo.
Responder Con Cita
  #6  
Antiguo 10-08-2004
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 21
Rufus Va por buen camino
El comportamiento estándar de firebird 1.5 es el siguiente:

  • En windows: crea por defecto las bases de datos en modo SÍNCRONO, esto es que todas las operaciones se graban inmediatamente en disco.
  • En linux: crea por defecto las bases de datos en modo ASÍNCRONO, esto es que utiliza un buffer para ganar velocidad y las operaciones no son grabadas inmediatamente en el disco. Lo han hecho así porque según los desarrolladores que trabajan en firebird, los sistemas linux tienen la suficiente seguridad como para poder trabajar en este modo sin tener que preocuparse por la corrupcion de los datos. Yo también lo creo así.
Ahora bien, si tu para mayor seguridad y si no te fías mucho, quieres poner en los linux la escritura síncrona, puedes hacerlo, pero ya digo que yo no creo que sea necesario.

Cita:
Por que obviamente la aplicación no puede rastrear las carpetas de una unidad que no está compartida.
Bien, esta frase es cierta, pero es que para ejecutar correctamente el gfix no te hace falta que la base de datos esté en una carpeta compartida.

Todavía no me aclaro mucho con tu caso concreto pero te voy a poner un ejemplo:

Tienes dos computadores, uno es el servidor y otro el cliente, da igual que sean linux o windows. La base de datos está en el servidor, y no hay ningun directorio compartido. Bien, lo primero que yo hago, en este caso, es en el servidor poner en el archivo aliases.conf, que esta en el directorio de firebird, por ejempo la siguiente línea suponiendo que es un servidor windows:

pedidos = c:\data\pedidos.fdb

E insisto, el directorio 'data' no está compartido.

Luego en el cliente tengo lógicamente que instalar el cliente de firebird, con la librería para poder conectar. Normalmente tambien se pone la vieja librería de interbase, que sólo sirve para enlazar con la nueva de firebird, para evitar problemas. Aquí, si quiero, puedo instalar en el cliente herramientas administrativas, como el gfix, gbak, isql y demás.

Desde el cliente, suponiendo que el servidor se llame 'servidor', para conectar a la base datos solo tengo que poner
Código:
servidor:pedidos
y ya está. No me hace falta saber en qué directorio está.

Pues con el gfix lo mismo de lo mismo. Si quiero ejecutar un gfix desde el cliente contra una base de datos del servidor pondría:
Código:
gfix -write sync -user sysdba -password masterkey servidor:pedidos
Ahora bien, ¿necesitas poner el gifx en todos los clientes para hacer esto? No. Lo que necesitas es la libreria cliente. El gfix (Y SOLO EL GFIX) podrías ponerlo en una carpeta compatida del servidor para que los clientes tengan acceso a este archivo.
__________________
Milo

Última edición por Rufus fecha: 10-08-2004 a las 12:52:21.
Responder Con Cita
  #7  
Antiguo 10-08-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 22
burasu Va por buen camino
Gracias Rufus, siento haber sido tan tenstarudo y no haberte comprendido, pero es que se puede decir que estoy empezando en interbase y firebird, y aun más en aplicaciones clientes/servidor, y claro hay cosas que me dejan fuera de juego.

Cuando tenga algún otro problema con firebird ya se a quien debo de buscar


Y ahora para terminar, yo recuerdo que existia un paquete de componentes para Delphi entre los cuales habia un componente que hacia el gbak. Conoces si hay alguno que haga el gfix?(así de esta forma ya no tendría que compartir nada de nada )

Lo dicho gracias
Responder Con Cita
  #8  
Antiguo 10-08-2004
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 21
Rufus Va por buen camino
Pues sí, y disculpa no habertelo dicho desde el principio, pero es que no lo utilizo, ya que uso poco el gfix y cuando tengo que hacerlo lo hago directamente con el gfix desde linea de comandos.

El componente es el IBConfigService, de la paleta Interbase Admin. Con él puedes hacer lo que hace el gfix.

Haciendo doble click sobre él puedes configurar los parámetros de la conexión. Luego una vez esté activo puedes poner:
Código:
IBConfigservice1.SetAsyncMode(false);
para poner el modo síncrono, pero ya digo, esto hace falta si el servidor es un linux, en windows ya es síncrono por defecto.

Otros componentes como los FIBPlus, etc, también tienen componentes para esto. Te digo el de los IBX por que es gratis, pero ahora que lo pienso no se si viene con Delphi por defecto o con que version, porque creo que los mios los he actualizado de la pagina de borland.

Ah, y de nada. Por aqui hay gente que sabe MUCHO más que yo, no te creas.

Un saludo
__________________
Milo

Última edición por Rufus fecha: 10-08-2004 a las 13:39:56.
Responder Con Cita
  #9  
Antiguo 10-08-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 22
burasu Va por buen camino
Pues lo dicho gracias de nuevo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:05:51.


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
Copyright 1996-2007 Club Delphi