Home - Programmieren - Datenbanken - Transaktionen
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] TransaktionenSobald ein Benutzer (lesend oder schreibend) auf eine Datenbank zugreift, wird eine Transaktion gestartet. Eine Transaktion kann aus einem oder beliebig vielen Befehlen bestehen, die als ganzes betrachtet werden. Können alle diese Befehle erfolgreich abgearbeitet werden, so ist diese Transaktion erfolgreich. Schlägt auch nur ein einziger Befehl dieser Transaktion fehl, so ist die ganze Transaktion fehlgeschlagen. Die bereits durchgeführten änderungen müssen somit wieder rückgängig gemacht werden.
Eine Transaktion führt die Datenbank immer von einem konsistenten Zustand in einen anderen konsistenten Zustand. Startet die Transaktion aus einem inkonsistenten Zustand, so wird auch der Zustand der Datenbank nach der Transaktion inkonsistent sein. Um diese Inkonsistenzen zu vermeiden, übernimmt das Datenbanksystem die Verwaltung sämtlicher Transaktionen. BeispielEs gibt zwei Konti, Konto A und Konto B. Auf Konto A befindet sich ein Betrag von 5'000 €, auf Konto B sind 2'000 € hinterlegt.
Von Konto A sollen nun 1'000 € auf Konto B überwiesen werden. Dazu sind zwei Teiloperationen notwendig:
Die Datenbank präsentiert sich nach der ersten Operation folgendermassen:
Der Betrag von 1'000 € wurde offenbar von Konto A abgebucht. Nun soll die Gutschrift dieser 1'000 € auf Konto B erfolgen. In diesem Moment stürzt die Anwendung jedoch ab, die zweite Operation kann also nicht durchgeführt werden. Es sind also 1'000 € verloren gegangen. Dies darf keinesfalls passieren! Wären diese beiden Operationen zusammen in einer Transaktion ausgeführt worden, so hätte der Abzug der 1'000 € von Konto A rückgängig gemacht werden können. Die Datenbank würde sich somit selbst nach einem Absturz noch in einem konsistenten Zustand befinden, die Transaktion könnte nach dem Neustart der Anwendung erneut durchgeführt werden. Das Ergebnis sähe dann folgendermassen aus:
Die beiden Operationen wurden gemeinsam ausgeführt, die überweisung von 1'000 € hat also korrekt funktioniert. Dieses Beispiel zeigt, wie wichtig die Verwendung von Transaktionen ist! ACIDEine Transaktion muss über bestimmte Eigenschaften verfügen, einige dieser Eigenschaften wurden in den bisherigen Abschnitten bereits genannt und erläutert. In der Fachliteratur fasst man diese Eigenschaften oftmals unter dem Begriff ACID zusammen. ACID ist eine Abkürzung, die einzelnen Buchstaben bedeuten folgendes:
|
id | trans_id | prev | next | operation | table | row_id | attribute | pre_val | post_val |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
756 | 2563 | NULL | 757 | START | NULL | NULL | NULL | NULL | NULL |
757 | 2563 | 756 | 758 | UPDATE | Konto | 1 | Betrag | 5'000 | 4'000 |
758 | 2563 | 757 | 759 | UPDATE | Konto | 2 | Betrag | 2'000 | 3'000 |
759 | 2563 | 758 | NULL | COMMIT | NULL | NULL | NULL | NULL | NULL |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
Erklärung der einzelnen Spalten:
Neben den einzelnen Teiloperationen werden auch der Start und das Ende einer Transaktion im Transaktionsprotokoll festgehalten. Mithilfe dieser Angaben kann jede Teiloperation einer Transaktion wieder rückgängig gemacht werden, sodass sich die Datenbank danach wieder in einem konsistenten Zustand befindet.
Ein Transaktionsprotokoll stellt für das Datenbanksystem eine zusätzliche Verwaltungsaufgabe und somit eine Performanceeinbusse dar (Overhead). Bei der Massendatenverarbeitung sollte die Möglichkeit geprüft werden, dieses Transaktionsprotokoll zu umgehen.
Das Transaktionsprotokoll ist eine sehr kritische Komponente eines jeden Datenbanksystems. Darum sollte es keinesfalls von Hand mutiert oder sogar gelöscht werden. Da der Zugriff auf das Transaktionsprotokoll sehr schnell erfolgen muss, wird dieses oftmals im Arbeitsspeicher gehalten. Datenbankserver sind somit sehr empfindlich gegen Stromausfälle.