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.
Neueste Kommentare
Noch keine Kommentare zu Neue Zeilen-Timestamps zum Erfassen von Änderungen in Oracle 10g
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.