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

Was ist Undo und Redo in der Oracle-Datenbank?

Viele Leute stellen mir oft diese Fragen

Was ist Rückgängigmachen und Wiederherstellen in der Oracle-Datenbank ? Wozu dient es?

Ich versuche, alle Zweifel darüber hier in der Post auszuräumen

Was ist Rückgängig machen in Oracle?

Undo wird im Undo-Tablespace in der Datenbank gespeichert. Es speichert die Vorher-Werte geänderter Datenblöcke, wenn wir eine Einfüge-, Aktualisierungs- oder Löschanweisung (DML-Vorgang) ausgeben. Wenn wir eine DML-Anweisung ausgeben, werden die geänderten Blöcke im Puffercache und die Vorher-Werte für diese geänderten Blöcke in UNDO-Segmenten gespeichert. Immer wenn wir einen ROLLBACK-Befehl ausgeben, verwendet er das Undo-Segment, um zum vorherigen Wert zurückzukehren .

Es ist genauso wie Undo in Notepad oder Microsoft Word

Das Rückgängigmachen eines Löschvorgangs ist wichtiger als das eines Einfügens. Das liegt daran, dass das Rückgängigmachen eines Löschvorgangs tatsächlich das erneute Einfügen der gesamten Zeile ist. Es hat also Erhaltungswerte für jede der Spalten der Zeile, um das Löschen „rückgängig machen“ zu können.
Umgekehrt ist das Rückgängigmachen einer Einfügung ein Löschen der Zeile durch ROWID – was nicht beibehalten werden muss die Werte werden gelöscht.

Undo bietet uns auch die Lesekonsistenz für einen Benutzer, da er nur die vorherigen Werte sehen kann, bis eine Transaktion festgeschrieben ist. Zur Erklärung möchte ich ein Beispiel geben

Benutzer A startet den Auswahlcursor zum Zeitpunkt t auf der Tabelle. Der Cursor läuft einige Zeit

Benutzer B beginnt zum Zeitpunkt t’ mit der Aktualisierung derselben Tabelle.

Jetzt sollte Nutzer A die lesekonsistente Version der Tabelle zum Zeitpunkt t erhalten. Aber die Blöcke werden nach einiger Zeit von Benutzer B aktualisiert.

Daher verwendet Oracle Undo-Segmente, um das vorherige Image der Aktualisierung für diese Blöcke aus Undo-Segmenten wiederherzustellen, um konsistente Leseansichten zu erhalten

Undo werden nicht sofort nach dem Commit oder Rollback zerstört, da sie im Read-Consistent-Mechanismus verwendet werden.

Sie werden auch in Flashback-Abfragen verwendet, um die alten festgeschriebenen Daten mit Rückgängigmachen der Wiederherstellung anzuzeigen.

Wie lange werden Daten in der Datenbank gespeichert?
Oracle bietet mit Hilfe des Parameters undo_retention Flexibilität, wie lange Undo-Daten gespeichert werden sollen. Wir können den Parameter undo_management auf automatisch setzen, damit Oracle die Rückgängig-Aufbewahrung verwaltet (Standard), oder diesen Wert sogar manuell festlegen, und sein Wert sollte größer sein als die Zeit, die von der am längsten laufenden Abfrage in Ihrer Datenbank benötigt wird. In 11g und höher hat Oracle diesen Parameter automatisch optimiert entsprechend der Größe des Undo-Tablespace

Was ist Transaktion ?
Eine Transaktion ist eine Sammlung von Anweisungen in der SQL-Datenmanipulationssprache (DML), die als logische Einheit behandelt werden.
Das Scheitern einer Anweisung führt dazu, dass die Transaktion „rückgängig gemacht“ wird. Wenn alle Anweisungen verarbeitet werden, wird SQLPlus oder die Programmieranwendung gibt ein COMMIT aus, um Datenbankänderungen dauerhaft zu machen. Transaktionen werden implizit festgeschrieben, wenn ein Benutzer die Verbindung zu Oracle normal trennt.
Anormale Trennungen führen zu einem Rollback der Transaktion Fortschritt.

Was ist Redo in Oracle?

Redo steht für die Aufzeichnung der durchgeführten Arbeiten, damit die Arbeit nicht verloren geht. REDO-Protokolle werden bei der Wiederherstellung verwendet. Wann immer wir etwas in die Datenbank einfügen, geschieht Folgendes:

  1. Zeile in den Puffer einfügen
  2. erzeuge das Rückgängigmachen im Puffer
  3. Schreiben Sie die Redo-Änderungen, d. h. fügen Sie Zeilen in Redo-Protokolle ein
  4. Schreiben Sie die Redo-Änderungen für Undo-Segmente in die Redo-Protokolle

Daher wird jede in der Datenbank durchgeführte DML-Operation zu Wiederherstellungszwecken in den Redo-Protokollen aufgezeichnet

Redo werden zuerst in den Redo-Log-Puffer in SGA geschrieben. Der Log-Writer-Prozess (LGWR) schreibt diese Änderungen aus dem „Redo-Log-Puffer“ in Redo-Log-Dateien auf der Festplatte

Redo-Protokolle helfen bei der Wiederherstellung von Datenverlusten aufgrund menschlicher Fehler, Betriebssystemfehler oder Festplattenfehler.

Redo-Protokolle sind für den Betrieb der Datenbank von entscheidender Bedeutung, da sie Fehlertoleranz bieten.

Bevor die Änderungen in die Tabellen in der Datendatei geschrieben werden, schreibt Oracle zunächst den Redo-Puffer in die Redo-Protokolldatei .

Wir haben die Möglichkeit, für bestimmte Vorgänge keine Protokollierung durchzuführen, um keine Redo-Puffer zu generieren.

Wie Redo-Protokolle funktionieren
Der Oracle-Server zeichnet nacheinander alle an der Datenbank vorgenommenen Änderungen im Redo-Log-Puffer auf. Die Redo-Einträge werden vom LGWR-Prozess aus dem Redo-Log-Puffer in eine der Online-Redo-Log-Gruppen geschrieben, die als aktuelle Online-Redo-Log-Gruppe bezeichnet wird. LGWR schreibt unter
den folgenden Situationen:
• Wenn eine Transaktion festgeschrieben wird
• Wenn der Redo-Log-Puffer zu einem Drittel voll ist
• Wenn mehr als ein Megabyte an geänderten Datensätzen vorhanden ist im Redo-Log-Puffer
• Bevor der DBWn geänderte Blöcke im Datenbank-Puffer-Cache in die Datendateien schreibt
Redo-Logs werden zyklisch verwendet. Jede Redo-Log-Dateigruppe wird durch eine Log-Sequenznummer identifiziert, die bei jeder Wiederverwendung des Logs überschrieben wird. LGWR schreibt sequentiell in die Online-Redo-Log-Dateien. Wenn die aktuelle Online-Redo-Log-Gruppe gefüllt ist, beginnt LGWR mit dem Schreiben an die nächste Gruppe. Dies wird als Protokollwechsel bezeichnet. Wenn die letzte verfügbare Online-Redo-Log-Datei gefüllt ist, kehrt LGWR zur ersten Online-Redo-Log-Gruppe zurück und beginnt erneut mit dem Schreiben.

Verwandte Artikel

So finden Sie Sitzungen, die viele Wiederholungen erzeugen
Änderung der Systemwechsel-Protokolldatei V/S-Archivprotokollaktuelle
Neuerstellung von Redo-Protokolldateien in der Oracle-Datenbank
Senior Oracle DBA-Interviewfragen