Sperrkonzept
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Basis.
Sehr informativ zum SAP-Sperrkonzept ist dieser SAP-Hilfeartikel.
Sperrmodus
S = Lesesperre
- S = Shared
- Eine Lesesperre kann von mehreren Benutzern gesetzt werden. Sie lesen die Daten im Anzeigemodus. Ist eine Lesesperre gesetzt, wird keine Schreibsperre mehr akeptiert.
E = Schreibsperre
- E = Exclusiv
- Eine Schreibsperre sperrt das Objekt gegen alle anderen Arten von Sperranforderungen anderer Benutzer. Nur derselbe User kann die Sperre erneut kulmativ setzen. Die Sperre müsste dann einer nach der anderen wieder entsperrt werden. Das macht in aller Regel aber keinen Sinn eine Sperre zusätzlich zu setzen.
V = Schreibsperre prüfen
- V = Schreibsperre
- Während die Schreibsperre E das Objekt mit einer Schreibsperre versieht, fragt "V" lediglich die Schreibsperre ab und setzt sie nicht
X = Erweiterte Schreibsperre
- X = Exclusiv non cumulative
- Eine erweiterte Schreibsperre kann auch vom gleichen Benutzer nur 1 x angefordert werden und ist nicht kulmativ möglich.
O = Optimistische Sperre
- O = Optimistic
- Optimistische Sperren verhalten sich zunächst wie Lesesperren. Können dann aber in Schreibsperren umgewandelt werden. Diese Art von Sperren wird sehr selten verwendet werden.
Sperrserver
- Der Sperrserver verwaltet die Sperren.
- Der Sperrserver wird auch Enqueue-Server genannt
- Auch in einem System mit mehreren Applikationsservern kann es nur einen Sperrserver geben
SAP-Sperre und Datenbanksperre
- Eine Datenbanksperre sperrt eine Tabelle innerhalb einer Datenbank-LUW. Eine SAP-Sperre kann sich über mehrere Datenbank-LUWs erstrecken.
CALL FUNCTION 'ENQUEUE_EVVBAKE'
- Hier wurde im Projekt abgefragt, ob beim Kundenauftrag eine Schreibsperre vorliegt (Sperrmodus = V).
- In dem Fall wurde nachfolgend ggf. ein Batch-Input auf die VA02 ausgeführt. Es wurde hier lediglich die Schreibsperre abgefragt werden, um dann bei nicht vorliegender Schreibsperre den Batch-Input auszuführen
CALL FUNCTION 'ENQUEUE_EVVBAKE' EXPORTING mode_vbak = 'V' "Schreibsperre prüfen (aber nicht setzen) * MANDT = SY-MANDT vbeln = if_vbeln * X_VBELN = ' ' * _SCOPE = '2' _wait = 'X' "Es wird etwas gewartet, damit eine 1. Änderung im Report nicht 2. Änderung sperrt * _COLLECT = ' ' EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE i780(29) WITH if_vbeln. "Kundenauftrag & ist gesperrt LEAVE LIST-PROCESSING. ENDIF.
Sperrtabelle
- Die Sperren werden in einer Sperrtabelle verwaltet
- Die Sperrtabelle dient zur Verwaltung der Sperren. Bei jeder Sperranfrage, die den Enqueue-Server erreicht, wird in der Sperrtabelle nachgesehen, ob die Sperranfrage mit einer bestehenden Sperre kollidiert. Wenn ja, wird die Anfrage zurückgewiesen und ein Returncode <> 0 zurückgeschickt. Wenn kein Eintrag in der Sperrtabelle vorhanden ist, wird die neue Sperre in die Sperrtabelle geschrieben.