Als Transaktion (von lat. trans „über“, actio zu agere „(durch)führen“) bezeichnet man in der Informatik eine feste Folge von Operationen, welche als eine logische Einheit betrachtet werden. Transaktionen werden von Transaktionssystemen verarbeitet; diese erzeugen dabei aus mehreren Transaktionen eine Historie. Meist kommen sie bei Datenbanken zum Einsatz.
Inhaltsverzeichnis |
Um sich die wichtigsten Begriffe dieses Artikels anschaulich vorstellen zu können, soll folgendes Beispiel dienen:
Transaktionen werden durch die Markierungen begin of transaction (Abk. BOT) und end of transaction (Abk. EOT, s. Commit) abgegrenzt:
begin of transaction read x write y end of transaction
Die Operationen innerhalb einer Transaktion sind geordnet, ihre Reihenfolge darf also nicht verändert werden. Die Ordnung der Operationen einer Transaktion kann auch als gerichteter Graph dargestellt werden:
![\begin{matrix} r[x] & \rightarrow & w[x] & \rightarrow & r[y] & \rightarrow & c \\ & & & \nearrow \\ & & r[z] \end{matrix}](http://pics.computerbase.de/lexikon/189029/8a73928e7033839202a09d789b7951cb.png)
Diese Darstellung betont die Nebenläufigkeit - also die gleichzeitige Ausführbarkeit - von Operationen. In obigem Beispiel kann die Operation r[z] zeitgleich mit den Operationen r[x] und w[x] ausgeführt werden.
Bei der Ausführung von Transaktionen muss das Transaktionssystem die ACID-Eigenschaften garantieren:
Ziel eines Transaktionssystems ist es stets, möglichst viele Transaktionen in möglichst kurzer Zeit abzuwickeln. Die serielle Ausführung von Transaktionen – also die Ausführung der Transaktionen nacheinander – ist zwar einfach zu realisieren, führt aber oft nicht zu einer optimalen Erfüllung dieses Leistungskriteriums. Transaktionssysteme spalten daher Transaktionen in ihre Operationen auf und setzen diese zu Historien zusammen, wobei selbstverständlich die ACID-Eigenschaften bewahrt bleiben müssen.
Durch diesen Vorgang ergeben sich zwei Möglichkeiten, eine Transaktion zu beenden:
Das Rückgängigmachen der Effekte einer Transaktion wird als Rollback (Zurücksetzen) bezeichnet. Es kann dabei vorkommen, dass das Zurücksetzen einer Transaktion das Zurücksetzen einer anderen Transaktion notwendig macht, was zur Bildung regelrechter Ketten von Zurücksetzungen führen kann; dies wird als kaskadierendes Rücksetzen bezeichnet und ist ein wenig erwünschter Effekt.
Wenn eine Transaktion aufgrund einer anderen Transaktion nicht ausgeführt werden kann, spricht man von einer Blockierung. Wird die erste Transaktion durch die zweite und gleichzeitig die zweite durch die erste blockiert, so spricht man von einem Deadlock (Verklemmung).
Verteilte Transaktionen sind Transaktionen, die in mehreren Teiltransaktionen auf verschiedenen Datenbanken in verteilten Systemen ausgeführt werden. Um die Atomarität verteilter Transaktionen zu gewährleisten, werden entsprechende Commit-Protokolle verwendet. Ein Beispiel ist die Durchführung einer Überweisung auf dem Datenbanksystem der Bank des Überweisers und dem Datenbanksystem der Bank des Empfängers. Geht nach dem Geldtransfer auf der zweiten Bank etwas schief (z.B. Kontonummer ist ungültig), muss das Geld automatisch wieder zurücküberwiesen werden.
Eine Transaktion innerhalb einer Schedule wird als wirkungslos bezeichnet, wenn sie eine der folgenden Bedingungen erfüllt:
Wirkungslos bedeutet in diesem Zusammenhang, dass die Transaktionen keinen Einfluss auf den Datenbestand der Datenbank hatte.