Kann ich auf der Oracle SCN verlassen Spur von geänderten Zeilen in der Datenbank zu halten? Ziel ist es, die Datenbank alle x Minuten für alle Zeilen abzufragen, die in einer bestimmten Tabelle geändert wurden. Die Idee war, die aktuelle SCN zu erinnern, mitMit der Oracle SCN verfolgen geänderten Zeilen
SELECT current_scn FROM V$DATABASE;
Und dann nach x Minuten würde ich nur eine Abfrage wie
SELECT * from mytable where ORA_ROWSCN > current_scn_x_minutes_ago;
alle Zeilen zu bekommen laufen, die sich seitdem geändert haben (und haben somit ein höhere SCN). Ich bin mir bewusst, dass die Abfrage zu viele Ergebnisse zurückgibt, da die SCNs pro Block verwaltet werden, aber das spielt keine Rolle. Die Hauptfrage, die ich habe, ist, ob der SCN streng zunimmt, dh ob der nächste erzeugte SCN immer höher ist als der aktuelle SCN (wie von V $ DATABASE abgefragt) oder ob ich auf SCN_TO_TIMESTAMP angewiesen bin, um sicher zu sein, dass die Reihenfolge ist richtig.
Danke für die Antwort. Wir verwenden kein feinkörniges ORA_ROWSCN (unter Verwendung von ROWDEPENDENCIES) und können unsere Tabellen nicht mit dieser Einstellung neu erstellen. So ist die Frage, ob das genannte Regel auf Blockebene gilt auch, oder es anders ausdrücken: „Wenn Transaktion T1 modifiziert Reihe R1 B1 und Transaktion T2 ändert Reihe R2 gehör B2 zu blockieren, und T2 passiert nach T1 Block gehört, ist ORA_ROWSCN von R1, nachdem das Commit von T1 nach dem Commit von T2 garantiert niedriger als ORA_ROWSCN von R2 ist (vorausgesetzt, wir verwenden kein feingranulares ORA_ROWSCN)? " –