Neue Zeilen-Timestamps zum Erfassen von Änderungen in Oracle 10g

Data-Warehouses erhalten ihre Daten oft aus mehreren Quellsystemen, auf denen jeweils eigene Anwendungen laufen. Daher ist es oft schwierig festzustellen, welche Zeilen erst kürzlich aktualisiert wurden, damit Neueinträge auch wirklich nur neue Daten enthalten. Dies ist besonders bei älteren Anwendungen ein Problem, deren Datenbankschemata keine Spalte mit dem letzten Änderungsdatum enthalten. Unternehmen sind verständlicherweise nicht besonders erpicht darauf, funktionierenden Code zu modifizieren, nur um Änderungen verfolgen zu können.

In Oracle 10g gibt es eine neue Pseudospalte namens ORA_ROWSCN für jede Zeile, aus der das ungefähre Datum der letzten Aktualisierung der jeweiligen Zeile hervorgeht. ORA_ROWSCN gibt eine „konservative Obergrenze“ der Systemänderungsnummer (System Change Number, SCN) für die Transaktion an, welche die Zeile zuletzt geändert hat. Das bedeutet, dass die SCN nur eine Schätzung ist, weil SCNs von Oracle standardmäßig nur auf Blockebene verfolgt werden.

In Listing A zum Beispiel wird ORA_ROWSCN in einer kleinen Tabelle ausgewählt, eine Zeile wird aktualisiert und dann ORA_ROWSCN erneut ausgewählt. Obwohl nur eine einzige Zeile geändert wurde, wird auch bei den übrigen Zeilen die neue SCN angegeben. (Genauere Ergebnisse kommen zustande, wenn beim Erstellen einer Tabelle die SCN-Verfolgung auf Zeilenebene aktiviert wird. Leider kann eine Tabelle nicht geändert werden, um diese Funktion nachträglich hinzuzufügen.) Wenn die Zahl der aktualisierten Blöcke also niedriger ist als die Zahl der Blöcke in der Tabelle, könnten auf diese Weise Änderungen entdeckt werden, ohne zu viele überflüssige Zeilen zu verwenden.

Was aber wenn Datum und Uhrzeit der jeweiligen Transaktion benötigt werden? Die Funktion SCN_TO_TIMESTAMP kann die ORA_ROWSCN in einen Zeitstempelwert umwandeln, der abgefragt oder in einer WHERE-Klausel als Prädikat verwendet werden kann. Allerdings ist auch diese Angabe nur ein Näherungswert.

ORA_ROWSCN ist außerdem eine bequeme Möglichkeit, eine SCN zu erhalten, die als Grenze für Flashback-Abfragen verwendet, auch wenn ORA_ROWSCN selber nicht für solche Abfragen eingesetzt werden kann. Stattdessen verwendet man eine Versionsabfrage und wählt die Pseudospalten VERSIONS_STARTSCN und VERSIONS_ENDSCN aus.

Listing B demonstriert eine Flashback-Abfrage, die eine um 1 kleinere SCN verwendet als der aktuelle Wert, um den vorherigen Wert der Datenzeile zu ermitteln. Man beachte, dass das Gehalt von King jetzt wieder 5000 beträgt und der ORA_ROWSCN-Wert wieder der ursprünglichen SCN entspricht.

ZDNet.de Redaktion

Recent Posts

Gaming-bezogene Phishing-Attacken um 30 Prozent gestiegen

Über drei Millionen Angriffsversuche unter Deckmantel von Minecraft / YouTube-Star Mr. Beast als prominenter Köder

2 Tagen ago

KI erleichtert Truckern die Parkplatzsuche

Die Prognose für die Anfahrt bezieht das Verkehrsaufkommen, die Stellplatzverfügbarkeit sowie die Lenk- und Ruhezeiten…

2 Tagen ago

EU AI-Act Risk Assessment Feature

Unternehmen können mit Casebase Portfolio an Daten- und KI-Anwendungsfällen organisieren.

2 Tagen ago

Smarthome-Geräte sind Einfallstor für Hacker

Smart-TV oder Saugroboter: Nutzer schützen ihre smarten Heimgeräte zu wenig, zeigt eine repräsentative BSI-Umfrage.

2 Tagen ago

Core Ultra 200V: Intel stellt neue Notebook-Prozessoren vor

Im Benchmark erreicht der neue Core Ultra 200V eine Laufzeit von 14 Stunden. Intel tritt…

2 Tagen ago

Irrglaube Inkognito-Modus

Jeder dritte hält sich damit für unsichtbar. Wie widersprüchlich unser Datenschutzverhalten oft ist, zeigt eine…

3 Tagen ago