Estamos a punto de realizar pruebas una al lado de la otra para comparar un sistema heredado con una nueva versión brillante. Tenemos una tabla de base de datos Oracle, A, que almacena datos para el sistema heredado, y una tabla equivalente, B, que almacena datos para el nuevo sistema, por lo que durante la prueba, la base de datos se desnormaliza. (Además, el sistema heredado y la tabla A son fijos, no se permiten cambios)Mantener las tablas sincronizadas en Oracle
Lo que quiero hacer es permitir que las operaciones DML infrecuentes en A se propaguen a B, y viceversa. Empecé con un par de factores desencadenantes para hacer esto, pero di con el problema obvio de que cuando se ejecutan los desencadenantes, las tablas están mutando y se produce una excepción.
¿Existe una forma estándar de manejar este problema? He leído diferentes informes sobre si es o no el uso de DBMS_SCHEDULER es el camino a seguir ...
Gracias,
Andy
Actualización: he terminado rajándose del conjunto problema y se aseguró de que todos los procedimientos almacenados que actualizan A, también actualicen B, y viceversa.
He marcado la respuesta de Quassnoi como aceptada, porque seguiría sus sugerencias si tuviera el mismo problema en el futuro.
He marcado la respuesta de JosephStyon, porque brevemente hice funcionar las cosas agregando dos disparadores de nivel de instrucción de inserción/actualización en las tablas A y B, luego haciendo su procedimiento de fusión usando A o B como la tabla maestra, dependiendo de disparador se ejecutó (aunque primero verifiqué que la tabla objetivo se cambiaría por la combinación, obteniendo si no).
@Andy: si su aplicación heredada usa procedimientos almacenados para actualizar las tablas, entonces, por el amor de Dios, simplemente ponga su lógica en los procedimientos, ya que es exactamente como debería ser. Mis consejos son buenos solo para las aplicaciones poco desarrolladas que emiten declaraciones DML (en lugar de llamar a los procedimientos) para actualizar los datos. – Quassnoi