Aus der Sicht der Datenbankprogrammierung ist eine Datenbank-LUW eine nicht teilbare Folge von Datenbankoperationen, die mit einem Datenbank-Commit abgeschlossen wird. Die Datenbank-LUW wird vom Datenbanksystem entweder vollständig oder überhaupt nicht ausgeführt. Nach dem erfolgreichen Abschluss einer Datenbank-LUW befindet sich die Datenbank wieder in einem konsistenten Zustand. Wird innerhalb einer Datenbank-LUW ein Fehler entdeckt, so lassen sich alle seit Beginn der Datenbank-LUW gemachten Datenbankänderungen wieder zurücknehmen. Die Datenbank befindet sich anschließend im gleichen Zustand wie vor dem Beginn der Datenbank-LUW.
Datenbankänderungen innerhalb einer Datenbank-LUW werden erst nach einem Datenbank-Commit endgültig auf der Datenbank festgeschrieben. Vorher können sie durch einen Datenbank-Rollback wieder zurückgenommen werden. Im SAP-System werden Datenbank-Commits und Datenbank-Rollbacks entweder implizit oder durch explizite Anforderungen ausgelöst.
Ein Workprozess kann immer nur eine Datenbank-LUW ausführen. Daraus folgt, dass ein Workprozess immer dann eine Datenbank-LUW beenden muss, wenn er seine Aktivität für einen Benutzer am Bildschirm oder einen externen Aufruf beendet hat. Im einzelnen gibt es die folgenden drei Fälle, in denen Workprozesse einen solchen impliziten Datenbank-Commit auslösen:
· Abschluss eines Dialogschritts
Die Kontrolle wechselt vom Workprozess zum SAP GUI.
· Aufruf eines Funktionsbausteins in einem anderen Workprozess (RFC).
Die Kontrolle geht an den anderen Workprozess über.
· Ende des aufgerufenen Funktionsbausteins (RFC) im anderen Workprozess
Die Kontrolle geht an den aufrufenden Workprozess zurück.
· Unterbrechung des Workprozesses mit der Anweisung WAIT.
Die Kontrolle geht an einen anderen Workprozess über.
· Fehlerdialoge (Informations-, Warnungs oder Fehlernachrichten) innerhalb von Dialogschritten
Die Kontrolle geht vom Workprozess an den SAP GUI über.
Um in Anwendungsprogrammen explizite Datenbank-Commits auszulösen, gibt es zwei Möglichkeiten:
· Aufruf des Funktionsbausteins DB_COMMIT
Dieser Funktionsbaustein dient ausschließlich dem Zweck einen Datenbank-Commit abzusetzen.
· Ausführung der ABAP-Anweisung COMMIT WORK
Diese Anweisung führt außer einem Datenbank-Commit weitere Aktivitäten aus (vergleichen Sie die Schlüsslewortdokumentation zu COMMIT WORK).
Folgende Bedingungen führen zu einem impliziten Datenbank-Rollback:
· Laufzeitfehler eines Anwendungsprogramms
Diese Situation tritt auf, wenn ein Anwendungsprogramm aufgrund einer unvorhergesehen Situation (z.B. Division durch Null) die Verarbeitung abbrechen muss.
· Abbruch-Nachricht
Eine Abbruch-Nachricht wird mit der ABAP-Anweisung MESSAGE unter Verwendung der Nachrichtentypen A oder X, in manchen Situationen (Verbuchung) auch bei I, W und E erzeugt. Solch eine Nachricht führt zur Beendigung des aktuellen Anwendungsprogramms.
Ein expliziter Datenbank-Rollback wird durch die Ausführung der ABAP-Anweisung ROLLBACK WORK erreicht. Diese Anweisung führt außer einem Datenbank-Rollback weitere Aktivitäten aus (vergleichen Sie die Schlüsselwortdokumentation zu ROLLBACK WORK).
Aus den hier aufgezählten Punkten ergibt sich die folgende Zusammenstellung von Zeitpunkten, bei denen Datenbank-LUWs beginnen bzw. enden.
· mit jedem Anfang eines Dialogschritts (wenn ein Workprozess belegt wird)
· nach jedem Beenden der vorherigen Datenbank-LUW durch einen Datenbank-Commit
· nach jedem Beenden der vorherigen Datenbank-LUW durch einen Datenbank-Rollback
· mit einem Datenbank-Commit, dabei werden die bisher durchgeführten Änderungen festgeschrieben
· mit einem Datenbank-Rollback, dabei werden die bisherigen Änderungen rückgängig gemacht
Zu einer Datenbank-LUW gehören nicht nur die in ihr ausgeführten Änderungen, sondern auch Datenbanksperren, mit denen das Datenbank-System gewährleistet, dass konkurrierende Änderungen an Daten nicht zu Inkonsistezen führen. Die Lebensdauer von Datenbanksperren ist auf die Lebensdauer einer Datenbank-LUW beschränkt, d.h. am Ende einer Datenbank-LUW werden sie automatisch wieder freigegeben. Für die Programmierung von SAP-LUWs benötigen wir also einen Sperrmechanismus, der Sperren mit größerer Lebensdauer erlaubt (siehe Das SAP-Sperrkonzept).