PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL Tabellen bzw Datenbanken abgleichen.


tsaG
2008-03-25, 12:30:30
Hi,

Ich habe 2 Server, auf Server a liegen die Stamm DBs, welche Tabellen enthalten die auf Server b 1:1 Synchronisiert werden sollen.

Server b soll daher alle 10 oder 20 Sek bei Server a Nachfragen ob es änderungen in den Tabellen gibt und diese dann abgleichen.

Das Zeitintervall ist kein Problem, das geht mit der Event funktion von Navicat ganz einfach, jetzt brauche ich halt nur den passenden Query der die Tabellen abgleicht.

Ich kann auch pro Tabelle einen Query bzw ein Event benutzen, kein Problem.

Also die Quell DBs heissen zb

Char
davon soll die Tabelle characters Snychronisiert werden

die andere DB heist logon
dort soll die Tabelle accounts Snychronisiert werden

Und diese sollen auf Server b auch 1:1 entstehen.

Dabei sollen die Daten auf Server a (also die Haupt DB) nicht verändert werden.

So, da ich in SQL eine Totale Niete bin kann ich auch keine Vorschläge oder Anregungen geben :D Wenn ihr fragen habt, fragt einfach :)

Tommes
2008-03-25, 12:36:22
http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx

Das hört sich gut an :)

The_Invisible
2008-03-25, 12:39:59
dafür gibt es ein feature names replikation -> http://dev.mysql.com/doc/refman/5.1/de/replication.html

sollte eigentlich jede größere db bieten.

mfg

tsaG
2008-03-25, 13:19:17
Hi, ja das mit der replikation habe ich auch schon entdeckt, leider ist das jedoch nicht möglich da der Server nicht heruntergefahren werden kann (auch keinen kleinen Moment) ;(. Daher bleibt leider nurnoch ein Query

Danke Tommes
SELECT MIN(TableName) as TableName, ID, COL1, COL2, COL3 ...

FROM

(

SELECT 'Table A' as TableName, A.ID, A.COL1, A.COL2, A.COL3, ...

FROM A

UNION ALL

SELECT 'Table B' as TableName, B.ID, B.COL1, B.COl2, B.COL3, ...

FROM B

) tmp

GROUP BY ID, COL1, COL2, COL3 ...

HAVING COUNT(*) = 1

ORDER BY ID
Ist ja schon gut, jedoch wird dort eine Tabelle der gleichen Datenbank synchronisiert, was ich brauche ist ja 2 Stufen weiter.

1. Es geht über verschiedene Datenbanken.
2. Es geht über verschiedene Verbindungen. Also müsste man sich mit einem User und Passwort anmelden.

Wenn ich gerade darüber nachdenke... ist das überhaupt mit einem Query möglich?

Da muss ich mir wohl oder übel doch noch einmal die Replika funktion anschauen...

daflow
2008-03-25, 14:03:14
Also wie schon gesagt, für sowas sollten eigentlich DBMS-interne Mittel verwendet werden... für gewöhnlich wird das darüber imlementiert, dass alle transaktionlogs (in denen alle Datenbankänderungen festgehalten werden) auf die andere DB bertragen werden...
Seis drum, über Sql Wege geht das nur u:U. d.h. es kommt auf die Datenbankengine an, mit was für einer DB-Engine arbeiteste du? Falls BS-Skripte o.ä. notwendig sind, auf welchen BS laufen die Datenbanken?