Toon posts:

[java] database synchronisatie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi ik heb twee verschillende database management systemen met verschillende databases (Lotus Domino en MySQL). Nu wil ik sommige databases synchroniseren met elkaar. Dit kan in Domino heel handig met een tooltje dat DECS heet. DECS zorgt er via ODBC voor dat MySQL synchroon blijft met de Domino database.

Nu is het echter zo dat soms de DECS taak er uit klapt. (Vanwege een onbekende reden). Ondertussen veranderd er wel van alles in de Notes database. (Documenten worden verwijderd en toegevoegd). Voordat de DECS taak weer opnieuw opgestart kan worden moeten de databases weer synchroon gemaakt worden. M.a.w. Documenten die in Domino zijn verwijderd moeten ook worden verwijderd in MySQL. DECS kan dit niet zelf. En dus moet dit handmatig of met een applicatie gebeuren.

Ik wil graag voor het laatste kiezen. Ik kan gebruik maken van een JAVA api aan de Domino zijde. Aan de MySQL kant kies ik voor een JDBC driver.

Nu is mijn vraag hoe zou ik het gemakkelijkste de databases kunnen synchroniseren?
Zoals ik er nu over na heb gedacht kan het alleen door alle records in de Domino database te doorlopen en te checken of deze al dan niet bestaat in MySQL.

Dit gaat natuurlijk een lange procedure worden bij een grote database. Kan dit slimmer?

Verwijderd

Ten eerste zou ik uitzoeken waarom dat tooltje eruit klapt. Voor een productiesysteem is het gewoon niet acceptabel om geen reden daarvoor te weten. Ga eens met de supportafdeling van de maker aan de lijn hangen.

Ten tweede is dit op zich wel te doen. Daarbij ga ik er wel vanuit dat nieuwe items alleen in de database van Domino worden aangemaakt, en NIET in de MySQL.

Stappenplan:
1) doe de volgende stappen voor alle te synchroniseren tabellen

2) doe de volgende query op de MySQL database:
code:
1
2
SELECT TabelID
FROM Tabel


3) Zet alle ID's die je nu hebt in een string, gescheiden door komma's, dus zoiets:
code:
1
strIDs = "1,3,6,7,8,1209,231";


4) Doe de volgende query op de database van Domino:
code:
1
2
3
SELECT *
FROM Tabel
WHERE TabelID NOT IN (strIDs)

Nu heb je dus een lijst met records die in een bepaalde tabel WEL in de MySQL database staan maar niet in de database van Domino .

5) Doe een INSERT van alle in de vorige stap geselecteerde records in de database van Domino

6) Herhaal deze stappen voor alle andere tabellen

Zorg wel dat je zeker weet dat tijdens deze synchronisatieslag in geen van beide databases nieuwe records geinsert worden vanuit andere bronnen. Dit betekent dus dat de productiesite even sligelegd moet worden.

HTH :)