Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle – Trigger zum Erstellen einer Verlaufszeile bei Aktualisierung

Okay, das ist eine Umschreibung. Was ich bei meiner ersten Antwort übersehen habe, ist, dass die Anwendung ihren Verlauf in der Haupttabelle speichert. Jetzt verstehe ich, warum @NickCraver sich so entschuldigt für den Code.

Nun, das erste, was Sie tun müssen, ist, die Täter dieses Designs zu jagen und sicherzustellen, dass sie es nie wieder tun. Das Speichern von Historien wie dieser lässt sich nicht skalieren, macht normale (nicht historische) Abfragen komplizierter und sabotiert die relationale Integrität. Offensichtlich gibt es Szenarien, in denen all das keine Rolle spielt, und vielleicht ist Ihre Website eines davon, aber im Allgemeinen ist dies eine sehr schlechte Implementierung.

Der beste Weg, dies zu tun, ist Oracle 11g Total Recall . Es ist eine elegante Lösung mit einer vollständig unsichtbaren und effizienten Implementierung und – gemessen an anderen kostenpflichtigen Extras von Oracle – recht günstig.

Aber wenn Total Recall nicht in Frage kommt und Sie es wirklich tun müssen, erlauben Sie keine Updates . Eine Änderung an einem bestehenden CONTACT-Datensatz sollte eine Einfügung sein. Damit dies funktioniert, müssen Sie möglicherweise eine Ansicht mit einem INSTEAD OF-Trigger erstellen. Es ist immer noch eklig, aber nicht ganz so eklig wie das, was Sie jetzt haben.

Ab Oracle 11.2.0.4 wurde Total Recall in Flashback Archive umbenannt und ist Teil der Enterprise-Lizenz (obwohl ohne die komprimierten Journaltabellen, es sei denn, wir erwerben die Advanced Compress-Option).

Diese Großzügigkeit von Oracle sollte die FDA zur normalen Art der Speicherung von Historien machen:sie ist effizient, sie ist performant, sie ist ein in Oracle eingebautes System mit Standardsyntax zur Unterstützung historischer Abfragen. Leider erwarte ich noch viele Jahre lang halbgare Implementierungen mit spuckenden Triggern, kaputten Primärschlüsseln und schrecklicher Leistung. Weil Journaling eine dieser Ablenkungen zu sein scheint, an denen sich Entwickler erfreuen, trotz der Tatsache, dass es sich um Klempnerarbeiten auf niedriger Ebene handelt, die für 99,99 % aller Geschäftsvorgänge weitgehend irrelevant sind.