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)
-   -   Problema para actualizar el servidor (https://www.clubdelphi.com/foros/showthread.php?t=59641)

papulo 03-09-2008 08:56:35

Problema para actualizar el servidor
 
El tema es el siguiente, tenemos un servidor (RX300) funcionando con Win 2003 server y nos gustaría actualizarlo a Ubuntu.

El problema es que tenemos un programa comercial y que tienen unos cuantos cientos de clientes por todo el mundo (conocido), al arrancar se conectan a nuestra base de datos y comprueban unos datos.

Acceden de la forma "IP:C:/directorio/basededatos.FDB" y el cambiar el SO junto con lanzar la nueva versión con los paths modificados haría que muchos clientes con la versión anterior tuvieran problemas serios.

¿Alguna manera de gestionar las DBs independientemente del SO y del path?

¡Saludoses!

PD: Encima tenemos que usar la versión 1.5

Casimiro Notevi 03-09-2008 09:50:52

Hola, papulo, ¿te sirven los "alias"?

En el firebird tienes un ficherito llamado aliases.conf y en él creas un alias para la base de datos, por ejemplo:

Código:

misdatos = 192.198.0.100:/mnt/datos/basedatos.fdb
Los clientes conectarían a "misdatos" y no tienen que saber nada sobre la ubicación real de la base de datos.
Esto te permite cambiar (redirigir) el alias a donde te interese en cualquier momento, por ejemplo, se te estropea el servidor y montas uno provisional en windows, entonces con cambiar esa línea en el "aliases.conf" tendrías suficiente, por ejemplo:

Código:

misdatos = 192.198.0.88:c:\datos\basedatos.fdb
y así, de esta manera, los clientes siempre conectarían a "misdatos" y tú podrías cambiar la base de datos al servidor/sistema/directorio que quieras en cualquier momento.




Edito: en tu caso tampoco te valdrá porque tendrías que cambiarlo en tus clientes y sería lo mismo que si le cambias la dirección completa real a la base de datos :(

papulo 03-09-2008 10:39:59

Hola mister, gracias por la pronta respuesta.

Ahora sacaremos una nueva versión, por eso no es problema.

El caso es que los alias no los podemos usar con Delphi 7, o al menos no sabemos como usarlos con los componentes estándar.

¿Alguna solución a ello?

Gracias mil y me alegro de "verte".

tefots 03-09-2008 13:11:35

solo tienes que cambiar la cadena de conexion
en vez de poner la ip y la ruta , pones el nombre del alias y ya esta.


Cita:

Empezado por papulo (Mensaje 311385)
Hola mister, gracias por la pronta respuesta.

Ahora sacaremos una nueva versión, por eso no es problema.

El caso es que los alias no los podemos usar con Delphi 7, o al menos no sabemos como usarlos con los componentes estándar.

¿Alguna solución a ello?

Gracias mil y me alegro de "verte".


papulo 03-09-2008 14:51:39

Si no es mucho pedir ¿me podrías poner un ejemplo ilustrativo?

A parte, no entiendo como puedes realizar una conexión si el programa se ejecuta desde otro ordenador fuera de tu dominio, hacía una IP publica.

¡Saludoses!

donald shimoda 03-09-2008 15:27:23

Cita:

Empezado por papulo (Mensaje 311435)
Si no es mucho pedir ¿me podrías poner un ejemplo ilustrativo?

A parte, no entiendo como puedes realizar una conexión si el programa se ejecuta desde otro ordenador fuera de tu dominio, hacía una IP publica.

¡Saludoses!

Amigo , primero que nada tiene que tener acceso a tu servidor a través de una IP conocida y el puerto 3050 (default en FB) debe estar abierto desde tu cliente a tu servidor. Como lograr eso excede los alcances de este articulo porque varia segun que configuración de redes tengas, si tienes routers, etc etc, pero puedes consultarme de manera privada dando mas detalles y te cuento.

Una vez que ese punto esta logrado, es tan simple como te comentan los otros foristas.

Saludos cordiales.

papulo 03-09-2008 15:40:21

Veamos, tenemos IP fija en el servidor y el router con el puerto 3050 abierto y apuntando a la IP correspondiente con el PC que tiene las bases de datos.

La infraestructura para permitir conexiones desde fuera de la empresa está perfecta.

Lo que necesito, sabiendo por ejemplo, que la IP fuera 88.77.66.55 y el path a la base de datos "c:/Database/Current/MiBase.FDB", es como se haría la conexión por código, comparando la conexión tradicional con la conexión con álias.

Saludos.

roman 03-09-2008 15:40:38

Cita:

Empezado por donald shimoda (Mensaje 311459)
pero puedes consultarme de manera privada dando mas detalles y te cuento.

Aunque desde luego puede consultarte de manera privada, sería más útil para todos los demás hacerlo en público, que de esto tratan estos foros, de ayudar a todos.

// Saludos

donald shimoda 03-09-2008 15:56:27

Cita:

Empezado por roman (Mensaje 311473)
Aunque desde luego puede consultarte de manera privada, sería más útil para todos los demás hacerlo en público, que de esto tratan estos foros, de ayudar a todos.

// Saludos

Entiendo, solo que como no dio detalles de su servidor en cuanto a estructura, entendí que lo hacia por privacidad. veo que no porque publico en un foro publico la ip :rolleyes:. Espero que no sea la real.

Saludos.

donald shimoda 03-09-2008 15:59:31

Cita:

Empezado por papulo (Mensaje 311471)
Veamos, tenemos IP fija en el servidor y el router con el puerto 3050 abierto y apuntando a la IP correspondiente con el PC que tiene las bases de datos.

La infraestructura para permitir conexiones desde fuera de la empresa está perfecta.

Lo que necesito, sabiendo por ejemplo, que la IP fuera 88.77.66.55 y el path a la base de datos "c:/Database/Current/MiBase.FDB", es como se haría la conexión por código, comparando la conexión tradicional con la conexión con álias.

Saludos.

Bueno, entonces esta facil.

Primero te vas al archivo aliases.conf en la carpeta de firebird y agregas la siguiente linea:

aliasnuevo = c:/Database/Current/MiBase.FDB

Luego en tu componente servidor en tu aplicación cliente (que no aclaras cual usas) colocas como string 88.77.66.55:aliasnuevo.

Listo.

No puedo dejar de recomendarte que pruebes alguna librería de capas intermedias , como remobjects. El acceso a través de internet a servidores SQL no es la solución más adecuada a mi entender.

Saludos.

Editado, perdon, decis que vas a usar linux? Si usas linux el path deberia ser a un directorio linux , ejemplo


aliasnuevo = /var/data/MiBase.FDB

para windows , estan al reves los slash!!!

deberia ser:

aliasnuevo = c:\Database\Current\MiBase.FDB

espero que te sirva.

papulo 03-09-2008 16:15:16

Para aclarar el tema.

Para ser exactos uso el componente IBDatabase de la pestaña InterBase.

Entonces, si mal no he entendido, en el campo "DatabaseName" del elemento IBDatabase, con poner "88.77.66.55:ElAlias" ya tendría que hacer la conexión correctamente desde fuera.

¿Correcto?

egostar 03-09-2008 16:18:57

Hola

Hace unos dias en la reunión de Club Delphi que tuvimos hace poco en México vimos la funcionalidad de los WebServices y en mi blog desarrolle la forma como se crea, se publica y se consume un WebService.

Sin embargo, viendo el potencial me pregunté si un WebService puede ser usado para crear aplicaciones web consumiendo un WebService que acceda a la base de datos por Internet pero el acceso a la base de datos seria local.

En mis tiempos libres he hecho unas pruebas de un WebService con acceso a base de datos y si es posible; aún estoy verde en este asunto sobre todo por las concurrencias y por las transacciones, pero pienso que es una muy buena alternativa.

Salud OS

papulo 03-09-2008 16:22:11

Hola Egostar,

primero de todo, gracias por la aportación, pero en este caso no estoy buscando una alternativa (que ahora estamos preparando la versión online del programa :P) sino una solución concreta a un problema acotado.

Y si mal no he entendido al resto de compañeros, la duda que tenía se está disipando positivamente a marchas forzadas :)

PD: Da gusto "encontrarse" con gente tan educada, un aplauso para todos.

donald shimoda 03-09-2008 16:22:25

Cita:

Empezado por papulo (Mensaje 311485)
Para aclarar el tema.

Para ser exactos uso el componente IBDatabase de la pestaña InterBase.

Entonces, si mal no he entendido, en el campo "DatabaseName" del elemento IBDatabase, con poner "88.77.66.55:ElAlias" ya tendría que hacer la conexión correctamente desde fuera.

¿Correcto?

No uso ese componente, y si vas a usar firebird los componentes de delphi tienen problemas. Pero bueno, como me imagino que a estas alturas cualquier recomendación es inútil, dado que lo que quieres es solo echar a andar la cosa, dejame revisar...

Confirmado y probado. ;)

donald shimoda 03-09-2008 16:26:08

Cita:

Empezado por egostar (Mensaje 311488)
En mis tiempos libres he hecho unas pruebas de un WebService con acceso a base de datos y si es posible; aún estoy verde en este asunto sobre todo por las concurrencias y por las transacciones, pero pienso que es una muy buena alternativa.

Salud OS

Amigo, si quieres experimentar puedes empezar de cero y leer varios libros y codificar de cero web services.

Si lo que quieres es explotar las virtudes de un modelo n-cap, con servicios remotos (tanto web services como otros basados en otras tecnologias) echale un vistazo a remobjects o a kbm. No tienen desperdicio, y te ahorraras muchas horas de trabajo con un resultado muy bueno sobre tus aplicaciones remotas.

Saludos

egostar 03-09-2008 16:34:23

Cita:

Empezado por papulo (Mensaje 311485)
Para aclarar el tema.

Para ser exactos uso el componente IBDatabase de la pestaña InterBase.

Entonces, si mal no he entendido, en el campo "DatabaseName" del elemento IBDatabase, con poner "88.77.66.55:ElAlias" ya tendría que hacer la conexión correctamente desde fuera.

¿Correcto?

Esta es la forma como yo accedo a mi base de datos,

Para no tener que modificar el codigo cada vez que cambia la IP o el nombre de servidor recupero los datos del registro de windows (algunos les gusta mas usar archivos INI, en todo caso el valido de ambas formas)

En el evento OnCreate de la forma principal

Código Delphi [-]
procedure TFMenu.FormCreate(Sender: TObject);
begin
  { Obtiene Parametros de Comunicacion a Base de Datos }
  LlaveRegistro             := 'Software\STarADM\';
  FIniFile                  := TRegIniFile.Create();
  FIniFile.RootKey          := HKEY_LOCAL_MACHINE;
  RutaBase                  := FIniFile.ReadString(LlaveRegistro+'DATA', 'DataBasePath', '');
  RutaBaseBackup            := FIniFile.ReadString(LlaveRegistro+'DATA', 'BackupBDPath', '');
  Servidor                  := FIniFile.ReadString(LlaveRegistro+'DATA', 'Server', '');
  FIniFile.Free;
end;

Y en el evento OnCreate del DataModule

Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
  case FMenu.protocolo of
     0: IBDatabase1.DatabaseName := FMenu.Servidor+':'+FMenu.RutaBase;
     1: IBDatabase1.DatabaseName := '\\'+FMenu.Servidor+'\'+FMenu.RutaBase;
  end;
  try
  IBDatabase1.Open;
  except
    ShowMessage('Hubo un error al inicializar la conexión con la base de datos.'#13+
                 'Verifique que los datos de acceso a la base sea la correcta'#13+
                 'en el menu Herramientas->Configuración'#13+
                 'Después de modificar los datos, reinicie esta aplicación.');
  end;
end;

Espero te de una idea mas clara.

Salud OS

papulo 03-09-2008 16:55:30

Gracias Egostar, ahora le pegaré un buen vistazo y mañana dejaré las impresiones.

Por otra parte, Donald, mi intención no es "probar", mas bien tenemos todo el programa desarrollado, la infraestructura montada y ahora, cuando hemos pensado en migrar el servidor de uno con Windows a uno con Ubuntu, hemos visto los problemas que había con el acceso a las bases de datos y el tema de los Alias, todo ello usando el componente antes nombrado.

Saluditos.

donald shimoda 03-09-2008 17:00:17

Cita:

Empezado por papulo (Mensaje 311516)
G
Por otra parte, Donald, mi intención no es "probar", mas bien tenemos todo el programa desarrollado, la infraestructura montada y ahora, cuando hemos pensado en migrar el servidor de uno con Windows a uno con Ubuntu, hemos visto los problemas que había con el acceso a las bases de datos y el tema de los Alias, todo ello usando el componente antes nombrado.

Saluditos.

Te entiendo amigo, pero no creo que ahora en windows lo tengas funcionando con firebird o si? Si asi es y lo tenes con ese conjunto de componentes , pues que suerte tuviste de que haya corrido en todos los clientes que tiene sen el mundo, porque el ibdataset es sumamente incompatible con FIREBIRD, mas alla de que tiene una performance malísima.

P.D. Quizas a eso se deba que no puedas usarlo con la version mejorada de firebird 2.0x?
Saludos.

papulo 03-09-2008 17:42:18

De hecho, lo usamos con la rama 1.5, y ya migraremos para la versión 2.5.

Por ahora es lo que hay, pero mi intención es ver como lo podremos cambiar.

Cita:

Empezado por donald shimoda (Mensaje 311519)
Te entiendo amigo, pero no creo que ahora en windows lo tengas funcionando con firebird o si? Si asi es y lo tenes con ese conjunto de componentes , pues que suerte tuviste de que haya corrido en todos los clientes que tiene sen el mundo, porque el ibdataset es sumamente incompatible con FIREBIRD, mas alla de que tiene una performance malísima.

P.D. Quizas a eso se deba que no puedas usarlo con la version mejorada de firebird 2.0x?
Saludos.

Piensa que el desarrollo el programa es de hace 4 años, por lo que en un entorno empresarial no vas a usar una rama "nueva" como era el firebird 2 (o no se si en el 2004-2005 ya había salido).

Lo de que el IBDataSet sea incompatible, me resulta extraño, dado que siempre lo usé con Firebird y sin problemas de ningún tipo, y si lo tenemos funcionando sobre un Win 2003 es por decisión administrativa.

Ahora es cuando comenzamos a mirar como migrar el asunto para tener el mejor rendimiento.

PD: Si mis dudas son tan vagas, es porque llevo mas de un año sin tocar Delphi, no porque no sepa programar.

Delphius 03-09-2008 17:50:17

Cita:

Empezado por donald shimoda (Mensaje 311490)
No uso ese componente, y si vas a usar firebird los componentes de delphi tienen problemas. Pero bueno, como me imagino que a estas alturas cualquier recomendación es inútil, dado que lo que quieres es solo echar a andar la cosa, dejame revisar...

Confirmado y probado. ;)

Con las versiones 2.x puede ser, pero al menos yo con la versión 1.5.3 no he tenido problemas hasta el momento.

Saludos,


La franja horaria es GMT +2. Ahora son las 23:04:59.

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