Angenommen, es gibt eine Tabelle T mit nur einer Spalte.
Angenommen, das "Undo-Protokoll" ist eine Datenbankdatei, die nicht festgeschriebene Transaktionen enthält, und das "Redo-Protokoll" ist eine Datenbankdatei, die sowohl nicht festgeschriebene als auch festgeschriebene Transaktionen enthält, die noch nicht auf die Datendateien angewendet wurden.
At 8:00 A.M., Transaction 100 inserts rows with values 101, 102 and 103
into table T.
At 8:10 A.M., Transaction 100 is committed and the commit for
transaction 100 completes.
At 8:15 A.M., Transaction 200 updates row 101 to 201, 102 to 202
and 103 to 203.
At 8:20 A.M., Transaction 200 has not been committed and remains
in the undo log of the database.
At 8:25 A.M., Transaction 300 increments each row by 50,
changing row 201 to 251, 202 to 252, and 203 to 253.
At 8:30 A.M., Transaction 300 has not been committed and remains
in the undo log of the database.
At 8:35 A.M., The instance providing access to the database crashes.
At 8:40 A.M., The instance is restarted, and the database files are
opened as the instance is started:
The committed values in T are still 101, 102 and 103.
Since 201, 202, and 203, and 251, 252 and 253
are not committed, if they are written into the "redo
log" of the database, there is a need to "roll back"
the transactions AFTER the "redo log" is applied.
Since 201, 202, and 203, and 251, 252 and 253
are not committed, they are in the "undo log"
of the database.
The undo log of the database is used BOTH to (1) roll
back a transaction that is deliberately rolled
back in the memory structure of the database instance,
and also (2) during the instance recovery at 8:40 A.M.
At 8:41 A.M., The redo log has been applied, and the T table
contains values 251, 252 and 253 in the instance memory.
The undo log has not yet been applied.
At 8:42 A.M., The undo log is applied in the reverse order:
Uncommitted transaction 300 is undone, and
Uncommitted transaction 200 is undone.
Warum werden BEIDE festgeschriebenen und nicht festgeschriebenen Transaktionen in die Redo-Log-Datei geschrieben? Der Grund hierfür ist die Bereitstellung einer Wiederherstellung zu einem bestimmten Zeitpunkt.
Dies bedeutet, dass der Inhalt der Datei "Redo Log" NICHT transaktionskonsistent ist. Aus diesem Grund MUSS das "Rückgängig-Protokoll" immer dann verwendet werden, wenn das Redo-Protokoll verwendet wird, um festgeschriebene Transaktionen auf die Datendateien anzuwenden, um nicht festgeschriebene Transaktionen zurückzusetzen.
Warum werden die Transaktionen im "Undo-Log" in umgekehrter Reihenfolge zurückgesetzt? Die Transaktion 300 hat zu dem vorhandenen Wert jeder Spalte jeder Zeile 50 addiert. Wenn daher die Transaktion 200 zuerst zurückgesetzt wird, ändern sich die Werte von 251, 252 und 253 zu 201, 202 und 203. Wenn die Transaktion 300 dann zuletzt zurückgesetzt würde, wären die Werte 151, 152 und 153 - die nicht übereinstimmen die ursprünglich zugesagten Werte.
VERWEISE:
https://asktom.oracle.com/pls/asktom/f?p=100:11:0:::P11_QUESTION_ID:1670195800346464273