Test-Datenbank aktuell halten
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Test-Datenbank aktuell halten
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Schubi
- Rekursionen-Architekt
- Beiträge: 139
- Registriert: Mi, 05. Okt 2005 15:10
- Wohnort: Wiesloch
- Hat sich bedankt: 5 Mal
Re: Test-Datenbank aktuell halten
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 )
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.
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 )
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
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Test-Datenbank aktuell halten
Ich würde dem Server nicht ins Handwerk pfuschen, warum nicht eine kleine EXE deides Öffnet und umkopiert ?
Gruß
Hubert
Hubert
-
- 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
Die Idee finde ich prinzipiell gut ist aber mit der ADSDBE vermutlich nicht schnell...brandelh hat geschrieben:Ich würde dem Server nicht ins Handwerk pfuschen, warum nicht eine kleine EXE deides Öffnet und umkopiert ?
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
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Test-Datenbank aktuell halten
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.
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
Hubert
-
- 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
Was ich meinte, ist, dass mit der ADSDBE das nicht so einfach durch den ADS zu kopieren ist.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.
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
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- 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
Wenn es u das Umkopieren von Daten geht, kannst Du auch einen Link anlegen und die Daten holen, zB in der TEST-DB:
Dann kannst Du die Daten von der anderen DB holen:
Falls Du die Test- mit der Produktiv abgleichen musst, kannst Du auch über den MERGE-Befehl gehen (siehe SQL Hilfe)
Code: Alles auswählen
EXECUTE PROCEDURE sp_CreateLink('produktiv','..\proddir\db.add',true,false,false,'meinuser','meinpasswort');
Code: Alles auswählen
insert into meinetabelle select * from produktiv.meinetabelle
-
- 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
Cool! Danke, Joachim.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Test-Datenbank aktuell halten
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- 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
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
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
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Test-Datenbank aktuell halten
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- 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
Hallo Jan,
toll, dass Du es geschafft hast, mit dbf-Tabellen statt adt-Tabellen zu arbeiten und Joachim's Code anzupassen.
Natürlich ist Merge der richtige Befehl. Hier ein Auszug aus der Dokumentation dazu:
Uli
toll, dass Du es geschafft hast, mit dbf-Tabellen statt adt-Tabellen zu arbeiten und Joachim's Code anzupassen.
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.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Test-Datenbank aktuell halten
Uli,UliTs hat geschrieben:Hallo Jan,
toll, dass Du es geschafft hast, mit dbf-Tabellen statt adt-Tabellen zu arbeiten und Joachim's Code anzupassen. 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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Test-Datenbank aktuell halten
ja, so isser der Elektrolurch.
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!!
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!!
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- 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
Jan hat geschrieben:...gelöschte Sätze entfernen...
Code: Alles auswählen
DELETE FROM [meinetabelle] WHERE ID NOT IN (SELECT ID FROM [produktiv.meinetabelle])
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Test-Datenbank aktuell halten
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
Hubert
-
- 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
Nein Hubert, dass ist beim ADS definitiv nicht der Fall .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.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück