Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Einfache SQL-Abfrage zum synchronisieren

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von m.A.o, 14 April 2017.

  1. m.A.o

    m.A.o Benutzer

    hallo DB-Spezialisten

    ich habe drei Arbeitsplätze, die über VPN überregional verbunden sind. Zum synchronisieren verwende ich folgendes Konstrukt
    SELECT A.AdrNumm as A_ADRNUMM, A.TimStmp as A_TIMSTMP, ;
    B.AdrNumm as B_ADRNUMM, B.TimStmp as B_TIMSTMP, ;
    WHERE A.AdrNumm == B.AdrNumm AND A.TimStmp <> B.TimStmp​
    was ja auch soweit funktioniert
    aber wie müsste die Abfrage lauten, wenn auf einer Seite die "AdrNumm" noch nicht vorhanden ist?

    und bitte haut mich nicht, das ist noch im alten Visual-FoxPro
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Was soll da synchronisiert werden?

    Glaube nicht, daß das funktioniert. Es ist syntaktisch falsch.
     
  3. m.A.o

    m.A.o Benutzer

    eben die geänderten Datenbestände, Schlüssel = AdrNumm und Änderungserkennung der TimStmp


    ok, ich hab die FROM und INTO-Zeilen mal rausgelassen und nur die relevanten Elemente ohne Zerr&Plumps dargestellt

    hier mal der originalcode
     
    Zuletzt bearbeitet: 14 April 2017
  4. BerndB

    BerndB Datenbank-Guru

    Du müsstest dann so etwas machen

    Code:
    INSERT into deineTabelle
    (
    SELECT A.AdrNumm as A_ADRNUMM, A.TimStmp as A_TIMSTMP, ;
    B.AdrNumm as B_ADRNUMM, B.TimStmp as B_TIMSTMP, ;
    WHERE A.AdrNumm == B.AdrNumm AND A.TimStmp <> B.TimStmpwas
    ) AS t
    ON DUPLICATE KEY UPDATE
       AdrNumm=VALUES(A_ADRNUMM), 
      TimStmp= VALUES(A_TIMSTMP),
    und die anderen Felder genau so ...
    
    Damit erreichst du das alle Records die bereits da sind geupdatet werden und alle anderen eingefügt.

    Du kannst aber auch einfach von Percona pt_table_sync nehmen. damit lassen sich einfach per CLI Tabellen oder Datenbanken synchronisieren.

    schau dir mal diese Seite an Download Percona Toolkit
     
  5. m.A.o

    m.A.o Benutzer

    danke für die Antwort, trotz Feiertag :D

    leider kennt FoxPro die clause "ON DUPLICATE KEY" nicht. ist ja leider schon ewas in die tage gekommen und wird seit 2009 von M$ nicht mehr gepflegt.
    das Problem aber ist, dass das Proggie noch ca. 3 Jahre leben muss und sich daher ein umschreiben in modernere Software (~2MJ) nicht in Frage kommt.

    Gibt es eine alternative für nicht vorhandene Daten zu finden?
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Im Jahre 2017 eine Software zu nutzen, die seit 2009, also seit 8 Jahre, tot ist, ist schon etwas, ähm, leichtsinnig, oder?
     
  7. BerndB

    BerndB Datenbank-Guru

    Nur so ein Gedanke:

    Kannst du das Query nicht in eine Stored Procedure packen (eventuell noch etwas verbessert) und diese dann von FoxPro aufrufen.

    Wenn du willst können wir gerne auch mal telefonieren und dann das Ergebnis Posten. Dabei kann man einfacher die vorhandenen Möglichkeiten abtesten.
     
  8. BerndB

    BerndB Datenbank-Guru

    Dem kann ich nur zustimmen, so sieht aber die Realität aus.

    Schöne Ostertage

    Bernd
     
  9. m.A.o

    m.A.o Benutzer

    naja, wenn man bedenkt, dass diese Software schon viel durchgemacht hat....

    Urform wurde Mitte der 80'er mit DBASE/CLIPPER auf CP/M geschrieben..... davor war es ein zusammengewürfeltes Zeuchs aus Fortran, PL-M und dazwischen Assembler... später kam Noch Borland (TP) ins spiel

    2001-2003 hab ich dann den ganzen Kram in VFP6 zusammengefasst und später unter VFP9 installiert.

    soviel zur Geschichte...
     
  10. akretschmer

    akretschmer Datenbank-Guru

    das macht es nicht besser.
     
  11. BerndB

    BerndB Datenbank-Guru

    Hast du meinen Vorschlag mit der Stored Procedur gesehen ?
     
  12. m.A.o

    m.A.o Benutzer

    ja, aber ihc hab mittlerweile einen anderen Mechanismus ausgraben können.
    bei Kaltstart wird erstmal alles von den anderen Servern geholt. was ja eh schon immer so war.
    daher kann ich mir den Zeitstempel der Partnerdatei VOR dem Erstladen merken. und wenn sich dieser Ändert nur noch die WHERE-Abfrage auf
    Code:
    ..... ;
    WHERE TIMSTMP >= FDATE(Partnerdatei,1) ;
    .....
    
    reduzieren. so hab ich auch alle neu eingetragenen Datensätze.

    auf alle fälle dank für die Vorschläge

    Das ist klar, aber soll man wirklich das ganze Projekt wegen 2-einhalb Jahren zu 90% neu schreiben, wo es dann definitiv ausgemustert wird..... Dazu sind wirklich keine Finanzen mehr vorhanden
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden