Oracle Archtitektur/ Buffer Cache

Hallo zusammen,

Ich habe eine Frage bezüglich Oracle Architektur (11g).
Wann genau bekommt ein buffer den Status ‚dirty‘ im Buffer Cache?
Bisher habe ich angenommen das das ausschliesslich nach einem
‚commit‘ erfolgt.

Allerding habe ich schon gelesen das Datafiles auch ‚uncommitted
transactions‘ beinhalten können, was bedeuten würde das ein Buffer
alleine schon bei einem INSERT/UPDATE/DELETE ‚dirty‘ wird. Auch ohne
commit.

Vielen Dank für eure Hilfe

Grüße aus Trier

Hi!

Wann genau bekommt ein buffer den Status ‚dirty‘ im Buffer
Cache?
Bisher habe ich angenommen das das ausschliesslich nach einem
‚commit‘ erfolgt.

Was löst ein Commit aus? Zu allererst: Nicht viel: Es wird in die Redo-Logs geschrieben, die SCN erhöht und noch ein paar „Kleinigkeiten“, den Buffer-Cache geht das noch nicht viel an.

Allerding habe ich schon gelesen das Datafiles auch
‚uncommitted
transactions‘ beinhalten können, was bedeuten würde das ein
Buffer
alleine schon bei einem INSERT/UPDATE/DELETE ‚dirty‘ wird.

Naja, _irgendwo_ müssen die Änderungen ja festgehalten sein - wie sonst sollen denn bei einem Commit die manipulierten Daten „gefunden“ werden?
In den „Dirty Buffers“ sind commitierte und nicht commitierte Änderungen.

Und nun: Wo, wie und wann: Wann schreibt Oracle die Dirty Buffers in das Datafile? Wenn die „Grenze“ erreicht ist.
Und wohin schreibt Oracle das alles? Klar ist das Datafile, aber auch die Redo-Logs - und genau aus diesen bezieht Oracle dann, dass es hier nicht commitierte Änderungen gibt.

Wird ganz einfach die SGA zu groß definiert (also der physische Memory ist definitiv zu klein), werden Uncomitted Transactions genauso auf die Files geschrieben (Datafiles, Redo-Logs, …), bevor der Speicher „übergeht“ - allerdings eben auch als nicht commitiert „gekennzeichnet“. Erst beim Commit sind die Änderungen „so richtig“ drinnen und die SCN wird wieder geändert.

Gibt es in der Zwischenzeit einen Crash, schmeißt Oracle die uncommited transactions aufgrund des Instance-Recoverys wieder raus (dazu gibt’s dann die Redo-Logs oder - wenn’s ganz übel ist - die Archive-Logs).
Kurz und gut: Alles, was eine „falsche“ SCN (jene, die im Control-File steht!) hat, wird rausgeschmissen.

Grüße,
Tomh