prev up next


Aufgabe 10.3 (35 Punkte)

Eine Datenbank enthalte drei Seiten $P_A$, $P_B$ und $P_C$, die jeweils zwei Daten mit folgenden Werten enthalten:

Seite $P_A$ $P_B$ $P_C$
Datum $a_1$ $a_2$ $b_1$ $b_2$ $c_1$ $c_2$
Wert 10 40 20 50 30 60

Die folgende Tabelle zeigt die Historie der verzahnten Ausführung zweier Transaktionen $T_1$ und $T_2$ auf dieser Datenbank:

Schritt $T_1$ $T_2$
1. BOT  
2. $r(a_2)$  
3.   BOT
4.   $r(c_1)$
5. $r(b_1)$  
6. $b_2 := a_2 + b_1$  
7.   $r(a_1)$
8. $w(b_2)$  
9.   $a_1 = c_1 + a_1$
10.   $w(a_1)$
11. $r(c_2)$  
12. $c_2 := c_2 + 20$  
13. $w(c_2)$  
14. commit  
15.   $r(b_2)$
16.   $r(c_2)$
17.   $c_1 = c_2 + b_2$
18.   $w(c_1)$
19.   commit

Handelt es sich um eine rücksetzbare Historie?

Erstellen Sie die zu der Historie zugehörige Log-Datei unter Verwendung der physischen Protokollierung.

Angenommen, nach dem 16. Schritt tritt ein Absturz des Datenbanksystems auf. Welche Transaktion ist Winner, welche Loser? Wie sieht der Ablauf des Wiederanlaufs aus und was sind dabei die Redo- und Undo-Operationen?

Begründen Sie jeweils Ihre Antwort!

Musterlösung vom 06.07.2008:

Es handelt sich um eine rücksetzbare Historie. Nur auf die Daten $c_2$ und $b_2$ greifen beide Transaktionen zu, und in beiden Fällen greift $T_2$ erst nach dem commit von $T_1$ zu.

Als Log-Einträge ergeben sich folgende Werte:

Schedule Log
Schritt $T_1$ $T_2$ [LSN, TA, PageID, Redo, Undo, PrevLSN]
1. BOT   [#1, $T_1$, BOT]
2. $r(a_2)$    
3.   BOT [#2, $T_2$, BOT]
4.   $r(c_1)$  
5. $r(b_1)$    
6. $b_2 := a_2 + b_1$    
7.   $r(a_1)$  
8. $w(b_2)$   [#3, $T_1$, $P_B$, $b_2 = 60$, $b_2 = 50$,#1]
9.   $a_1 := c_1 + a_1$  
10.   $w(a_1)$ [#4, $T_2$, $P_A$, $a_1 = 40$, $a_1 = 10$,#2]
11. $r(c_2)$    
12. $c_2 := c_2 + 20$    
13. $w(c_2)$   [#5, $T_1$, $P_C$, $c_2 = 80$, $c_2 = 60$, #3]
14. commit   [#6, $T_1$, commit,#5]
15.   $r(b_2)$  
16.   $r(c_2)$  
17.   $c_1 := c_2 + b_2$  
18.   $w(c_1)$ [#7, $T_2$, $P_C$, $c_1 = 140$, $c_1 = 30$,#4]
19.   commit [#8, $T_2$, commit,#7]

Im Gegensatz zur logischen Protokollierung, bei der jeweils eine logische Undo- und eine Redo-Anweisung für eine Schreiboperation angegeben wird, wird bei der physischen Protokollierung ein Before-Image und ein After-Image, also die konkreten Werte eines Datums vor und nach der Operation in einem Log-Eintrag abgelegt.

Im Falle eines Absturzes nach Schritt 16 ist $T_2$ ein Loser und $T_1$ ein Winner, da $T_1$ im Gegensatz zu $T_2$ ein commit aufweisen kann. Bei einem Wiederanlauf würden die protokollierten Änderungen in richtiger Reihenfolge bis zur Absturzstelle erneut in die Datenbasis eingebracht, anschließend wird die Log-Datei in umgekehrter Richtung durchlaufen, um die Undo-Werte aller Loser-Einträge zurückzuschreiben.


prev up next