Frage

Angenommen, eine Oracle-Instanz muss nach einer Katastrophe wiederhergestellt werden.Werden Sequenzen auf den Anfangszustand bzw. den zuletzt gespeicherten Zustand zurückgesetzt oder bleiben zwischengespeicherte Werte erhalten?

Vielen Dank.:-)

War es hilfreich?

Lösung

Die Sequenzwerte werden in der Tabelle SYSTEM.SEQ$ (glaube ich) gespeichert, und im Speicher wird ein Cache für die nächsten zu verwendenden Werte verwaltet, wobei die Größe dieses Caches vom CACHE-Wert für die Sequenz abhängt.

Wenn der Cache erschöpft ist, wird die SEQ$-Tabelle auf einen neuen Wert aktualisiert (auf inkonsistente Weise – d. h.ohne dass die Transacton-Steuerung der Benutzersitzung angewendet wird) und beim nächsten Mal werden beispielsweise 100 Werte (wenn CACHE=100) aus dem Speicher gelesen.

Nehmen wir an, Sie verwenden eine Sequenz mit einer Cache-Größe von 20.Wenn Sie einen bestimmten Wert aus der Sequenz auswählen, beispielsweise 1400, wird die SEQ$-Tabelle auf den Wert 1420 aktualisiert.Selbst wenn Sie Ihre Transaktion zurücksetzen, hat SEQ$ diesen Wert noch, bis die nächsten 20 Sequenzwerte verwendet wurden. Zu diesem Zeitpunkt wird SEQ$ auf 1440 aktualisiert.Wenn Sie dann gerade den Wert 1423 verwendet haben und es zu einem Instanzabsturz kommt, dann ist beim Neustart des Systems der nächste Wert, der aus der Sequenz gelesen wird, 1440.

Also ja, die Integrität der Sequenz bleibt erhalten und Nummern werden nicht „neu ausgegeben“.Beachten Sie, dass das Gleiche auch für ein ordnungsgemäßes Herunterfahren gilt – beim Neustart erhalten Sie im obigen Beispiel einen neuen Wert von 1440.Aus diesem Grund kann in der Praxis nicht garantiert werden, dass Sequenzen lückenlos sind (auch weil durch die Verwendung eines Werts und das anschließende Rollback dieser Wert nicht im Cache wiederhergestellt wird).

Andere Tipps

Nicht, dass ich keine Erfahrung mit diesem, aber ich sehr viel davon ausgehen, dass eine Erholung in einen konsistenten System Änderungsnummer Staat würde auch die Reihenfolge auf den zuletzt gespeicherten Zustand zurückzukehren. Alles andere wäre ziemlich nutzlos in Bezug auf die Erholung sein.

Wie für Cache-Werte, sind solche (kann) verloren, auch wenn die Instanz downs in geordneter Weise schließt (*): Instanzen cachen eine Reihe von Sequenzwerten im Speicher (SGA) statt jedes Mal in die Datenbank gehen. Nicht verwendete Sequenzwerte, dass die Instanz kann reserviert hat „verschwinden“, Sie mit Lücken in der Folge zu verlassen.

(*) 8i Dokumentation erwähnt, dass dieser mit parallelen Instanzen (RAC) passieren kann, wobei in diesem Fall die Sequenz nicht einmal streng aufsteigend sein kann (aber immer noch einzigartig), 10 g docs sagen, dass es im Fall einer Instanz Ausfall geschieht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top