Ver Mensaje Individual
  #1  
Antiguo 05-04-2021
CyberManolo CyberManolo is offline
Miembro
 
Registrado: oct 2018
Posts: 24
Reputación: 0
CyberManolo Va por buen camino
Replicación con Firebird 4

Hola de nuevo.

Estoy intentando montar un ejemplo de replicación asíncrona (o si no hay más remedio, síncrona), maestro-esclavo con firebird 4, que al parecer es nativa y transaccional. No encuentro documentación y sobre todo ejemplos de como montarla.

Probé con Firebird 3.0 e IBReplicator, que se basa en la replicación de tablas, pero encontré inconvenientes graves como el siguiente:

Supongamos una tabla CABECERAS_FACTURAS que tiene un campo CONTABILIZADA de manera que cuando contabilizamos esa factura, genera el asiento contable correspondiente en otra tabla ASIENTOS y un trigger de dicha tabla de ASIENTOS pone el campo CONTABLIZADA=1 en la tabla de cabeceras y los triggers de la tabla CABECERAS_FACTURAS, a partir de entocnes ya impiden que dicha factura se pueda modificar. Esto ocurre casi de inmediato a la creación de la factura.

¿Que pasa cuando la replicación es asíncrona (pongamos por ejemplo un periodo de 5 minutos) e intenta replicar el proceso anterior? pues que cuando copia a la base de datos esclava el registro correspondiente de CABECERAS_FACTURAS, este ya va con el campo CONTABILIZADA=1. Entonces, al insertar el asiento correspondiente en la tabla ASIENTOS, el trigger de esta se encuentra la cabecera de factura ya contabilizada y genera un error, por el cual no se produce la replicación.

Se que alguien me podría decir que es cuestión de cambiar el trigger de la tabla de asientos para que si ve que el campo CONTABILIZADA ya está a 1, no intente cambiarlo. Es decir, replantear toda la base de datos pensando en la replicación. Esto es complicado en una base de datos que tiene más de 500 tablas y miles de triggers.

Mi esperanza era que la replicación de FIREBIRD 4.0 fuera transaccional. Es decir, replicamos en la base de datos réplica las transacciones realizadas en la original y por el mismo orden. Tal vez sea así, pero no encuentro documentación sobre el tema, a lo mejor porque al ser actualmente una Release Candidate, aún no tiene la documentación desarrollada.

Si alguien tiene más conocimientos sobre la replicación en Firebird 4.0 y piensa que se puede resolver el problema expuesto, sin tener que reprogramar todos los procedimientos de la base de datos, podríamos abrir en este hilo u otro, el tema de replicación de bases de datos en Firebird 4.0.

Saludos a todos.
Responder Con Cita