Datensatzsperren
Datensatzsperren Funktionsweise von Datensatzsperren
Sperren dienen im Mehrbenutzerbetrieb der Vermeidung von Schreibkonflikten. Um einen Datensatz zu ändern, muss der Benutzer den Datensatz vorher sperren. Für die Dauer der Sperre, kann kein anderer Benutzer den Datensatz zur Veränderung sperren.
Sperrfunktionen
Datensatzsperren können über folgende Funktionen gesetzt und entfernt werden:
RecRead ()– Datensatz lesenRecLink ()– Vernüpften Datensatz lesenRecInsert ()– Datensatz einfügenRecReplace ()– Datensatz ersetzen
Ein Datensatz kann beim Lesen nur gesperrt werden, wenn er über einen eindeutigen Schlüssel oder seine Datensatz-ID gelesen wurde.
Sperroptionen
Bei den Funktionen können die folgenden Sperroptionen verwendet werden:
_RecLock– Sperre anfordern Ist der Datensatz von keinem anderen Benutzer gesperrt, wird eine Sperre gesetzt. Konnte die Sperre gesetzt werden, kann der Datensatz vom eigenen Benutzer erneut gesperrt, ersetzt und gelöscht werden._RecSingleLock– Sperre anfordern (mit Prüfung auf eigene Sperre) Ist der Datensatz von keinem Benutzer gesperrt, wird eine Sperre gesetzt. Konnte die Sperre gesetzt werden, kann der Datensatz vom eigenen Benutzer nicht erneut mit_RecSingleLockgesperrt, jedoch ersetzt und gelöscht werden._RecSharedLock– Gemeinsame Sperre anfordern Ist der Datensatz von keinem anderen Benutzer oder von anderen Benutzern nur gemeinsam gesperrt, wird eine gemeinsame Sperre gesetzt oder hinzugefügt. Konnte die gemeinsame Sperre gesetzt werden, kann der Datensatz auch von anderen Benutzern gemeinsame gesperrt, jedoch nicht ersetzt oder gelöscht werden. Ist nur vom eigenen Benutzer eine gemeinsame Sperre gesetzt, kann die gemeinsame Sperre durch eine einfache Sperre ersetzt werden._RecForceLock– Sperre erzwingen Ist der Datensatz gesperrt, werden die Sperren von allen Benutzern entfernt und durch eine Sperre vom eigenen Benutzer ersetzt. Der Datensatz kann vom eigenen Benutzer erneut gesperrt, ersetzt und gelöscht werden.
Diese Option sollte nur in Ausnahmefällen verwendet werden. Ist von einem Benutzer der Datensatz gesperrt, könnte er diesen nach Änderungen wieder in die Datenbank schreiben wollen. Wird in der Zwischenzeit der Datensatz durch einen anderen Benutzer mit der Option _RecForceLock gesperrt, kann der ursprüngliche Benutzer die geänderten Daten nicht in der Datenbank speichern. Die Daten werden verworfen.
_RecUnlock– Sperre entfernen Ist der Datensatz vom eignen Benutzer gesperrt, wird diese Sperre entfernt.
Eine Sperre bleibt so lange bestehen, bis der Datensatz mit _RecUnlock entsperrt werden.
Verlässt der Benutzer die Datenbank, werden seine bestehenden Sperren aufgehoben. Dies kann je nach Anzahl der Sperren lange dauern. Daher sollten Datensätze entsperrt werden, wenn die Sperre nicht mehr benötigt wird.
Sperrfälle
Folgende Fälle können beim Sperren von Datensätzen auftreten:
Ein Datensatz ist entweder
- nicht gesperrt,
- durch den eigenen Benutzer gesperrt,
- durch einen anderen Benutzer gesperrt oder
- durch den eigenen und andere Benutzer gemeinsam gesperrt.
Ein Benutzer fordert eine Datensatzsperre mit _RecLock an. Dies ist erfolgreich, wenn:
- noch keine Sperre auf dem Datensatz existiert oder
- der Datensatz bisher nur von diesem Benutzer gesperrt ist.
Dies ist nicht erfolgreich, wenn:
- der Datensatz von einem anderen Benutzer gesperrt ist.
Ein Benutzer fordert eine Datensatzsperre mit _RecSingleLock an. Dies ist erfolgreich, wenn:
- noch keine Sperre auf dem Datensatz existiert.
Dies ist nicht erfolgreich, wenn:
- der Datensatz von einem Benutzer, auch dem eigenen, gesperrt ist.
Ein Benutzer fordert eine gemeinsame Datensatzsperre mit _RecSharedLock an. Dies ist erfolgreich, wenn:
- noch keine Sperre auf dem Datensatz existiert,
- der Datensatz vom eigenen Benutzer gesperrt ist oder
- der Datensatz von anderen Benutzern nur gemeinsam gesperrt ist.
Dies ist nicht erfolgreich, wenn:
- der Datensatz von einem anderen Benutzer mit
_RecLockoder_RecSingleLockgesperrt ist.
Ein Benutzer erzwingt eine Datensatzsperre mit _RecForceLock. Dies ist erfolgreich, wenn:
- noch keine Sperre auf dem Datensatz existiert oder
- der Datensatz vom eigenen Benutzer gesperrt ist.
Dies ist nicht erfolgreich, wenn:
- der Datensatz von anderen Benutzern gemeinsam gesperrt ist oder
- der Datensatz in diesem Moment geschrieben oder gelöscht wird.