![]() |
Datenbank: ADS • Version: 11.9 • Zugriff über: Delphi XE7
Zwei Spalten auf zwei Server vergleichen
Hallo,
es geht um ein Überwachung Tool. Wir versuchen zwei Advantage Database Server die an verschiedenen Orten stehen über VPN synchron zu halten. Leider gibt es immer wieder Abweichungen. Um das zu überwachen möchten wir ein Überwachung Tool jede Nacht laufen lassen das per Email meldet wenn die Datenbanken nicht gleich sind. Ich hatte mir gedacht das ich mit einer Query die Spalte mit den ID´s aus der ersten Datenbank hole und mit einer zweiten Query dasselbe aus der anderen Datenbank. Danach beide Ergebnisse mit einer while Query.eof Schleife vergleiche. Da es aber über 10.000 Einträge sind dauert das lange und es sind viele Tabellen. Hat jemand eine Idee wie man das beschleunigen oder geschickter anstellen kann? So etwas wie zwischen speichern und mit einer dritten Query und Where Filter nur die Abweichungen auslesen oder so etwas... Weil es unterschiedliche Server sind brauche ich auch zwei verschiedene Server Verbindungen. Deswegen geht UNION leider nicht. Bin für Vorschläge dankbar. |
AW: Zwei Spalten auf zwei Server vergleichen
Zitat:
|
AW: Zwei Spalten auf zwei Server vergleichen
Wow! Das ging schnell. Ein Forum das wie ein Chatraum funktioniert. :-D
Mit dem Advantage Database Architekten (bei liegende Verwaltunssoftware) kann man tatsächlich über "Links" weitere Datenbanken anhängen. Funktioniert leider nicht mit Datenbanken die über eine IP Adresse, Port, Username, Passwort verbunden werden müssen. Oder wir haben dabei was falsch gemacht. Als neue Dictionary Connection können wir den externen Remote Server als neue Datenbank einrichten und connecten aber über "Links" an eine local existierende DB anhängen klappt leider nicht. Danke für den Vorschlag. |
AW: Zwei Spalten auf zwei Server vergleichen
Wie das mit den Links genau funktionier, da kann ich nicht helfen.
Aber wenn es nur an der IP liegt, dann könntet ihr es eventuell via VPN erledigen, also ein Tunnel zum anderen Server und die DB ist dann lokal über einen Port erreichbar. |
AW: Zwei Spalten auf zwei Server vergleichen
Ein auszug aus der Hilfe:
Advantage Data Dictionaries can be linked so that tables from multiple databases may be queried in the same SQL statement. The links are created using either the AdsDDCreateLink API in ACE or the sp_CreateLink stored procedure in SQL. For example, suppose a link named DB2 is created in the database A to reference database B, a connection made to database A can then reference the tables in database B using the dot notation – "SELECT * FROM DB2.table1". Tables in the linked data dictionary can be used in an SQL statement but they cannot be opened directly using the ACE API. However, this limitation can be worked around by defining a view that references the linked table. For example, given the same set up as the previous example, a view named "DB2_TABLE1" may be defined as "SELECT * FROM DB2.table1". The view DB2_TABLE1 can be opened directly using the ACE API and all of the navigational commands will be available on this view. The only limitation is that the table cannot be opened exclusively and commands that require exclusive access to the table are not available. Das würde heissen daß es wohl schon der richtige Weg ist. Der zweite Server ist über VPN verbunden. Da es bis jetzt bei jedem Versuch den externen Server so zu verbinden zur Fehlemeldungen kamm dachte ich das es generell nicht geht. Ich muss Montag noch einmal die Fehlermeldungen genauer betrachten. |
AW: Zwei Spalten auf zwei Server vergleichen
Soweit ich ADS kenne gibt es zum Zweck der Synchronisation die Möglichkeit der Replikation.
![]() |
AW: Zwei Spalten auf zwei Server vergleichen
Zitat:
|
AW: Zwei Spalten auf zwei Server vergleichen
Hallo
Keine Ahnung ob das hilft aber ich würde als erstes auf beiden servern die Daten jeder Tabelle in eine Text Datei schreiben und mir einen Hash Wert erstellen lassen ==> Das kann super simple vergleichen . mfg Reinhold |
AW: Zwei Spalten auf zwei Server vergleichen
Zitat:
Wie (mit was) Synchronisiert ihr die zwei Datenbanken. ? |
AW: Zwei Spalten auf zwei Server vergleichen
Zitat:
|
AW: Zwei Spalten auf zwei Server vergleichen
Falls Du nicht die interne Replikation verwenden willst, bliebe noch der Weg über Trigger: auf jede Tabelle Trigger für INSERT, UPDATE und DELETE und die Aktion in einer Schattentabelle speichern (zB rowversion; modtime; username; tablename; action; recordhash). Ein Programm kann dann zB zu beiden Servern verbinden, diese Schattentabellen vergleichen (ab der zuletzt gespeicherten rowversion) und die Aktionen nachfahren, falls der HASH nicht übereinstimmt.
|
AW: Zwei Spalten auf zwei Server vergleichen
Erst einmal Danke für die Beiträge!
Es geht mir nicht um das Synchronisieren der Datenbanken. Ich will nur einmal alle 24h ein Check machen wie eine Art Volkszählung ob alle Datensätze in den Datenbanken synchron sind. Dazu bilde ich eine art Prüfsumme in dem ich jede Tabelle mit RECCOUNT durchzähle und die Ergebnisse jeder Zählung addieren. Die beiden Summen aus den beiden DB werden verglichen und wenn sie nicht gleich sind = Alarm Email an Support. Es funktioniert aktuell aber eben argh langsam und das Abarbeiten nacheinander. Das Anbinden anderer Datenbanken über "Links" scheitert weil wir "Check User Rights" deaktivieren müssten das aber nicht dürfen. Danke für die zahlreichen Vorschläge. @joachimd. Wie ist das mit den Schattentabellen gemeint? Virtuelle Tabellen mit #Tabellenname? Kann ich mit einer Query die aufgelisteten Informationen (zB rowversion; modtime; username; tablename; action; recordhash) abfragen? Wenn ja wie? |
AW: Zwei Spalten auf zwei Server vergleichen
Hol dir doch einfach von dem entfernten Server die Daten in ein ClientDataSet, füge diese Daten in eine temporäre Tabelle auf dem lokalen Server ein und dann vergleichst du ganz gemütlich.
Das jetzt mit der PPL noch gemaxht, dann wird es auch einigermassen fix. Insgsamt laufen da dann 2 Threads parallel:
|
AW: Zwei Spalten auf zwei Server vergleichen
Zitat:
|
AW: Zwei Spalten auf zwei Server vergleichen
Hallo
Warum ist die aktuelle Lösung langsam ? Ich vermute das es daran liegt das dabei die gesamte Datenbank übers Netz muss. Nocheinmal, wenn ich würde nur einen Hash Wert übertragen und vergleichen mfg Reinhold Zitat:
|
AW: Zwei Spalten auf zwei Server vergleichen
Ha ja verstehe. Eine Art Auswerte Tabelle auf jedem Server. Dann braucht man nur die beiden Tabellen auf "ungleich" prüfen.
Genau das auf "ungleich" prüfen dauert. Weil wir dazu beide Tabellen (wenn ungleich) aus beiden Dictionaris holen und beide mit eof und next in den beiden querys Daten Satz nach Daten Satz vorhanden vergleichen. So eine Schleife mit über 10.000 Datnesätzen dauert. Da wir jetzt erst einmal beide Server gerade gezogen haben kommt es nicht mehr so oft zu ungleichen Tabellen daher ist das Problem nicht mehr akut. Vielen Dank. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz