Anfang des Inhaltsbereichs

Funktionsdokumentation Sperrmechanismus  Dokument im Navigationsbaum lokalisieren

Verwendung

Mit einem logischen Sperrmechanismus können Sie den Zugriff mehrerer Programme auf dieselben Daten synchronisieren. Dieser Sperrmechanismus erfüllt im Wesentlichen zwei Funktionen:

      Ein Programm kann anderen Programmen mitteilen, welche Datensätze es gerade ändert oder liest.

      Ein Programm kann sich davor schützen, Daten zu lesen, die gerade von einem anderen Programm verändert werden.

Funktionsumfang

Die zu sperrenden Datensätze einer Tabelle werden durch eine logische Bedingung festgelegt. Beim Setzen einer Sperre wird diese logische Bedingung in eine Sperrtabelle eingetragen. Dieser Eintrag bleibt solange bestehen, bis er vom Programm wieder aufgehoben wird oder das Programm beendet wird. Bei Programmende werden alle von einem Programm gehaltenen Sperren aufgehoben. Die folgende Abbildung zeigt den Mechanismus zum Sperren einer Tabelle.

Diese Grafik wird im zugehörigen Text erklärt

Beim Zugriff auf Datensätze können die gerade von anderen Programmen bearbeiteten Sätze anhand des Eintrags in der Sperrtabelle identifiziert werden. Ein solcher Eintrag für die Sperre muss eine Reihe voll spezifizierter Schlüsselfelder definieren, d.h. für das Schlüsselfeld wird entweder ein Wert übergeben oder die Sperre für dieses Feld ist generisch.

Sperre setzen

Um Sperren zu setzen, muss im ABAP Dictionary ein Sperrobjekt definiert werden. Wenn Sie dieses Sperrobjekt aktivieren, werden zwei Funktionsbausteine (siehe Funktionsbausteine für Sperranforderungen) mit den Namen ENQUEUE_<Sperrobjektname> und DEQUEUE_<Sperrobjektname> generiert.

Sollen Datensätze gesperrt werden, so muss der Funktionsbaustein ENQUEUE_<Sperrobjektname> aufgerufen werden. Beim Aufruf werden ihm für alle im Sperrobjekt enthaltenen Tabellen die Werte der Schlüsselfelder übergeben, die die zu sperrenden Sätze spezifizieren. Falls nicht für alle Schlüsselfelder ein Wert übergeben wird, erfolgt eine generische Sperre. Der Funktionsbaustein schreibt den entsprechenden Sperreintrag. Weitere Informationen finden Sie unter Beispiel zu Sperrobjekten. Falls ein anderes Programm ebenfalls eine Sperre anfordert, wird dies je nach Sperrmodus akzeptiert oder zurückgewiesen. Weitere Informationen finden Sie unter Kollisionen von Sperren. Das Programm kann dann auf diese Situation reagieren.

Gesperrte Datensätze können durch Aufruf des Funktionsbausteins DEQUEUE_<Sperrobjektname> wieder entsperrt werden. Hierzu müssen diesem Funktionsbaustein die Schlüsselwerte und der Sperrmodus, die zum Setzen der Sperre verwendet wurden, übergeben werden. Die folgende Abbildung zeigt, was passiert, wenn ein Programm den Funktionsbaustein ENQUEUE des Sperrobjekts aufruft.

Diese Grafik wird im zugehörigen Text erklärt

Dieses Sperrverfahren setzt voraus, dass sich alle beteiligten Programme kooperativ verhalten. Falls ein Programm Daten liest oder verändert, ohne sie vorher gesperrt zu haben, kann es zu Inkonsistenzen kommen. Die Datensätze sind also beim Setzen einer Sperre nur dann gegen Änderungen eines anderen Programms geschützt, falls dieses vor dem Zugriff auf die Daten ebenfalls eine Sperre anfordert.

Es besteht auch die Möglichkeit, Sperranforderungen bzw. Sperrfreigaben nicht direkt in die Sperrtabelle zu schreiben, sondern diese zunächst in einem lokalen Sperrcontainer zu sammeln. Diese gesammelten Sperren können dann zu einem späteren Zeitpunkt gemeinsam abgeschickt werden. Ob eine Sperranforderung bzw. Sperrfreigabe direkt abgeschickt wird, wird über einen Parameter des jeweiligen Funktionsbausteins gesteuert.

Weitere Informationen zum Sperrkonzept und zur Funktionsweise der Sperrverwaltung finden Sie unter Das SAP-Sperrkonzept .

 

 

 

Ende des Inhaltsbereichs