Test-Datenbank aktuell halten

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Test-Datenbank aktuell halten

Beitrag von Jan »

Ich habe auf dem ADS des Kunden drei DD eingerichtet: Das Produktive, eines zum Testen und Üben für die Mitabreiter, und eines für die Entwicklung. Die liegen alle parallel in eigenen Unterverzeichnissen.

Manchmal ist es erforderlich, das ich ich Daten aus dem produktiven DD in das Entwicklungssystem übertrage, um mit den aktuellen Daten etwas zu testen. Das war mit FOXCDX einfach - einfach rüber kopieren. Im ADS ist das aber nicht mehr möglich. Alte Dateien aus dem DD entfernen, aktuelle Dateien kopieren, diese neu im DD registrieren, und alle Indizee neu aufbauen (was alleine ca. 30 Minuten braucht). Das ist also nichts für "mal eben schnell".

Gibt es irgend eine Möglichkeit, den Datenbestand direkt oder zumindest einfacher und schneller aus einem DD in ein anderes DD zu übernehmen?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 139
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch
Hat sich bedankt: 5 Mal

Re: Test-Datenbank aktuell halten

Beitrag von Schubi »

Hallo Jan,

im Server das "no-nexclusive proprietary locking" einschalten, dann kannst du ganz normal die DBFs vom Arbeits-Ordner in deinen Test-Ordner kopieren. (möglichst nicht umgekehrt :D )
Das Format der Tabellen und Indizes muss natürlich 100%ig dem der ersetzten DBFs entsprechen, sonst macht das Dictionary Ärger.
Und es geht nur mit DBF, in ADTs ist glaube ich die Dictionary-Zuordnung im Header.
Grüße Steffen
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von brandelh »

Ich würde dem Server nicht ins Handwerk pfuschen, warum nicht eine kleine EXE deides Öffnet und umkopiert ?
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von UliTs »

brandelh hat geschrieben:Ich würde dem Server nicht ins Handwerk pfuschen, warum nicht eine kleine EXE deides Öffnet und umkopiert ?
Die Idee finde ich prinzipiell gut ist aber mit der ADSDBE vermutlich nicht schnell...
Handelt es sich bei den DD um "freie" DDs, dass heisst, Du kannst auch weiterhin parallel nativ auf die DBFs zugreifen?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von brandelh »

Das wird ja nicht täglich gemacht.

Bei unserer Großrechneranwendung wird z.B. auf Anforderung (Job startet über Nacht) oder zu fixen Terminen die Testumgebung auf die Daten des Hauptsystems gesetzt.

Sooo groß werden die Daten bei Jan sicher nicht sein, dass ein Servertask die Daten nicht kopieren könnte oder ?

Eventuell gibt es diese snapshot funktion aber auch in der ADS.
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von UliTs »

brandelh hat geschrieben:Sooo groß werden die Daten bei Jan sicher nicht sein, dass ein Servertask die Daten nicht kopieren könnte oder ?

Eventuell gibt es diese snapshot funktion aber auch in der ADS.
Was ich meinte, ist, dass mit der ADSDBE das nicht so einfach durch den ADS zu kopieren ist.
Alternativ könnte man mit dem ARC ein Backup durchführen und selbiges in der Testumgebung wieder einspielen (dabei werden aber alle Tabellen gesichert und beim wieder einspielen alle Indizes neu aufgebaut).
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von nightcrawler »

Wenn es u das Umkopieren von Daten geht, kannst Du auch einen Link anlegen und die Daten holen, zB in der TEST-DB:

Code: Alles auswählen

EXECUTE PROCEDURE sp_CreateLink('produktiv','..\proddir\db.add',true,false,false,'meinuser','meinpasswort');
Dann kannst Du die Daten von der anderen DB holen:

Code: Alles auswählen

insert into meinetabelle select * from produktiv.meinetabelle
Falls Du die Test- mit der Produktiv abgleichen musst, kannst Du auch über den MERGE-Befehl gehen (siehe SQL Hilfe)
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von UliTs »

Cool! Danke, Joachim.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von Jan »

Hallo,

Danke für die vielen Ideen.

Es geht darum, das wir drei Datenbestände haben. Die sind sauber in drei verschiedenen Verzeichnissen mit jeweils eigenem DD agelegt, also strikt getrennt. Der Zugriff ist ausschließlich über den ADS gestattet. Ab und an haben die im produktiven Betrieb Probleme mit bestimmten Daten. Um das dann reproduzieren zu können und mal im Debugger drüber gehen zu können habe ich mir vor der Umstellung die betreffenden dbf einfach mitsamt den betreffeneden fpt und cdx in mein Entwicklungsverzeichnis rübergezogen. Was jetzt halt so einfach vermutlich nicht mehr gehen könnte. Die Datenstruktur ist definitiv die gleiche. Nur der Inhalt der Sätze und die Anzahl der Sätze ist unterschiedlich.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von UliTs »

Hallo Jan,

dann ist ja Joachim's Vorschlag die perfekte Lösung für Dich!
Da in den Data Dictionaries die Pfade gespeichert sind, benötigst du bei den Befehlen von Joachim die Pfade überhaupt nicht. Ich glaube, einfacher geht es nicht, einzelne Tabellen (und damit auch automatisch die zugehörigen Indizes) zu aktualisieren.
Als Test kannst du die Befehle von Joachim im Data Architecten (ARC) ausprobieren.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von Jan »

Hallo Joachim,

gerade bin ich endlich dazu gekommen, Deinen Code auszuprobieren. Mal abgesehen davon das der mir erstmal Fehlermeldungen ausgeworfen hat, das er die meinetabelle.adt nicht gefunden hat (ich hab ja schließlich dbf, nicht adt), hat das sehr schön geklappt. Danke dafür.

Aber: Leider kopiert der mir nur fehlende Sätze rüber. Das ist eine gute Sache. Ich brauch aber ansich was anderes: Hinterher müssen beide Seiten gleich sein. Also neue Sätze hinzufügen, gelöschte Sätze entfernen, geänderte Sätze updaten. Wobei wirklich wichtig mir nur der erste und der dritte Punkt wären. Ginge das mit update statt insert?

Merge dürfte vermutlich eher nicht gehen. Die Daten im produktiven Bereich dürfen ja in keinem Fall irgendwie verändert werden. Nur die in der Entwicklungsumgebung. Aber vielleicht versteh ich da die Merge-Anweisung auch nur falsch ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von UliTs »

Hallo Jan,

toll, dass Du es geschafft hast, mit dbf-Tabellen statt adt-Tabellen zu arbeiten und Joachim's Code anzupassen. :D

Natürlich ist Merge der richtige Befehl. Hier ein Auszug aus der Dokumentation dazu:
  • Remarks

    The MERGE statement attempts to match each record of the second table with one or more records of the first table. For each matching record found in the first table, an UPDATE on the record is performed using the UPDATE specification. If no matching record is found, an INSERT into the first table is performed using the INSERT specification. If the UPDATE specification is not defined, no action will be taken when a match occurs. Likewise if the INSERT specification is not defined, no action will be taken when no matches occur. Note that at least one of the two specifications must be defined.

    If the USING clause is not defined, the first table is either updated or appended to using the values specified in the UPDATE and INSERT specifications. This use of MERGE emulates the behavior of an UPSERT statement.

    For the best MERGE performance, make sure the search condition is fully optimized by using the SQL Execution Plan.

    The WITH DELETE and WITH RECALL clauses can be used to RECALL or DELETE a record during an update or insert a deleted record. This functionality only applies to DBF tables.
Probiere es einfach und wenn Du Probleme hast, zeig Deinen Code. 8)

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von Jan »

UliTs hat geschrieben:Hallo Jan,

toll, dass Du es geschafft hast, mit dbf-Tabellen statt adt-Tabellen zu arbeiten und Joachim's Code anzupassen. :D Uli
Uli,

lese ich da zwischen den Zeilen ein ganz kleines bisschen Ironie???

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Test-Datenbank aktuell halten

Beitrag von Manfred »

ja, so isser der Elektrolurch. :lol:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von nightcrawler »

Jan hat geschrieben:...gelöschte Sätze entfernen...

Code: Alles auswählen

DELETE FROM [meinetabelle] WHERE ID NOT IN (SELECT ID FROM [produktiv.meinetabelle])
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von brandelh »

Ich würde probieren ob das Löschen der Testdaten und anschließende komplette Kopieren nicht schneller ist als das (für die Festplatte) mühsame suchen nach Änderungen.
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Test-Datenbank aktuell halten

Beitrag von UliTs »

brandelh hat geschrieben:Ich würde probieren ob das Löschen der Testdaten und anschließende komplette Kopieren nicht schneller ist als das (für die Festplatte) mühsame suchen nach Änderungen.
Nein Hubert, dass ist beim ADS definitiv nicht der Fall :D .
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten