AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Zwei Spalten auf zwei Server vergleichen
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Spalten auf zwei Server vergleichen

Ein Thema von Edelfix · begonnen am 27. Feb 2015 · letzter Beitrag vom 4. Mär 2015
Antwort Antwort
Seite 1 von 2  1 2      
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
244 Beiträge
 
Delphi 12 Athens
 
#1

Zwei Spalten auf zwei Server vergleichen

  Alt 27. Feb 2015, 18:02
Datenbank: ADS • Version: 11.9 • Zugriff über: Delphi XE7
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.385 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 27. Feb 2015, 18:19
Zitat:
Deswegen geht UNION leider nicht.
Einige DBMS bieten es an, daß man intern Links, für z.B. Selects, zu anderen Datenbanken auf machen kann ... dann könntest du in einer DB eine StoredProc schreiben, welche die eigenen Daten läd, dazu sich die Daten von der anderen DB und das dann intern vergleicht. (50% weniger traffic und innerhalb der DB sind die eigenen Daten auch schneller geladen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
244 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 27. Feb 2015, 18:30
Wow! Das ging schnell. Ein Forum das wie ein Chatraum funktioniert.

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.385 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 27. Feb 2015, 20:49
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
244 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 28. Feb 2015, 09:18
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.
  Mit Zitat antworten Zitat
RSF

Registriert seit: 13. Mär 2008
155 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 1. Mär 2015, 14:29
Soweit ich ADS kenne gibt es zum Zweck der Synchronisation die Möglichkeit der Replikation.
http://devzone.advantagedatabase.com..._scenarios.htm
Ronald

Geändert von RSF ( 1. Mär 2015 um 14:36 Uhr) Grund: Link geändert
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 1. Mär 2015, 18:56
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.

Das würde heissen daß es wohl schon der richtige Weg ist.
Nein, das ist es nicht. Dort steht nur "multiple Databases". Das funktioniert nur wenn diese von der selben ADS Instanz verwaltet werden.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
684 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 2. Mär 2015, 12:38
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.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
244 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 3. Mär 2015, 15:17
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Zwei Spalten auf zwei Server vergleichen

  Alt 3. Mär 2015, 18:47
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:
  • Einer holt die Daten
  • der andere trägt die Daten ein und vergleicht die Daten per SQL-Statement.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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-2025 by Thomas Breitkreuz