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)
-   -   Interconexion de tablas/backup-restore (https://www.clubdelphi.com/foros/showthread.php?t=95382)

mRoman 07-09-2021 18:57:27

Interconexion de tablas/backup-restore
 
Hola amigos.

Trabajo con: Delphi6/Delphi 10.3, Win10/Server 2012, FB 2.5


Pretendo desarrollar un nuevo proyecto que va a requerir o hacer referencia (aprovechar tablas) a otras tablas de 1 base de datos. Lo anterior porque en el nuevo proyecto tendrá 1 tabla con la misma estructura que tiene otra tabla que esta en producción en una base de datos (BD1).

He leido acerca de realizar consultas SQL haciendo referencias a tablas que están en otras base de datos, pero se comenta que es algo lento por medio de EXECUTE STATEMENT
https://firebird21.wordpress.com/201...atos-externas/
(entre otros links dentro de este foro).

Las consultas a esas tablas serán frecuentes, asi que si es importante el tema de velocidad/respuesta de la consulta.

Pensaba hacer crear las tablas del nuevo proyecto en la base de datos de producción, para q la consultas a esas tablas sean dentro de la base de datos....pero ahora viene el tema del backup/restore en caso de que se quieran ejecutar estos procesos a las tablas del nuevo sistema o del que esta en producción, se podrá solo hacer respaldo de algunas tablas??...excluyendo algunas?? o no se podría?

Lo ideal es que cada sistema tenga su propia base de datos, pero existe un proceso de actualización a 1 tabla que se desea este actualizada también en el nuevo sistema, por ese motivo que consulto lo antes descrito.

Que experiencia tienen uds al respecto?.
Como podría aprovechar los datos de las tablas de producción, en el nuevo sistema?

Espero haberme explicado correctamente, saludos y gracias por su tiempo.

Casimiro Notevi 07-09-2021 19:10:00

Si no he entendido mal, el nuevo software con su base de datos BD1 necesita leer datos de una tabla de otra BD2.
Puedes hacerlo abriendo otra conexión.
Tienes tus componentes de base de datos BD1, de transacciones TR1, dataset QR1, etc.
Y al mismo tiempo puedes tener un data module DM2, con un BD2, un TR2 y un QR2, etc. para acceder a los datos de la otra BD2

mRoman 07-09-2021 19:32:17

Cita:

Empezado por Casimiro Notevi (Mensaje 542670)
Si no he entendido mal, el nuevo software con su base de datos BD1 necesita leer datos de una tabla de otra BD2.
Puedes hacerlo abriendo otra conexión.
Tienes tus componentes de base de datos BD1, de transacciones TR1, dataset QR1, etc.
Y al mismo tiempo puedes tener un data module DM2, con un BD2, un TR2 y un QR2, etc. para acceder a los datos de la otra BD2

Ok, gracias Casimiro.

y las consultas como serián?... from bd1.tabla1.campo1=bd2.tabla2.campo2 ??, algo asi?.

Casimiro Notevi 07-09-2021 20:07:22

No, tendrías que consultar una BD, y con los datos extraídos hacer la consulta a la otra BD.
Aunque ahora que lo dices, creo haber leido en las especificaciones de la última versión de firebird que se puede hacer algo como comentas.
Tengo que revisarlo, hablo de memoria y puede que esté confundido con otra cosa.

Casimiro Notevi 07-09-2021 20:13:34

De todas formas no sé si has probado el "execute statement", lo de lento es relativo, haz una prueba por si te sirve.

manelb 07-09-2021 20:35:50

No sé si sería una opción, pero algunos componentes de acceso a datos permiten realizar consultas sobre la BD y a continuación ejecutar consultas sql sobre este primer resultado.
Lo utilice hace un tiempo en un proceso un tanto particular con Firedac

Contula_BD1=
Código SQL [-]
Select * from TablaX join TablaY on X.id=Y.id
Contula_BD2=
Código SQL [-]
Select * from TablaX join TablaY on X.id=Y.id

El resultado de las dos primeras consultas se utiliza como tablas para la consulta final
Consulta_Final=
Código SQL [-]
Select * from Contula_BD1 join Contula_BD2 on (.......)

Saludos ...

mRoman 07-09-2021 21:56:20

Cita:

Empezado por Casimiro Notevi (Mensaje 542675)
De todas formas no sé si has probado el "execute statement", lo de lento es relativo, haz una prueba por si te sirve.

Si...ahorita estoy en fase de investigación q conviene mas...si cada quien con su base de datos y hacer las consultas como me habias comentado o crear las tablas en la base q ya tengo en producción....pero aqui me brinca el tema de los respaldos, cuando se desee bajar un respaldo de cualquier de los 2 sistemas, me afectara a lo ya realizado en el otro sistema....

Gracias Casimiro. Sigo valorando.

Casimiro Notevi 08-09-2021 09:50:52

Cita:

Empezado por mRoman (Mensaje 542678)
Si...ahorita estoy en fase de investigación q conviene mas...si cada quien con su base de datos y hacer las consultas como me habias comentado o crear las tablas en la base q ya tengo en producción....pero aqui me brinca el tema de los respaldos, cuando se desee bajar un respaldo de cualquier de los 2 sistemas, me afectara a lo ya realizado en el otro sistema....
Gracias Casimiro. Sigo valorando.

No he entendido lo que planteas, supongo que usas nbackup, y es independiente a cada base de datos, obviamente. Supongo que no es eso lo que preguntas.

ASAPLTDA 08-09-2021 15:54:33

leer bases de datos heterogeneas o diferentes
 
hola, no te puedo apoyar mucho porque lo hice hace mucho tiempo pero funciona leyendo datos de dos tablas firebird o una firebird y una por ejemplo sqlserver usa localsql en 10.3

https://docwiki.embarcadero.com/RADS...l_SQL_(FireDAC)

Luis F. Orjuela 08-09-2021 16:54:53

Yo en Delphi 10.3 utilizo los componentes FIREDAC, con ellos puedo atacar (consultar) diferentes motores de BD, y mejor aún puedo utilizar una característica propia que tiene esos componentes que es una especie de puente entre diferentes motores de DB utilizando sqlite en local, es decir, puedo hacer por ejemplo un "select join" entre tablas de diferentes bases de datos. Es una maravilla.

Pero como dice Casimiro, se deben crear tantas conexiones de DB como Bases de Datos tengas que atacar...

Yo en estos momentos tengo un sistema que trabaja contra SQL Server, Firebird y SQLite; haciendo consultas con inner join, left join entre las diferentes tablas de las diferentes bases de datos.

En cuanto a los respaldos (backups), pues cada Base de Datos por separado tiene su propio plan de mantenimiento (backup / restore). Es tu obligación saber qué tabla de qué base de datos deseas restaurar, para así solicitarlo al DB Manager que haga esta tarea sobre esa base de datos....

Saludos desde BOGOTA - COLOMBIA

mRoman 08-09-2021 17:41:41

Cita:

Casimiro
No he entendido lo que planteas, supongo que usas nbackup, y es independiente a cada base de datos, obviamente. Supongo que no es eso lo que preguntas.
A lo q me refiero es que si las tablas del sistema nuevo las creo en la base de datos que ya tengo, como le haré para cuando se quiera bajar las tablas del sistema nuevo o del q esta corriendo. Actualmente no uso ninguna aplicación como GBAK para los respaldos -sé que no es muy profesional no usarlo-, lo q hago es respaldar el archivo .FDB completo, tengo un soft (CobianBackup) para realizar la copia del archivo y hasta el momento me ha funcionado, sin problema.

Cobian lo uso porque los respaldos los puedo programar por dias de la semana y a una hora determinada....la verdad es muy cómodo, solo reviso q se hayan hecho los respaldos, en caso de que no, los ejecuto manualmente.

No conozco bien GBAK, pero talvez también se pueda programar los respaldos (Diario, Semanal, Mensual, x Hora especifica, Full, Diferencial, etc.) de manera automática.

Saludos.

mRoman 08-09-2021 17:48:34

Cita:

Empezado por Luis F. Orjuela (Mensaje 542701)
Yo en Delphi 10.3 utilizo los componentes FIREDAC, con ellos puedo atacar (consultar) diferentes motores de BD, y mejor aún puedo utilizar una característica propia que tiene esos componentes que es una especie de puente entre diferentes motores de DB utilizando sqlite en local, es decir, puedo hacer por ejemplo un "select join" entre tablas de diferentes bases de datos. Es una maravilla.

Pero como dice Casimiro, se deben crear tantas conexiones de DB como Bases de Datos tengas que atacar...

Yo en estos momentos tengo un sistema que trabaja contra SQL Server, Firebird y SQLite; haciendo consultas con inner join, left join entre las diferentes tablas de las diferentes bases de datos.

En cuanto a los respaldos (backups), pues cada Base de Datos por separado tiene su propio plan de mantenimiento (backup / restore). Es tu obligación saber qué tabla de qué base de datos deseas restaurar, para así solicitarlo al DB Manager que haga esta tarea sobre esa base de datos....

Saludos desde BOGOTA - COLOMBIA

Me parece buena opción....la voy a analizar.

mamcx 08-09-2021 17:50:41

Asi como dices, lo mas obvio es que simplemente haces backup en ambas BD y listo.

La otra, es que ejecutes un backup (parcial) en la de los datos externos (eso tocaria manualmente con SQL y exportar datos), o mantener un servicio que constantemente copie los datos a la BD de base y asi es 1 backup solo.

mRoman 08-09-2021 17:51:28

Cita:

Empezado por ASAPLTDA (Mensaje 542694)
hola, no te puedo apoyar mucho porque lo hice hace mucho tiempo pero funciona leyendo datos de dos tablas firebird o una firebird y una por ejemplo sqlserver usa localsql en 10.3

https://docwiki.embarcadero.com/RADS...l_SQL_(FireDAC)

Trate de seguir el link, pero no tiene información, de todas maneras gracias.

Casimiro Notevi 08-09-2021 17:53:21

Cita:

Empezado por mRoman (Mensaje 542704)
tengo un soft (CobianBackup) para realizar la copia del archivo y hasta el momento me ha funcionado, sin problema.

Pero antes tienes que hacer un shutdown de la base de datos para que no haya ninguna conexión abierta.
Si no lo haces así, ten por seguro que te llevarás una sorpresa el día que necesites recuperar un backup.

Con nbackup del firebird puedes hacer los backups con todo el mundo conectado y trabajando, pues hace un backup justo del momento, como una transacción más.

mRoman 08-09-2021 19:44:55

Cita:

Empezado por Casimiro Notevi (Mensaje 542708)
Pero antes tienes que hacer un shutdown de la base de datos para que no haya ninguna conexión abierta.
Si no lo haces así, ten por seguro que te llevarás una sorpresa el día que necesites recuperar un backup.

Con nbackup del firebird puedes hacer los backups con todo el mundo conectado y trabajando, pues hace un backup justo del momento, como una transacción más.

Lo de hacer shutdown, la verdad no lo hago. El proceso siempre se ejecuta a las 3 a.m., donde los usuarios, a esa hora, no están conectados. Durante el proceso, los usuarios no se pueden conectar...ya hice una prueba. Y si están conectados al sistema, el proceso de respaldo no se ejecuta, marca error ya que el archivo esta siendo ocupado. Pero sin duda es algo que debo tomar en cuenta...lo del shutdown; porque siempre hay una primera vez!.

Suena interesante el nBackup

Gracias Casimiro.


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

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