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

Gefahren im Foxit PDF-Reader

Check Point warnt vor offener Schwachstelle, die derzeit von Hackern für Phishing ausgenutzt wird.

20 Stunden ago

Bitdefender entdeckt Sicherheitslücken in Überwachungskameras

Video-Babyphones sind ebenfalls betroffen. Cyberkriminelle nehmen vermehrt IoT-Hardware ins Visier.

20 Stunden ago

Top-Malware in Deutschland: CloudEye zurück an der Spitze

Der Downloader hat hierzulande im April einen Anteil von 18,58 Prozent. Im Bereich Ransomware ist…

20 Stunden ago

Podcast: „Die Zero Trust-Architektur ist gekommen, um zu bleiben“

Unternehmen greifen von überall aus auf die Cloud und Applikationen zu. Dementsprechend reicht das Burg-Prinzip…

1 Tag ago

Google schließt weitere Zero-Day-Lücke in Chrome

Hacker nutzen eine jetzt gepatchte Schwachstelle im Google-Browser bereits aktiv aus. Die neue Chrome-Version stopft…

2 Tagen ago

Hacker greifen Zero-Day-Lücke in Windows mit Banking-Trojaner QakBot an

Microsoft bietet seit Anfang der Woche einen Patch für die Lücke. Kaspersky-Forscher gehen davon aus,…

2 Tagen ago