History in Memofeld

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
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

History in Memofeld

Beitrag von Manfred »

Hi,

in meinem übernommenen Projekt wird jede Änderung eines Satzes in ein Memofeld des jeweiligen Satzes gespeichert. Also eine History. Meine Frage jetzt an euch, ist sowas eine vernünftige Lösung, oder wie seht ihr das? Jetzt nur mal so aus Neugier. Irgendwie finde ich diese Idee gar nicht mal so schlecht, als wenn man eine getrennte Tabelle führt und da alles reinschreibt.
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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: History in Memofeld

Beitrag von Tom »

Hallo, Manfred.

Solche Zugriffs- und Aktionsverfolgungen sind, ganz unabhängig davon, wie man sie im Einzelfall ausführt, immer sinnvoll. Es entlastet unseren Support (aber auch die Entwickler) ganz enorm, wenn wir im kritischen Fall eindeutig nachweisen können, dass Löschungen, Änderungen und ähnliches eben nicht "seit dem letzten Update" plötzlich auftreten, sondern wann wie und durch wen nutzerseitig vorgenommen wurden. Wir protokollieren für viele kritische Daten außerdem die vorigen Zustände, so dass sich diese im Zweifelsfall restaurieren lassen. Es gibt zwei Ebenen, nämlich eine sichtbare (allgemeine Aktionsprotokolle, wo auch vor Ort schnell die Ursache für "verschwundene" Daten gefunden werden kann), und eine interne, die der von Dir skizzierten ähnelt. Wir speichern das allerdings nicht in Memofeldern, sondern in Transaktionstabellen. Darin steht, welcher Datensatz in welcher Tabelle geändert wurde, wann und durch wen, was sein voriger Zustand war und welche Funktion im Programm verwendet wurde. Das erleichtert uns auch die Fehlersuche.
Herzlich,
Tom
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: History in Memofeld

Beitrag von Manfred »

Hi Tom,

genau das war meine Frage. Auf den ersten Blick finde ich sowas in einem Memofeld zum Satz irgendwie gut. Allerdings wenn man ein Rollback machen will, dann scheint mir Deine Lösung wohl eher angebrachter zu sein. Meine Frage zielte dahin, generell ein Memofeld des Satzes für sowas zu benutzen. Das erscheint mir schon wieder zu einfach. Gibt es da evtl. Fallstricke, die mir jetzt so auf den ersten Blick nicht auffallen? (als reines Protokoll. Für Rollback etc. gäbe es ja Probleme, wenn der Satz platt ist. Da würde Dein Konzept besser greifen)
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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: History in Memofeld

Beitrag von Tom »

Hallo, Manfred.

Über ein automatisiertes Rollback haben wir lange nachgedacht und viele Möglichkeiten geprüft, bis sich herausgestellt hat, dass die nötigen Aktionen viel zu komplex wären, um sie zu automatisieren, vor allem, wenn seit der vermeintlich falschen Aktion relativ viel Zeit vergangen ist - wobei "viel Zeit" schon eine Stunde sein kann, und solche Fehler werden erfahrungsgemäß erst Tage später bemerkt. Eine Änderung hier hat da und dort zig Konsequenzen, die Anzahl der Folgen steigt minütlich exponentiell. Das Undo über einen größeren Zeitraum hinweg hätte theoretisch ähnliche Konsequenzen wie das Zurückspielen eines Backups - in beiden Fällen würde man u.U. Arbeit vernichten, die mit dem eigentlichen Problem nur mittelbar in Verbindung steht. Deshalb verzichten wir auf derlei. Es gibt andere Hilfsmittel, mit denen man solche Probleme beheben bzw. ihre Folgen minimieren kann. Irgendwas muss der Support schließlich auch noch für sein Geld tun. :wink: Ein Undo auf Verwaltungsebene gibt es ja sowieso; in unseren Applikationen verändert man Daten praktisch niemals direkt. Mindestens zwei Schritte lassen sich fast immer dadurch rückgängig machen, dass man einfach den Zustand der Daten vor der Bearbeitung wieder aus der Tabelle holt.
Herzlich,
Tom
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: History in Memofeld

Beitrag von Herbert »

Tom hat geschrieben:Hallo, Manfred.
Ein Undo auf Verwaltungsebene gibt es ja sowieso; in unseren Applikationen verändert man Daten praktisch niemals direkt. Mindestens zwei Schritte lassen sich fast immer dadurch rückgängig machen, dass man einfach den Zustand der Daten vor der Bearbeitung wieder aus der Tabelle holt.
Tom, kannst du dies näher erklären? Du speicherst beim Speichern-Befehl wohin?
Grüsse Herbert
Immer in Bewegung...
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: History in Memofeld

Beitrag von georg »

Hallo, Manfred -


vielleicht solltest Du fragen: "Ist das Speichern in einem Memofeld effizient?" Bei DBT würde ich das ganz klar verneinen, bei FPT würde ich einen Moment nachdenken ... und dann eher zu Tom's Lösung tendieren, es aus den jeweiligen Dateien auszulagern, weil mir der Verwaltungsaufwand der durch die fortlaufenden Änderungen in den Memofeldern auf Dateiebene entsteht, zu hoch wäre.

Aber: meine Meinung.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: History in Memofeld

Beitrag von nightcrawler »

Eine Historie auf Tabellenebene habe ich mal experimentell für den ADS auf Basis von Triggern implementiert. Falls es den einen oder anderen interessiert;) http://joachimduerr.blogspot.de/2013/09 ... -only.html
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: History in Memofeld

Beitrag von Tom »

Nach meiner Erfahrung geht es im Normalfall in erster Linie darum, die Ursache für ein Problem nachzuweisen, denn es auf Knopfdruck wieder zu beben. Es gibt vergleichsweise einfache Probleme (versehentliche Löschung von Verwaltungsdaten, Umbenennungen etc.), die sich bei ausreichender Dokumentation auf Tabellenebene oder durch Strukturen im Programm beheben lassen, und es gibt haarige Probleme, bei denen man ohnehin intensiv schauen muss, was alles von ihnen betroffen ist. In einer Multiuser-Umgebung agieren mehrere Instanzen der gleichen Software, so dass ein komplexes Muster von Interaktionen entsteht, die sich kaum strukturiert rückgängig machen lassen. Es gilt also in erster Linie, innerhalb der Software Fehlersituationen zu vermeiden, was man dadurch erreichen kann, dass Prozesse sehr eindeutig, in sich gekapselt und im Hinblick auf ihre Konsequenzen transparent sind. Wenn einem Benutzer klar ist, was es für Folgen hat, was er zu tun im Begriff ist, vermeidet man viele Fehler. Ergänzend sollten z.B. Datumseingaben immer mit Plausibilitätsprüfungen versehen sein ("Sie möchten für einen Mitarbeiter, der aktuell Patienten zu versorgen hat, ein Austrittsdatum erfassen, das fünf Monate zurückliegt - ist das WIRKLICH richtig?") u.v.a.m. Prozesse mit schwerwiegenden Konsequenzen (siehe Plausibilitätsbeispiel) sollten tatsächlich auch mit Funktionalitäten ausgestattet sein, die die Wiederherstellung der betroffenen Daten erlauben, aber das erledigt man kaum mit einem allgemeinen Rollback, sondern mit spezialisierten Funktionen, die solche Daten archivieren und ihre Restaurierung ermöglichen. Ich denke, die meisten von uns arbeiten auch so. Unsere Transaktionenverfolgung dient tatsächlich in erster Linie der Fehlersuche und erst in zweiter einer möglichen Instandsetzung. Das allgemeine System dient meistens dem Nachweis der Tatsache, dass das Problem vor dem Rechner saß. :wink:

@Herbert: Das ist vergleichsweise kompliziert. Während der Bearbeitung wird nur mit Speichervariablen gearbeitet. Wählt man dann "Speichern", werden die Daten in gesonderten Tabellen gepuffert. Erst wenn danach irgendeine andere Aktion erfolgt, etwa Navigation in den Tabellen o.ä., werden die Daten physikalisch gespeichert. Oder wenn man x Sekunden lang nichts macht. Das ist aber nicht überall so, sondern nur in den wirklich kritischen Systematiken. Die gesonderten Temporärtabellen werden natürlich regelmäßig geprüft, damit durch Abstürze oder Abschaltungen nichts verloren geht. Wie gesagt, ist ein wenig komplizierter, als sich in ein paar Sätzen erklären lässt, aber äußerst verlässlich.
Herzlich,
Tom
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: History in Memofeld

Beitrag von Manfred »

Georg,

das war genau die Frage, die ich hören wollte. Ob es effizient ist es über diesen Weg zu machen. Im Moment sind die DBT Memofelder im Einsatz.
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: History in Memofeld

Beitrag von AUGE_OHR »

Manfred hat geschrieben:in meinem übernommenen Projekt wird jede Änderung eines Satzes in ein Memofeld des jeweiligen Satzes gespeichert.
hm ...
meinst du jetzt "extra" Informationen in einer DBF "History" oder in einer DBF "selbst" mit Zusatz Memo ?

für den Fall DBF "History" : das ist bei mir das "Logbuch"

wenn du Änderungen eines Datensatz in eine DBF meinst : ich lösche den Satz der bearbeitet wird und hänge die Änderungen wieder ran.
dabei braucht jeder Datensatz ein Date()/Time() hat damit man das richtige Rollback, auf die gelöschten, machen kann.
Ob es effizient ist es über diesen Weg zu machen. Im Moment sind die DBT Memofelder im Einsatz.
das Problem bei Memo war immer (viele) Änderungen ... deshalb bin ich auf löschen / anhängen umgestiegen

beim täglichen Backup / Indizieren werden die gelöschten Datensätze um-kopiert so das man auch nach Monaten noch Änderungen nachverfolgen kann.
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: History in Memofeld

Beitrag von georg »

Hallo, Manfred -


die DBT-Technik war nie ausgereift. Wenn ein Memo-Feld aktualisiert wird, wird der neue Inhalt "hinten" drangepackt, und der vorherige Inhalt "ruht" vor sich hin. Es gibt da auch kein Wiederverwenden dieser Bereiche, darum musste man ja auch so aufwändig die Datei in eine neue kopieren (dabei wurden dann nur die tatsächlich benutzen Bereiche der DBT-Datei übertragen), die alte löschen und die neue umbenennen. (Ach so, ja: in einem Clipper- bzw. Xbase-Programm, nicht mit copy ...)

FPT ist da etwas flexibler, aber ich kann Dir nicht sagen, wie sehr. Nur scheint es dort das memopack-Problem nicht mehr zu geben.

Bei DBT-Dateien kann es Dir also passieren, dass die Dateigrössen enorm in die Höhe gehen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: History in Memofeld

Beitrag von brandelh »

DAS Hauptproblem von Memofeldern (egal welches) ist, dass es intern immer als Offset zu einem Dateianfang verwaltet wird.
Bei uns kam es vor, dass die Zuordnung fehlerhaft war und Daten aus einem Fall bei einem anderen auftauchten bzw. teilweise mit willkürlichen Daten überschrieben wurden.
Ein PACK und ein Fehler beim Zurückholen und die Zuordnung ist hinüber.
Das betreffende Programm wurde bald klang und sanglos beerdigt, ob es ein Hardware Defekt war oder ein Bedienungsfehler kam nie raus.

Man kann einfach nicht neu zuordnen wie man neu indizieren kann, daher würde ich für ein LOG entweder DBF Dateien oder Textdateien nutzen, die über den Dateinamen eindeutig zuordenbar sind.
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: History in Memofeld

Beitrag von georg »

Hallo, Hubert -


ne, man verwendet einen SQL-Server und TEXT Felder. Keks gegessen.

Aber Manfred's Frage war, ob DBT geeignet ist.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: History in Memofeld

Beitrag von brandelh »

georg hat geschrieben:Hallo, Hubert -
ne, man verwendet einen SQL-Server und TEXT Felder. Keks gegessen.
Aber Manfred's Frage war, ob DBT geeignet ist.
genau auf Manfreds Frage habe ich geantwortet (ungeeignet !) :!:
Und sicherlich ist ein SQL-Server besser ;-)
Gruß
Hubert
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: History in Memofeld

Beitrag von Manfred »

Moin,

ne, meine Frage war eigentlich eine andere. Ob man sowas überhaupt über Memofelder regeln soll und ob man dass dann direkt in ein Memofeld schreibt, das zum jeweiligen (in dem Fall geänderten) Satz gehört. Also praktisch die Zettel mit Beschreibung in die gleiche Hose packt, für die die Beschreibung der Hose gilt. Schaut man nach, findet man die Zettel. Wäscht man die Hose, oder wirft sie gar weg, nutzen die ganzen Notizen nichts mehr. :lol:

Wobei es in meinem Fall wohl eher wirklich wohl nur um ein Protokoll geht, welches m.E. nicht so wichtig erscheint.
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
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: History in Memofeld

Beitrag von brandelh »

Ich halte Memofelder nicht für geeignet. Auch weil die Protokolle riesig werden können und du eventuell Filter und Berichte drüber legen sollst.
Überlege mal wie du eine Liste der geänderten Datensätze der letzten 3 Wochen über Memos ermitteln willst ;-)
Gruß
Hubert
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: History in Memofeld

Beitrag von Herbert »

Ja, warum denn der grosse Aufwand (ohne ein starkes DB-System im Hintergrund zu haben)?
Bei kritischen Daten muss doch ein täglicher Backup genügen. Unsere (lebendigen) Daten sind in der Regel gezippt nicht soooo gross. Muss denn, ausser bei sehr kritischen Daten, wirklich jede Mutation nachgetragen werden? Wie oft wird so was gebraucht? Und was ist, wenn diese Information wie von Hubert auch angezweifelt nicht mehr da oder gar falsch ist?
Die Gedanken von Tom zum Thema finde ich praxisnah.
Grüsse Herbert
Immer in Bewegung...
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: History in Memofeld

Beitrag von Manfred »

nightcrawler hat geschrieben:Eine Historie auf Tabellenebene habe ich mal experimentell für den ADS auf Basis von Triggern implementiert. Falls es den einen oder anderen interessiert;) http://joachimduerr.blogspot.de/2013/09 ... -only.html
Hallo Joachim, wo ist das jetzt gelandet? Der Link gilt nicht mehr.
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: History in Memofeld

Beitrag von nightcrawler »

Manfred hat geschrieben:Hallo Joachim, wo ist das jetzt gelandet? Der Link gilt nicht mehr.
Mönsch Manfred, da kommst Du nach Jahrzehnten daher und willst einen Link;) Ich habe den Blog auf meine Business-Seite umgestellt: https://www.jd-engineering.de/insert-only/
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
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: History in Memofeld

Beitrag von Manfred »

janu, habe den gerade nochmal gelesen, keine Ahnung mehr warum und dachte: Och, das liest du dir mal durch, klingt interessant. Und gleich hinten runter gefallen. :badgrin:
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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: History in Memofeld

Beitrag von Tom »

Hallo, Manfred.

Ganz egal, ob man mit dem ADS, einem SQL-Server oder dateibasierten Tabellen arbeitet - es ist eine sehr, sehr komplexe Aufgabe, ein schrittweises Rollback oder das termingenaue Zurückversetzen der Datenbank (Stand vom soundsovielten um xy Uhr) in einen bestimmten Zustand zu verwirklichen. Die einfachste Lösung bestünde übrigens darin, jede Tabelle bei jeder Änderung zu sichern. Wenn man genug Speicherplatz zur Verfügung hat und Performance kein so großes Thema ist, kann man das auch versuchen. Es sind ja nur ein paar Operationen, die man abfangen muss. :wink:

Trigger und Stored Procedures sind sehr mächtige Werkzeuge, um Tabellenprozesse zu automatisieren, Konsistenzen zu gewährleisten - und möglicherweise auch, um Veränderungstransparenz zu verwirklichen. Ob das aber in jedem konkreten Einzelfall funktionieren kann und angebracht ist, hängt von der Art und Komplexität der Anwendung ab. Bei einem einfachen Point-of-Sales-System, das eine Handvoll Tabellen verwaltet und im Kern lediglich Rechnungen erzeugt, ist die Aufgabe deutlich überschaubarer als bei einer umfangreichen vertikalen Anwendung mit stark verzahnten Prozessen und vielen agierenden Benutzern, die, Obacht, unterschiedliche Prozesse in teilweise gleichen Datenmengen auslösen. Hier gerät man nach meinem Dafürhalten schnell an die Grenze des Machbaren - vor allem, was den Aufwand und möglichen Nutzen anbetrifft.

Insofern wiederhole ich gerne meine Anmerkung von Anno Tobak: Kritische Prozesse sollten mit entsprechenden Absicherungen, Plausiblitätsprüfungen und ggf. Archivierungssystematiken versehen werden. Das ist meistens relativ überschaubar. Kunden werden eben nicht wirklich gelöscht, sondern archiviert, einschließlich aller abhängigen Daten. Und selbst wenn Kunden aus dem Archiv gelöscht werden sollen, gibt es einen weiteren Pool, an den der Anwender nicht kommt. Ein paar hilfreiche Tools, die man für den eigenen Zugang unter der Haube versteckt, restaurieren solche Daten dann. Oder Aufträge, Angebote, weiß der Geier (je nach Anwendung). Einzelne Bewegungsdaten. Mit einer Woche Arbeit stattet man eine durchschnittliche vertikale Anwendung auf diese Weise mit Absicherungssystemen aus, die in den meisten Fällen ausreichen werden. Und für alles andere gibt es Backups.
Herzlich,
Tom
Leon
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 118
Registriert: Mi, 28. Nov 2007 12:48
Wohnort: Wien
Hat sich bedankt: 5 Mal
Kontaktdaten:

Re: History in Memofeld

Beitrag von Leon »

Manfred hat geschrieben:in meinem übernommenen Projekt wird jede Änderung eines Satzes in ein Memofeld des jeweiligen Satzes gespeichert. Also eine History. Meine Frage jetzt an euch, ist sowas eine vernünftige Lösung, oder wie seht ihr das?
Ich habe bei einem Kunden auch eine Art Protokollierung, allerdings auf Basis von Datenbanken. Die haben dieselbe Struktur wie die Dateien, mit denen der Kunde arbeitet.
Bei jeder Änderung an einem Datensatz wird der Inhalt des Datensatzes unmittelbar vor dem Speichern der Änderung in die entsprechende "Spiegeldatei" geschrieben, samt Benutzerkennung, Datum und Zeit der Änderung. Auch beim Löschen eines Datensatzes wird der Satz, bevor er in der Originaldatei gelöscht wird, in die Spiegeldatei weggeschrieben und mit einer Löschmarkierung versehen.
Gruß aus Wien
Leon
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: History in Memofeld

Beitrag von brandelh »

Es kommt darauf an warum es gemacht wird, wenn man nur eine Liste sehen will mit Änderungsdatum/Zeit und dem geänderten Text mag es gehen,
aber das Zurücksetzen ist sehr aufwändig und wohl eher was für die Hand bei dieser Umsetzung.

Kommen wir zu den offensichtlichen Problemen ...

1. Jeder kann nachträglich die "LOG" manipulieren ...
2. DBT zu DBF Zuordnung - kann schnell verloren gehen ... hatte ich einmal, war nicht schön ... vermutlich wurde eine ältere DBF zurückgeholt ... ohne die DBT.
3. Wird kein externer das als LOG anerkennen (siehe 1.)
4. Bei jeder Schreibstörung ist die komplette LOG weg, wenn man es sofort bemerkt hat man ja eine Sicherungskopie, aber wenn nicht ... nur Datenmüll.

Allerdings fällt mir jetzt auch nichts ein was wirklich die Probleme lösen würde.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: History in Memofeld

Beitrag von Tom »

Erfahrungsgemäß geht es, wie erwähnt, ja in der Hauptsache darum, das Problem nachzuweisen, und das sitzt tatsächlich meistens vor dem Rechner. Deshalb ist die Protokollierung kritischer Vorgänge wichtig - und sie sollte auch transparent sein, so dass die Anwender nicht davon überrascht werden, dass die Applikation quasi "mitschreibt". Dafür genügt tatsächlich eine Memo-Tabelle, die den jeweiligen Vorgang mit seinen Parametern (betroffene Daten, Benutzer, Datum, Uhrzeit, Arbeitsplatz) dokumentiert.

Beim klassischen Tabellenmodell und zumindest theoretisch bei ISAM-SQL (Postgre) sollte man übrigens im Fall der Reorganisation (Pack) Sicherungen der wichtigsten Tabellen anlegen oder als gelöscht markierte Datensätze in Backup-Tabellen umkopieren. Auf diese Weise kann man versehentliche Löschungen leichter restaurieren als über Backups, die nicht selten völlig unerwartet überhaupt nicht vorliegen.
Herzlich,
Tom
Antworten