Ik zit met het volgende probleem. Ik ontwikkel een nieuw systeem wat voor een deel van dezelfde data gebruik maakt als een legacy systeem. Om dit goed te laten verlopen ontwikkel ik een synchronisatie module die bideirectioneel is. De situatie is alsvolgt:
1. het nieuwe systeem maakt gebruik van een sql server 2008 database en heeft op iedere table een history table die automatisch wordt gevuld dmv triggers (audit trail) hiermee kan de sync module precies zien wat er aan de nieuwe kant veranderd is.
2. het legacy systeem maakt gebruik van een ms access database en het systeem zelf houdt geen enkele wijzigingen in de database bij, op een datetime na. de db heeft een 2003 indeling en kant niet worden geupdate naar een nieuwere indeling.
3. de sync module checkt voor wijzigingen (create,update en delete) aan beide kanten en maakt de data aan weerszijde up to date. deze module heeft een eigen sql server 2008 database die koppeltabellen bevat voor de id's van de objecten van de legacy db en nieuwe db.
Voor create en update is er aan beide kanten geen probleem aangezien er in de nieuwe situatie een audit trail beschikbaar is en in de oude situatie een modify datetime in iedere table wordt bijgehouden. Echter voor de delete actions ontstaat er een probleem aan de legacy zijde omdat hier in de database niet wordt bijgehouden wat er verwijderd is. Aan de nieuwe zijde is ook het deleten geen probleem door de audit trail.
De eerste oplossing waar ik op kwam is om de id's van de koppeltabellen in de sync module te gaan vergelijken met de id's die in de tables van de legacy tables staan. wanneer er een id in de koppeltabel voorkomt maar niet in de legacy db dan is dit object dus verwijderd uit de legacy db. Dit werkt op zich perfect maar is natuurlijk verre van optimaal wanneer je een database hebt met miljoen plus records. 1 sync moment zou dan uren duren. Dus dit is uiteindelijk geen optie.
Ik ben toen verder gaan zoeken en kwam uit op een idee om triggers in de legacy db te bouwen zodat daar ook een audit trail zou ontstaan, ik zou me hier dan beperken tot 1 extra table waarin id's en tablename zou komen staan van verwijderde objecten. Maar dat kan dus niet in access!! Schijnbaar heeft access geen triggers en alle voorbeelden van VBA projecten om audit trails te maken werken alleen vanuit forms in access. En dat laatste wordt niet gebruikt, de legacy app is een delphi application die met datacomponenten gebruik maakt van een access db.
mijn vraag is dus eigenlijk heeft iemand een idee of dit toch wel kan? of een andere goede oplossing of idee om te weten te komen welke objecten er uit de legacy db zijn verwijderd. Er kunnen absoluut geen aanpassingen in de legacy app worden gemaakt.
Alle input is meer dan welkom
1. het nieuwe systeem maakt gebruik van een sql server 2008 database en heeft op iedere table een history table die automatisch wordt gevuld dmv triggers (audit trail) hiermee kan de sync module precies zien wat er aan de nieuwe kant veranderd is.
2. het legacy systeem maakt gebruik van een ms access database en het systeem zelf houdt geen enkele wijzigingen in de database bij, op een datetime na. de db heeft een 2003 indeling en kant niet worden geupdate naar een nieuwere indeling.
3. de sync module checkt voor wijzigingen (create,update en delete) aan beide kanten en maakt de data aan weerszijde up to date. deze module heeft een eigen sql server 2008 database die koppeltabellen bevat voor de id's van de objecten van de legacy db en nieuwe db.
Voor create en update is er aan beide kanten geen probleem aangezien er in de nieuwe situatie een audit trail beschikbaar is en in de oude situatie een modify datetime in iedere table wordt bijgehouden. Echter voor de delete actions ontstaat er een probleem aan de legacy zijde omdat hier in de database niet wordt bijgehouden wat er verwijderd is. Aan de nieuwe zijde is ook het deleten geen probleem door de audit trail.
De eerste oplossing waar ik op kwam is om de id's van de koppeltabellen in de sync module te gaan vergelijken met de id's die in de tables van de legacy tables staan. wanneer er een id in de koppeltabel voorkomt maar niet in de legacy db dan is dit object dus verwijderd uit de legacy db. Dit werkt op zich perfect maar is natuurlijk verre van optimaal wanneer je een database hebt met miljoen plus records. 1 sync moment zou dan uren duren. Dus dit is uiteindelijk geen optie.
Ik ben toen verder gaan zoeken en kwam uit op een idee om triggers in de legacy db te bouwen zodat daar ook een audit trail zou ontstaan, ik zou me hier dan beperken tot 1 extra table waarin id's en tablename zou komen staan van verwijderde objecten. Maar dat kan dus niet in access!! Schijnbaar heeft access geen triggers en alle voorbeelden van VBA projecten om audit trails te maken werken alleen vanuit forms in access. En dat laatste wordt niet gebruikt, de legacy app is een delphi application die met datacomponenten gebruik maakt van een access db.
mijn vraag is dus eigenlijk heeft iemand een idee of dit toch wel kan? of een andere goede oplossing of idee om te weten te komen welke objecten er uit de legacy db zijn verwijderd. Er kunnen absoluut geen aanpassingen in de legacy app worden gemaakt.
Alle input is meer dan welkom