Oracle: Wie man die Zeitstempel der letzten Aktualisierung (einer Tabelle) in einem schema?
Es ist eine Oracle-Datenbank-schema (sehr klein, in der Daten, aber immer noch etwa 10-15 Tische). Es enthält eine Art von Konfiguration (routing-Tabellen).
Gibt es eine Anwendung, die Umfrage dieses schema von Zeit zu Zeit. Benachrichtigungen sind nicht zu verwenden.
Wenn keine Daten in das schema aktualisiert wurden, sollte die Anwendung verwenden, dessen aktuelle version im Speicher.
Wenn jeder Tisch hatte ein update, sollte die Anwendung neu laden alle Tabellen in den Arbeitsspeicher.
Was wäre der effektivste Weg, um zu überprüfen das ganze schema-update für die seit einem bestimmten Schlüssel Punkt (Zeit-oder Transaktions-id)?
Bin ich mir vorgestellt Oracle hält eine Transaktions-id pro schema. Dann sollte es eine Möglichkeit zum Abfragen eine solche ID und halten Sie Sie vergleichen mit bei der nächsten Umfrage.
Ich gefunden habe, diese Frage, wo so eine pseudo-Spalte auf eine Zeile der Ebene:
Wie finden Sie heraus, wenn eine Oracle-Tabelle aktualisiert wurde das Letzte mal
Ich würde denken, dass etwas ähnliches vorhanden ist, auf ein schema-Ebene.
Kann jemand bitte zeigen Sie mich in die richtige Richtung?
- Sprechen Sie über änderungen am schema selbst (DDL) oder die Aktualisierung der Daten in den Tabellen?
- Änderungen an den Daten, sorry für die nicht klar ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich bin mir nicht bewusst, der eine solche Funktionalität in Oracle.Siehe unten.Die beste Lösung, die ich mit oben kommen kann ist, erstellen Sie einen trigger auf jede Ihrer Tabellen, die updates einer Zeile der Tabelle oder Kontext mit dem aktuellen Datum/Zeit. Ein solcher Trigger könnte der Tisch-Ebene (im Gegensatz zu row-level), damit Sie nicht so viel Aufwand wie die meisten löst.
Übrigens, Oracle kann nicht halten Sie eine Transaktions-ID pro schema, wie eine Transaktion beeinträchtigen könnten mehrere schemas. Es wäre möglich, V$ views zu verfolgen, eine Transaktion zurück, um die Objekte, die es berührt, aber es würde nicht einfach sein, und es würde fast sicher durchführen ärmer als die trigger-Schema.
Es stellt sich heraus, wenn Sie haben, 10g, können Sie mit Oracle-flashback-Funktionalität, um diese Informationen zu erhalten. Allerdings müssten Sie zum aktivieren der flashback (der trägt den zusätzlichen Aufwand der eigenen) und die Abfrage ist lächerlich langsam (vermutlich, weil es nicht wirklich beabsichtigte für diese Verwendung):
Um zu vermeiden, sperren von Themen in der "letzten Aktualisierung" - Tisch, würden Sie wahrscheinlich wollen, um dieses update in einer Prozedur, die verwendet einer autonomen Transaktion, wie zum Beispiel:
Dies bewirkt, dass Ihre Anwendung zu serialisieren, die bis zu einem gewissen Grad: jede Anweisung, muss zum aufrufen dieser Prozedur müssen warten, bis die Vorherige beendet ist. Die "Letzte Aktualisierung" Tabelle kann auch aus dem Takt geraten, weil das update auf, es wird bestehen bleiben, auch wenn das update, das aktiviert den trigger ein Rollback ausgeführt wird. Schließlich, wenn Sie haben eine besonders lange Transaktion, die Anwendung abholen könne das neue Datum/Zeit, bevor die Transaktion abgeschlossen ist, Sieg über den Zweck. Je mehr ich darüber nachdenken, desto mehr scheint es wie eine schlechte Idee.
Bessere Lösung, um diese Probleme zu vermeiden, ist nur eine Zeile einfügen von Triggern. Dies würde nicht die Tabelle sperren, so würde es keine Serialisierung und die Einsätze würden nicht müssen, werden asynchron vorgenommen, so konnte Sie Rollback ausgeführt werden, zusammen mit den eigentlichen Daten (und würden nicht sichtbar sein, um Ihre Anwendung, bis die Daten sichtbar sind). Die Anwendung würde man die max, die sollten sehr schnell sein, wenn die Tabelle indiziert ist (in der Tat, diese Tabelle wäre ein Idealer Kandidat für eine index-organisierte Tabelle). Der einzige Nachteil ist, das Sie wollen, ein job, der periodisch ausgeführt wird, zu reinigen, alte Werte, so dass es nicht zu groß.
dbms_stats.gather_table_stats könnte auch helfen: http://forums.oracle.com/forums/thread.jspa?threadID=607610