Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Warum erstellt Oracle einen Redo-Änderungsvektor, der die Änderung am Undo-Block beschreibt, wenn der Benutzer eine Anweisung zum Ändern eines Datenelements ausgibt

Angenommen, Sie haben eine unvollendete (nicht festgeschriebene) Transaktion. Oracle hat alles getan, was Sie in der Frage gesagt haben.

Jetzt stürzt die Maschine ab.

Der DBA stellt nach der Wiederherstellung der Maschine (oder auf einer neuen Maschine, das hängt davon ab :)) die letzte Sicherung wieder her und wendet alle Redo-Protokolle an auf der neuen Instanz. In der Wiederherstellung ist auch das, was in Schritt 1 getan wurde. Aber diese Arbeit wird nicht festgeschrieben, also muss die Engine sie zurücksetzen. Dazu benötigt es das Rollback-Segment. Aber das Rollback-Segment wird nicht vorhanden sein, wenn Sie es nicht in Schritt 3 protokolliert haben.

Ich weiß, dass Sie jetzt fragen werden:Warum werden Protokolle für nicht festgeschriebene Arbeit angewendet? Das war auch meine Frage, als ich davon gelesen habe. Ich weiß es nicht genau, aber vielleicht ist es einfacher, dies zu tun. Vielleicht ist es schwieriger, für jeden Eintrag des Protokolls zu überprüfen, ob er Teil einer festgeschriebenen Transaktion ist. So funktioniert Oracle jedoch:Ich wende alle Redo-Protokolle an und setze dann nicht festgeschriebene Transaktionen zurück.