Ich bin kein DBA und es fällt mir etwas schwer, den Transaktionsmanagementprozess von Oracle zu verstehen.Oracle - Wie funktionieren das Transaktions-, Rollback-Segment und die Undo_retention-Parameter?
Von dem, was ich verstanden, indem sie einige zuverlässige aussehende Seiten im Internet zu lesen (vor allem dieser AskTom note - aber nicht mit den Kommentaren stören), wenn eine Transaktion begangen wird, ist die neue Daten nicht berichtet der eigentliche Datenblock noch, bleibt aber im Rollback-Segment angemeldet. Wenn jemand eine SELECT-Anweisung für die Daten ausgibt oder wenn UNDO_RETENTION-Sekunden verstrichen sind - je nachdem, welches dieser beiden Ereignisse zuerst eintritt - werden die neuen Daten dann (und nur dann) in die Datenblöcke geschrieben.
Aber jemand in unserer Gesellschaft, die angeblich in der wissen, sagte mir vor kurzem das Gegenteil: nach ihm, wenn eine Transaktion die neuen Daten verpflichtet ist, sind sofort auf den Datenblöcken geschrieben, und das Rollback-Segment/rückgängig machen 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.
Danke für diese erschöpfende Antwort. – Manur
Ja, Sie haben recht, dass unsaubere Blöcke vor dem Commit auf die Festplatte geschrieben werden können. Aus diesem Grund kann eine SELECT-Anweisung ein Redo generieren - es muss möglicherweise eine "verzögerte Blockbereinigung" durchgeführt werden. Der wichtige Teil ist, dass ein Commit nur garantiert, dass Redo auf die Festplatte geschrieben wird - nicht die Daten selbst. –