Transaktionsverarbeitung Flashcards
Was ist ein lost update?
Passiert wenn die änderungen zu ein daten objekt von einer Transaktion durch eine andere Transaktion überschrieben wird.
Was ist ein dirty read?
Passiert wenn eine Transaktion ein Wert lesen darf, das von einer andere Transaktion modifiziert wurde aber nicht in die Datenbank gespeichert wurde
Was ist ein unrepeatable read?
Passiert wenn zwei oder mehr read operationen von derselben Transaktion unterschiedliche werte für dasselbe attribut lesen
Was ist ein phantom read?
Passiert wenn eine Transaktion ein attribut liest, aber wenn es versucht dasselbe attribut nochmal zu lesen kommt ein Fehler der sagt dass das attribut nicht existiert
Verzahnen sie folgende Operationen und Transaktionen so, das ein lost update entsteht!
T1: read(X), X = X + 5
T2: write(X), X = X + 10
T1 | T2
read(X) |
X = X + 5 |
| X = X + 10
| write(X)
Verzahnen sie folgende Operationen und Transaktionen so, das ein dirty read entsteht!
T1: read(X), X = X - 5, write(X), ROLLBACK
T2: read(X), X = X + 5, write(X), commit
T1 | T2
read(X) |
X = X - 5 |
write(X) |
| read(X)
| X = X + 5
| write(X)
ROLLBACK |
| commit
Verzahnen sie folgende Operationen und Transaktionen so, das ein unrepeatable read entsteht!
T1: read(X), write(X)
T2: read(X), read(X)
T1 | T2
read(X) |
| read(X)
write(X) |
| read(X)
Verzahnen sie folgende Operationen und Transaktionen so, das ein phantom read entsteht!
T1: read(X), delete(X)
T2: read(X), read(X)
T1 | T2
read(X) |
| read(X)
delete(X) |
| read(X)
Wofür stehen die Buchstaben in ACID?
-Atomicity, bedeutet “Alles oder nichts”, wenn eine Transaktion gespeichert wird, entweder wird die Transaktion komplett ausgeführt, oder es wird zurückgesetzt
-Consistency, bedeutet das die Integritätsbedingungen nicht verletzt werden. Die Datenbank ist correct vor und nach dem Transaktion, anders gesagt die Datenbank ist in ein “Korrekten” Zustand
-Isolated, bedeutet das mehrere Transaktionen gleichzeitig passieren können ohne zur eine Inconsistenz zu führen. Anders gesagt, veränderungen werden für andere Transaktionen sichtbar erst nach dem sie in der Datenbank gespeichert sind
-Durability, wenn eine Transaktion ausgeführt wird und deren änderungen gespeichert werden, sollen die änderungen permanent sein sprich die Datenbank muss reselient sein gegen System abstürze, etc.
w_i[x]: schreib operation auf x von transaktion i
r_i[x]: lese operation auf x von transaktion i
c_i: commit operation von transaktion i
a_i: abbruch operation von transaktion i
-Bedingung von Seriallisierbar?
-Seriallisierbar wenn kein Zyklus zwischen Transaktionen vorhanden ist
bsp.:
w_1[x]; w_1[y]; c_1; r_2[x]; w_2[z]; c_2; r_3[y]; a_3;
ist serialisierbar da T1->T2, T1->T3
w_i[x]: schreib operation auf x von transaktion i
r_i[x]: lese operation auf x von transaktion i
c_i: commit operation von transaktion i
a_i: abbruch operation von transaktion i
-Bedingung von Rücksetzbarkeit?
-Wenn Transaktion i von Transaktion j liest, muss c_j < c_i oder c_j < a_i
bsp.:
w_1[x]; w_1[y]; c_1; r_2[x]; w_2[z]; c_2; r_3[y]; a_3;
Transaktion 2 liest von Transaktion 1 (x)
Transaktion 3 liest von Transaktion 1 (y)
da c_1 < c_2 und c_1 < a_3 ist es Rücksetzbar
w_i[x]: schreib operation auf x von transaktion i
r_i[x]: lese operation auf x von transaktion i
c_i: commit operation von transaktion i
a_i: abbruch operation von transaktion i
-Bedingung von vermeidet Kask. Rücksetzen?
-Wenn Transaktion i von Transaktion j liest, muss c_j < r_i
bsp.:
w_1[x]; w_1[y]; c_1; r_2[x]; w_2[z]; c_2; r_3[y]; a_3;
Transaktion 2 liest von Transaktion 1
Transaktion 3 liest von Transaktion 1
da c_1 < r_2[x], c_1 < r_3[y] vermeidet es Kask. Rücksetzten
w_i[x]: schreib operation auf x von transaktion i
r_i[x]: lese operation auf x von transaktion i
c_i: commit operation von transaktion i
a_i: abbruch operation von transaktion i
o_i[x]: steht für w_i[x] oder r_i[x]
-Bedingung von Strikt?
-Wenn w_j[x] < o_i[x], muss a_j < o_i[x] oder c_j < o_i[x] gelten
bsp.:
w_1[x]; w_1[y]; c_1; r_2[x]; w_2[z]; c_2; r_3[y]; a_3;
da c_1 < r_2[x], c_1 < r_3[y] ist es strikt
w_i[x]: schreib operation auf x von transaktion i
r_i[x]: lese operation auf x von transaktion i
c_i: commit operation von transaktion i
a_i: abbruch operation von transaktion i
-Bedingung von Seriell?
-Wenn eine Historie Rücksetzbar, und strikt ist, und kaskadiertes rücksetzen vermeidet, ist es Seriell