\documentclass{bschlangaul-aufgabe} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe}, Thematik = {PKW}, Referenz = DB.Transaktionsverwaltung.PKW, RelativerPfad = Module/10_DB/60_Transaktionsverwaltung/Aufgabe_PKW.tex, ZitatSchluessel = db:ab:6, ZitatBeschreibung = {Aufgabe 6}, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Transaktionen, Deadlock}, } \begin{enumerate} %% % (a) %% \item Gegeben ist folgende Situation (die nichts mit einer Datenbank zu tun hat!): Vier PKWs kommen gleichzeitig an eine Kreuzung, an der die Rechts-vor-Links-Vorfahrtsregelung gilt. Welches Problem tritt hier auf? \index{Transaktionen} \footcite[Aufgabe 6]{db:ab:6} \begin{bAntwort} Es tritt eine sogenannte Deadlock-Situation\index{Deadlock} auf. Rein theoretisch müsste der Verkehr zum Erliegen kommen, denn jedes Auto müsste einem anderen Auto die Vorfahrt gewähren. Jedes KFZ ist mit einem Verkehrsteilnehmer konfrontiert, der von rechts kommt. \end{bAntwort} %% % (b) %% \item Gegeben sind die Transaktionen $T_1$ und $T_2$. \begin{center} \begin{tabular}{|l|} \hline $T_1$ \\\hline BOT \\\hline $\dots$ \\\hline SELECT F1 FROM TAB \\\hline $\dots$ \\\hline SELECT F2 FROM TAB \\\hline $\dots$ \\\hline COMMIT WORK \\\hline \end{tabular} % \begin{tabular}{|l|} \hline $T_2$ \\\hline BOT \\\hline $\dots$ \\\hline SELECT F2 FROM TAB \\\hline $\dots$ \\\hline SELECT F1 FROM TAB \\\hline $\dots$ \\\hline COMMIT WORK \\\hline \end{tabular} % \begin{tabular}{|l|l|} \hline \multicolumn{2}{|c|}{TAB} \\\hline F1 & F2 \\\hline 2 & 3 \\\hline \end{tabular} \end{center} Geben Sie eine quasiparallele Verarbeitung von $T_1$ und $T_2$ an, bei der es zum „gleichen“ Problem wie in Aufgabe a) kommt. Hinweis: Wir nehmen an, dass eine Spalte F der Tabelle TAB durch \texttt{rlock(F)} bzw. \texttt{xlock(F)} gesperrt werden kann. \begin{bAntwort} In der 8. Zeile entsteht ein Deadlock, da von verschiedenen Transaktionen \texttt{rlocks} auf \texttt{F2} gesetzt wurden. Jetzt will \texttt{$T_1$} auf \texttt{F2} einen \texttt{xlock} setzten, was nicht möglich ist, weil der \texttt{rlock} von \texttt{$T_2$} noch nicht frei gegeben wurde. \begin{tabular}{|l|l|l|l} & $T_1$ & $T_2$ & \\ 1 & BOT & & \\ 2 & & BOT & \\ 3 & rlock(F1) & & \\ 4 & & rlock(F2) & \\ 5 & SELECT F1 FROM TAB & & \\ 6 & rlock(F2) & & \\ 7 & SELECT F2 FROM TAB & & \\ 8 & xlock(F2) & & $\leftarrow$ Deadlock \\ 9 & & SELECT F2 FROM TAB & \\ 10 & UPDATE TAB SET F2 = F1 & & \\ \end{tabular} \end{bAntwort} \end{enumerate} \end{document}