2017-03-24 7 views
0

Hintergrund: ich eine Oracle-Tabelle habe, wird die Tabelle keine bestimmte Spalte als Zeitstempel hat, während Tabellenerstellung Skript. Diese Tabelle kann Millionen von Zeilen enthalten.Get Reihe alle Tabellen der nach einer bestimmten Zeit aktualisiert

Beispiel:

Employee {Emp_No, Name, Manager,Division, Role, Region} 

Mein Quest: Wenn Updates durch einen Job auf dem Tisch passiert ist, kann ich wissen, welche alle Zeilen wurden aktualisiert. Orakel hat für jede Zeile einen internen Zeitstempel, den ich nutzen kann. Kann ich es in der Abfrage verwenden, um alle Datensätze zu erhalten.

Grund: Ich brauche mein Team dieser zweideutigen Aufzeichnungen wurden nicht aktualisiert von der Arbeit, die wir alle sind zu ahnen, zu zeigen.

+0

Warum eine Nullable-Timestamp-Spalte nicht hinzugefügt werden und der Auftrag auf Update bevölkern hat? Das sollte Beweis genug sein. –

+0

Kann nicht hinzugefügt werden, es ist eine Produktionstabelle. Änderungen können nicht einfach durchgeführt werden. –

+0

Does [ 'ora_rowscn'] (https://docs.oracle.com/database/121/SQLRF/pseudocolumns007.htm#SQLRF50953) geben Ihnen die Informationen, die Sie benötigen, wenn dies eine einmalige Aufgabe ist? Nicht klar, wenn du es definitiver haben willst, als dies erlaubt ... es könnte zeigen, dass die Zeilen, die dich interessieren, * nicht durch ein aktuelles SCN aktualisiert wurden. –

Antwort

1

Ungefähre Aktualisierungszeit kann mit SCN_TO_TIMESTAMP(ORA_ROWSCN)

Für jede Zeile abgerufen werden, kehrt ORA_ROWSCN die konservative obere Grenze System Änderungsnummer (SCN) der letzten Änderung der Zeile. Diese Pseudo ist nützlich, um zu bestimmen, etwa wenn eine Zeile war zuletzt aktualisiert wurden. Es ist nicht absolut präzise, ​​da Oracle die SCNs durch eine Transaktion verfolgt, die für den Block, in dem sich die Zeile befindet, festgeschrieben ist.

https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns007.htm

+0

Der 'scn_to_timestamp' Aufruf wird jedoch für ältere Zeilen fehlschlagen (d. H. Wahrscheinlich diejenigen, die hier nicht aktualisiert werden); vielleicht besser, um das SCN für eine Zeit kurz vor dem Update zu bekommen, wenn das immer noch verfügbar ist, und schauen Sie sich das 'ora_rowscn' direkt an? Ich schätze, wenn Sie sich eine bestimmte Zeile ansehen, würde Ihnen eine Ausnahme sowieso etwas sagen. –

+0

Ausgezeichnet. Jeden Tag etwas Neues lernen. Ich wusste weder, dass diese Pseudo-Spalte existiert noch die Timestamp-Konvertierungsfunktion. – unleashed

2

Oracle hat ORA_ROWSCN Pseudo. Diese Spalten geben "die konservative Obergrenze der Systemänderungsnummer (SCN)" der letzten Transaktion zurück, die für die Zeile oder den Datenblock ausgeführt wurde. Dies ist eine gute Schätzung für die letzte Änderung des Blocks oder der Zeile. Wenn Ihre Tabelle mit ROWDEPENDENCIES erstellt wird, gibt ORA_ROWSCN SCN für Zeile zurück. NOROWDEPENDENCIES ist der Standardwert. In diesem Fall verfolgt Oracle SCN auf Blockebene.

SCN_TO_TIMESTAMP können Sie scn zu Zeitstempel Converto aber für alte scn wirft es Ausnahme.

Verwandte Themen