Eine Historie , auch genannt Schedule , für eine Menge von Transaktionen ist
eine Festlegung für die Reihenfolge sämtlicher relevanter
Datenbankoperationen. Ein Schedule heißt seriell , wenn alle Schritte einer
Transaktion unmittelbar hintereinander ablaufen. Wir unterscheiden nur noch
zwischen read - und write -Operationen.
Zum Beispiel transferiere T1 einen bestimmten Betrag von A nach B und T2 transferiere einen Betrag von C nach A. Eine mögliche Historie zeigt Tabelle 12.4.
Schritt | T1 | T2 |
1. | BOT | |
2. | read( A ) | |
3. | BOT | |
4. | read( C ) | |
5. | write( A ) | |
6. | write( C ) | |
7. | read( B ) | |
8. | write( B ) | |
9. | commit | |
10. | read( A ) | |
11. | write( A ) | |
12. | commit |
Schritt | T1 | T2 |
1. | BOT | |
2. | read( A ) | |
3. | write( A ) | |
4. | read( B ) | |
5. | write( B ) | |
6. | commit | |
7. | BOT | |
8. | read( C ) | |
9. | write( C ) | |
10. | read( A ) | |
11. | write( A ) | |
12. | commit |
Tabelle 12.6 zeigt ein Schedule der Transaktionen T1 und T3 , welches nicht serialisierbar ist.
Schritt | T1 | T3 |
1. | BOT | |
2. | read( A ) | |
3. | write( A ) | |
4. | BOT | |
5. | read( A ) | |
6. | write( A ) | |
7. | read( B ) | |
8. | write( B ) | |
9. | commit | |
10. | read( B ) | |
11. | write( B ) | |
12. | commit |
Im Einzelfall kann die konkrete Anwendungssemantik zu einem äquivalenten seriellen Schedule führen, wie Tabelle 12.7 zeigt.
Schritt | T1 | T3 |
1. | BOT | |
2. | read( A,a1 ) | |
3. | a1 : = a1 - 50 | |
4. | write( A,a1 ) | |
5. | BOT | |
6. | read( A,a2 ) | |
7. | a2 : = a2 - 100 | |
8. | write( A,a2 ) | |
9. | read( B,b2 ) | |
10. | b2 : = b2 + 100 | |
11. | write( B,b2 ) | |
12. | commit | |
13. | read( B,b1 ) | |
14. | b1 : = b1 + 50 | |
15. | write( B,b1 ) | |
16. | commit |
Unter einer anderen Semantik würde T1 einen Betrag von 50,- DM von A nach B überweisen und Transaktion T2 würde beiden Konten jeweils 3 % Zinsen gutschreiben. Tabelle 12.8 zeigt den Ablauf.
Schritt | T1 | T3 |
1. | BOT | |
2. | read( A,a1 ) | |
3. | a1 : = a1 - 50 | |
4. | write( A,a1 ) | |
5. | BOT | |
6. | read( A,a2 ) | |
7. | a2 : = a2*1.03 | |
8. | write( A,a2 ) | |
9. | read( B,b2 ) | |
10. | b2 : = b2*1.03 | |
11. | write( B,b2 ) | |
12. | commit | |
13. | read( B,b1 ) | |
14. | b1 : = b1 + 50 | |
15. | write( B,b1 ) | |
16. | commit |