# Geschachtelte Transaktionen in einem DBMS



## DennisXX (15. Jan 2012)

Hi Folks !

Kann mir vielleicht jemand von euch sagen, wann genau es wirklich Sinn macht in einem DBMS mit verschachtelten Transaktionen zu arbeiten? Oder ist das eher eine Sache, die in der Praxis wenig Relevanz hat (wie evtl. auch das gesamte Thema Transaktionen ansich)?

Greetz
Dennis


----------



## Marcinek (15. Jan 2012)

Was sind geschachtelte Transaktionen?

:bahnhof:

--

Hast du diese Frage schon mal gestellt?

Glorf IT - Bedenkliches aus dem IT-Alltag  Verschachtelte Transaktionen


----------



## turtle (15. Jan 2012)

> Oder ist das eher eine Sache, die in der Praxis wenig Relevanz hat


Ja, hat in der Praxis wenig Relevanz, da viele DB diese nicht unterstützen.



> (wie evtl. auch das gesamte Thema Transaktionen ansich)?


*NEIN,* das ist extrem wichtig!

Wenn Du als Beispiel Geld vom Konto A auf Konto B überweist, möchtest Du ja sicher sein, das beide Kontobuchungen oder keine gemacht werden. Unter keinem Umstand darf es passieren, dass nur eine Kontobuchung gemacht wird.

PS: Geschachtelte Transaktionen findet man häufiger beim Einsatz von Stored procedures. Dabei _weiss _die Prozedur nicht, ob beim Aufruf bereits eine Transaktion offen war oder nicht. Wie damit umgegangen wird, ist eine Sache der DB. In SQL Server beispielsweise wird ein Commit einer inneren Transaktion ignoriert, sondern auf das Verhalten der äusseren Transaktion reagiert.

Solltest Du hier andere Dinge meinen, solltest Du mehr Infos geben?


----------



## California (16. Jan 2012)

Äähm, was Du beschreibst, ist EINE Transaktion.
In einer Transaktion können beliebig viele (ok, ok, keine Millionen) DML*- Anweisungen ausgeführt werden.
Du darfst(!) bei den meisten Datenbanken nicht mehrere Transaktionen gleichzeitig öffnen.
D.h., du musst bei einer Abfolge von Anweisungen vor der ersten Anweisung eine Transaktion eröffnen und nach der letzten Anweisung der Folge die Transaktion Committen oder Rollbacken.
Es kann bei komplizierteren Anwendungen sehr schwierig werden, das manuell zu kontrollieren.

Damit Du die Pfoten nicht durcheinanderkriegst, empfiehlt sich deklaratives Transaktionsmanagement, wie z.B. in Hibernate.
Du sagst mit einer Annotation, welche Funktionen in eine Transaktion gehören, und das Framework weiss, ob es schon eine offene Transaktion gibt oder ob es eine öffnen muss und schliesst die Transaktion nach dem letzten Statement.

* DML ist der Teil von SQL, mit dem Daten geändert werden- grob das, was mit UPDATE, INSERT oder DELETE anfängt...


----------

