Das größte Problem dabei sind gelöschte Datensätze. Weil dieser dann auf der anderen Seite existiert und man dann nicht weiß, ob dieser dann gelöscht oder eben aus der anderen
DB übertragen werden soll.
Ich habe soetwas gelöst, indem ich ein Protokoll erstellen lasse. In diesem Protokoll steht, die Tabelle, die Änderung (I, D, U), der Zeitstempel und der PK-Inhalt). Dieses Füllen wird über Trigger realisiert, somit ist es egal, wie man die Daten ändert (per Programm oder direkt in der
DB). Das Sync-Tool schaut sich dann die Logtabelle an und kann dann die nötigen Änderungen durchführen, indem eben die eigentlichen Daten aus den zugehörgen Tabellen geholt und übertragen werden.
Bei diesem Vorgehen gibt es also nur eine Sync-Tabelle und wenn später noch mehr Tabellen syncronisiert werden müssen, so ist nur ein weiterer Trigger nötig.
Edit: Bei erfolgreicher Änderung, kann die zugehörige Protokollzeile gelöscht werden. Somit entsteht kein bleibendes Datenvolumen, nur solange, bis die Syncronisation durchgeführt wurde. Kann mal eine Änderung nicht durchgeführt werden, werde alle weiteren, die mit der nicht durchgeführten Änderung in Verbindung stehen, ebenfalls nicht durchgeführt. Trotzdem sind die Änderungen weiterhin bekannt und können später (bei z.B. Korrektur der
DB-Struktur) durchgeführt werden. Das ist ziemlich wichtig, weil mir das regelmäßig passiert, dass ich mal etwas an der
DB verändere und es garantiert auf der Gegenseite vergesse.