Einzelnen Beitrag anzeigen

ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#1

Serverseitiges Logbuch über Datenänderungen

  Alt 20. Okt 2017, 10:27
Datenbank: Firebird • Version: 2.5 • Zugriff über: SQLExpress
Hallo Zusammen.

Wir denken gerade darüber nach, ob in unserem Umfeld die Integration eines Änderungslogbuchs auf Datenbankserverseite für uns sinnvoll möglich ist.

Hintergrund:
Produktivdatenbank läuft unter Firebird 2.5 (Entwicklungstests zusätzlich mit FB3).
Sämtliche Tabellen haben eindeutige ID-Spalten (über Generatoren erzeugte integer IDs).
Eher unbedeutend in diesem Zusammenhang, aber zur Vollständigkeit:
die Clientanwendung ist unter Delphi entwickelt, DB-Zugriff über DBExpress Komponenten.

Unser gedanklicher Ansatz ist nun folgender:
jede Änderung an einem Datensatz löst den Logbuchprozess aus.
Als Logbuch stellen wir uns eine Tabellenstruktur vor, in der die Änderungen abgelegt werden (Details noch offen).
Im Logbuchprozess soll über Steuertabellen entschieden werden, bei welcher Tabelle in welchem Umfang ein Log geführt wird.
Optimal wäre natürlich z.B. eine stored procedure, die als Parameter den Tabellen-Namen und die Datensatz-ID übergeben bekommt,
so dass mithilfe der Systemtabellen (Metadaten) dann automatisiert Änderungen in der o.g. Logbuchstruktur protokolliert werden - siehe hier Frage 2) unten.

Das ganze ist - gelinde gesagt - noch ein nebulöses Wolkenschloss an Wünschen und Ideen.

Es gibt nun einige Fragen zu diesen Überlegungen, für die ich bei meinen Recherchen (Google und Co) noch keine Antworten gefunden habe - oder ich habe vielleicht ein Verständnisproblem. Hier also die Frageliste:

1) Anstoßen des Logbuchprozesses
Natürlich könnte ich in jeder Tabelle einen Trigger für insert/update/delete anlegen und da den Logbuchprozess anstoßen,
geht das nicht einfacher - sozusagen als zentraler Trigger?

2) Änderungen erkennen
Eine triviale Notwendigkeit ist, dass - um Änderungen zu erkennen - der Zustand vorher mit dem Zustand nacher verglichen werden muss. Prinzipiell ist das mit Tabellen-Trigger vom Typ "before" möglich (old.xx zu new.xx vergleichen).
Gibt es eine Möglichkeit, die beiden Datenmengen (old und new) z.B. einer stored procedure verfügbar zu machen? Dann könnte es vermieden werden, die gesamte Prüflogig in JEDER Tabelle mehrfach abzulegen.

Ich bin dankbar für Tips und Hinweise.
Gruß
Markus
  Mit Zitat antworten Zitat