Ich bin kein DBA und es fällt mir etwas schwer, den Transaktionsmanagementprozess von Oracle zu verstehen.
Von dem, was ich verstanden habe, indem ich einige zuverlässig aussehende Seiten im Internet gelesen habe (vor allem das AskTom note - aber kümmern Sie sich nicht um die Kommentare. Wenn eine Transaktion festgeschrieben wird, werden die neuen Daten nicht auf dem tatsächlichen Datenblock gemeldet noch, aber bleibt im Rollback-Segment angemeldet. Wenn jemand eine SELECT-Anweisung für die Daten ausgibt oder wenn UNDO_RETENTION-Sekunden verstrichen sind - je nachdem, welche dieser beiden Ereignisse zuerst eintritt - werden die neuen Daten dann (und nur dann) in die Datenblöcke geschrieben.
Aber jemand in unserer Firma, der angeblich Bescheid weiß, hat mir kürzlich das Gegenteil gesagt: wenn eine Transaktion durchgeführt wird, werden die neuen Daten sofort auf die Datenblöcke geschrieben, und die Rollback-Segment / Undo-Tablespace behält die alten Daten für eine Dauer von UNDO_RETENTION Sekunden bei. Diese alten Daten bleiben während dieser Zeit für den Zugriff durch Abfragen verfügbar, die vor der Transaktion in SCNs gestartet wurden.
Was passiert wirklich in Oracle, und können Sie Referenzen angeben, um Ihre Antwort zu sichern?
Wir verwenden Oracle 9.2.0.8.
Vielen Dank im Voraus.
Viel zu decken hier! Die Person in Ihrer Firma hat im Wesentlichen Recht, außer dass die Änderungen bereits vor dem Commit in den Datenblock im Speicher geschrieben werden, wie sie gemacht werden; und sie werden völlig unabhängig von dem Zeitpunkt, zu dem Sie das Commit durchgeführt haben, auf die Festplatte geschrieben (möglicherweise vor, möglicherweise nach, niemals als Teil der Commit-Operation).
1) UNDO_RETENTION hat nichts damit zu tun, wenn Ihre Änderungen in den Datenblock geschrieben werden, entweder im Speicher oder auf der Festplatte. UNDO_RETENTION steuert, wie lange die für das Rückgängigmachen der Änderung erforderlichen Daten nach dem Festschreiben der Änderung bestehen bleiben. Der Zweck ist, dass andere Abfragen oder serialisierbare Transaktionen, die vor dem Festschreiben gestartet wurden, diese Daten möglicherweise noch benötigen. Referenz: Ссылка
2) Wenn Sie ein Update durchführen, werden die Datenblöcke im Speicher geändert. Sie können oder dürfen nicht auf die Festplatte geschrieben werden (sogar bevor Sie sich verpflichten, glaube ich); Dies geschieht durch einen Hintergrundprozess. Außerdem werden Redo-Informationen in den Redo-Log-Puffer geschrieben. Rückgängig wird generiert und in einem Rückgängig-Segment gespeichert.
3) Beim Commit stellt Oracle sicher, dass Ihre Wiederherstellungsinformationen auf die Festplatte geschrieben werden, und kennzeichnet die Rückgängig-Daten als Committed. Aber es schreibt die geänderten Datenblöcke nicht auf den Speicher, noch geht es zurück und markiert jeden Block als festgeschrieben. Dies ist, um das Commit so schnell wie möglich zu machen. Referenz: Ссылка
4) Die Datenblöcke im Speicher werden entweder als festgeschrieben markiert, wenn sie durch den Hintergrundprozess auf die Festplatte geschrieben werden oder wenn sie das nächste Mal verwendet werden (durch eine SELECT- oder eine andere Operation). Genau darum geht es in der AskTom-Notiz. Es geht nicht darum, ob Ihre Änderungen an Daten in den Block geschrieben werden; Es geht darum, ob sie im Block selbst als Commit markiert sind.
Mein Verständnis ist (im Grunde) das spätere, Dieser Link hat die Details.
Die Datenblöcke müssen nicht geschrieben, nur im Puffer aktualisiert werden, sie können auf die Festplatte geschrieben werden oder nicht. Das Redo muss auf den Datenträger geschrieben werden, bevor das Festschreiben ausgeführt werden kann.
Ich stimme auch für die zweite Version basierend auf
diese Verknüpfung (das ist Oracle 10.2, aber ich denke, es gilt immer noch bis 9.2 auch).
Es sagt: "Nachdem eine Transaktion festgeschrieben wurde, werden rückgängig machende Daten für Rollback- oder Transaktionswiederherstellungszwecke nicht mehr benötigt. Für konsistente Lesezwecke erfordern lang laufende Abfragen jedoch möglicherweise diese alten Rückgängig-Informationen zum Erstellen älterer Bilder von Datenblöcken."
und
"Wenn die automatische Rückgängig-Verwaltung aktiviert ist, gibt es immer eine aktuelle Aufbewahrungsfrist für das Rückgängigmachen. Dies ist die Mindestzeit, die Oracle Database versucht, alte Rückgängig-Informationen beizubehalten, bevor sie überschrieben werden."
Tags und Links oracle transactions ora-01555