Hello Pit,
liegt bei dir ein Trigger auf der Hand. dies zu nutzen. Also immer wenn deine Querys ausgeführt werden, tue dies(wandle in vorheriges datum um) automatisch… Danke für den tip und den Link.
Frage: Da ich das loggen eh über eine funktion mache: Ist ein Trigger weniger "lastig" als eine 2. Query, die dasselbe erledigt?
kannst Du bitte mal ein Funktionsdiagramm erstellen?
- Auslöser
- externe Geschäftsregeln
- interne Geschäftsregeln (ante)
- Datenbank veränderndes Statement
- interne Geschäftsregeln (post)
- Datenbank loggendes Statement
- usw.
Wo liegt was in Zeitdigramm?
Sowie zwei Punkte auf zwei unterchiedlichen Zeitebenen liegen, müssen sie durch "Zwangsserialisierug und Kontrolle" (Locking, Transaktion, ...) gebunden werden.
Es ist also besser, in der API-Anprogrammierung (z. B. PHP) nur die externen Geschäftsregeln (Vorprüfung) und den Auslöser unterzubringen. In der DB-Logik wird dann das datenverändernde Statement nebst Logging geschlossen ausgelöst. Sollte hierbei etwas schiefgehen, bekommt die API-Schicht eine entsprechende Meldung und das DMS (Data modificateion statement) wird nicht ausgeführt, oder automatisch rückgängig gemacht.
Bau Dir also eine stored Routine, die die Veränderung das Logging des Statements, die Durchführung des Statements und nach Kontrolle (DB-Error-Status benutzen!) den Eintrag in den Logging-Datensatz, ob erfolgreich oder nicht erfolgreich.
Verhindere direkte Zugriffe auf die Tabellen. Baue Dir also Stored Routines für den Zugriff auf.
MySQL + MariaDB und auch fast alle anderen Rel. DBMS bieten im Rechtesystem die Möglichkeit, die Zugriffsrechte entsprechend einzustellen. Man lässt also den API-User nur noch auf die strored Routines zugreifen, aber nicht mehr direkt auf die Tabellen. Dem Stored-Routine-User gestattet man den Zugriff auf die Tabellen. Auf diesem Wege kann man auch Trigger auf (indirekte) Selects erzeugen, was auf direkte Selekts auf die Tabellen nicht geht.
Alternativ kann man für das DBMS das binary Logging aktivieren. Da würde der oben beschriebene Vorgang automatisiert als Binärlog durchgeführt werden, aber ohne Kontrollen und ohne Möglichkeit der freien Wahl des Aufsetzpunktes. Das Binärlog würde auch irgendwann aus den Fugen geraten.
Grundsätzlich benötigst Du erst einmal ein sauberes Konzept für die Datensicherung. Diese sollte unbedingt in regelmäßigen Abständen eine Vollsicherung berücksichtigen. Ab dieser Vollsicherung kann dann mit dem Log jeweils ein "Replay" durchgeführt werden, also wieder bis zu einem bestimmten Zeitpunkt in die Zukunft (ab Vollsicherung) durchgeführt werden.
Lass Dir aber gesagt sein, dass dein Anliegen schon etwas für extrem Fortgeschrittene ist, da es einen ganzen Rattenschwanz von vorhergehenden und nacheilenden Maßnhamen und die Betrachtung diverser Rahmenbedingungen zur Bedingung macht. Sowas baut man nicht mal eben nebenbei.
Liebe Grüße
Tom S.
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.