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

Erreichbarkeit im Weihnachtsurlaub weiterhin hoch

Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…

13 Stunden ago

Hacker missbrauchen Google Calendar zum Angriff auf Postfächer

Security-Experten von Check Point sind einer neuen Angriffsart auf die Spur gekommen, die E-Mail-Schutzmaßnahmen umgehen…

2 Tagen ago

Bedrohungen in Europa: Schwachstellen in der Lieferkette dominieren

Hinter 84 Prozent der Zwischenfälle bei Herstellern stecken Schwachstellen in der Lieferkette. Auf dem Vormarsch…

2 Tagen ago

Bericht: Apple arbeitet an faltbarem iPad

Es kommt angeblich 2028 auf den Markt. Das aufgeklappte Gerät soll die Displayfläche von zwei…

3 Tagen ago

HPE baut Supercomputer am Leibniz-Rechenzentrum

Das System basiert auf Hardware von HPE-Cray und Nvidia. Die Inbetriebnahme erfolgt 2027.

3 Tagen ago

Bund meldet Fortschritte in der Netzversorgung

Die Bundesnetzagentur hat ihr Gigabit-Grundbuch aktualisiert. Drei von vier Haushalten sollen jetzt Zugang zu Breitbandanschlüssen…

3 Tagen ago