JetGetLock-Funktion
Gilt für: Windows | Windows Server
JetGetLock-Funktion
Die JetGetLock-Funktion bietet ein Mittel, um explizit die Möglichkeit zu reservieren, eine Zeile zu aktualisieren, eine Schreibsperre zu schreiben oder explizit zu verhindern, dass eine Zeile von einer anderen Sitzung, lesesperre, aktualisiert wird. Normalerweise werden Zeilenschreibsperren implizit durch das Aktualisieren von Zeilen abgerufen. Lesesperren sind aufgrund der Datensatzversionsverwaltung in der Regel nicht erforderlich. In einigen Fällen möchte eine Transaktion jedoch eine Zeile explizit sperren, um die Serialisierung zu erzwingen, oder um sicherzustellen, dass ein nachfolgender Vorgang erfolgreich ist, wenn die erforderlichen Sperren bereits ausgeführt wurden.
JET_ERR JET_API JetGetLock(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in JET_GRBIT grbit
);
Parameter
sesid
Die Sitzung, die für diesen Aufruf verwendet wird.
tableid
Der Cursor, der für diesen Aufruf verwendet wird.
grbit
Eine Gruppe von Bits, die die Optionen enthalten, die für diesen Aufruf verwendet werden sollen, einschließlich null oder mehr der folgenden Optionen:
Wert |
Bedeutung |
---|---|
JET_bitReadLock |
Dieses Flag bewirkt, dass eine Lesesperre für den aktuellen Datensatz abgerufen wird. Lesesperren sind mit Schreibsperren, die bereits von anderen Sitzungen gehalten wurden, nicht kompatibel, sind aber mit Lesesperren kompatibel, die von anderen Sitzungen gehalten werden. |
JET_bitWriteLock |
Dieses Flag bewirkt, dass eine Schreibsperre für den aktuellen Datensatz abgerufen wird. Schreibsperren sind nicht mit Schreib- oder Lesesperren kompatibel, die von anderen Sitzungen gehalten werden, aber mit Lesesperren, die von derselben Sitzung gehalten werden. |
Rückgabewert
Diese Funktion gibt den JET_ERR-Datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu möglichen ESE-Fehlern finden Sie unter Erweiterbare Speichermodulfehler und Fehlerbehandlungsparameter.
Rückgabecode |
Beschreibung |
---|---|
JET_errSuccess |
Der Vorgang wurde erfolgreich abgeschlossen. |
JET_errClientRequestToStopJetService |
Es ist nicht möglich, den Vorgang abzuschließen, da alle Aktivitäten auf dem instance, die der Sitzung zugeordnet sind, aufgrund eines Aufrufs von JetStopService beendet wurden. |
JET_errInstanceUnavailable |
Es ist nicht möglich, den Vorgang abzuschließen, da beim instance, der der Sitzung zugeordnet ist, ein schwerwiegender Fehler aufgetreten ist, der erfordert, dass der Zugriff auf alle Daten widerrufen wird, um die Integrität dieser Daten zu schützen. Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errInvalidgrbit |
Der angegebene Grbit ist weder JET_bitReadLock noch JET_bitWriteLock. Es muss eines dieser beiden Flags sein. |
JET_errNoCurrentRecord |
Der Cursor muss sich in einem Datensatz befinden, um eine Sperre abzurufen. Sperren sind immer für Datensätze vorhanden. |
JET_errNotInitialized |
Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance noch nicht initialisiert wurde. |
JET_errNotInTransaction |
Sperren können nur von Sitzungen in einer Transaktion abgerufen werden. |
JET_errPermissionDenied |
Der Cursor kann nicht schreibgeschützt sein und erhält eine Schreibsperre. |
JET_errRestoreInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da auf dem der Sitzung zugeordneten instance ein Wiederherstellungsvorgang ausgeführt wird. |
JET_errSessionSharingViolation |
Dieselbe Sitzung kann nicht für mehrere Threads gleichzeitig verwendet werden. Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errTermInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance heruntergefahren wird. |
JET_errTransReadOnly |
Die Sitzung muss über Schreibberechtigungen verfügen, um die Schreibsperre zu erhalten. |
JET_errWriteConflict |
Der Fehler, der zurückgegeben wird, wenn eine in Konflikt stehende Sperre angefordert wird. |
Bei Erfolg hat die Sitzung die angeforderte Sperre erworben.
Bei einem Fehler hat die Sitzung keine angeforderte Sperre erhalten.
Bemerkungen
Schreibsperren können nicht mit Sitzungen oder Cursorn mit schreibgeschützten Berechtigungen abgerufen werden, auch wenn die Sitzung und der Cursor letztendlich keinen Aktualisierungsvorgang ausführen. Sowohl die Sitzung als auch der Cursor müssen Über Schreibberechtigungen verfügen, um eine Schreibsperre zu erhalten.
Lese- und Schreibsperren sind ein Mittel zur pessimistischen Sperrung. Pessimistische Sperren erwarten, dass mehrere gleichzeitige Sitzungen konflikte verursachen und Sperren im Voraus abrufen, um sicherzustellen, dass ihre Vorgänge erfolgreich sind.
Die meisten Vorgänge sind aufgrund impliziter Sperren serialisierbar. Bei einigen Vorgängen ist dies jedoch nicht der Vorgang. Um dies zu veranschaulichen, betrachten Sie die beiden Transaktionen:
T1 : R(A), U(B)
T2 : R(B), U(A)
Die Versionsverwaltung auf Datensatzebene stellt sicher, dass jede Transaktion bei gleichzeitiger Ausführung die ursprünglichen Werte für A und B anzeigt. Es gibt keine serielle Ausführungsreihenfolge, die die gleichen Ergebnisse für A und B erzeugen könnte, falls die Ergebnisse von den gelesenen Daten abhängig sind. Damit die Anwendung diese Transaktion serialisierbar macht, sollte sie eine explizite Lesesperre für A und B in jeder Transaktion abrufen, wenn der Wert gelesen wird.
Anforderungen
Anforderung | Wert |
---|---|
Client |
Erfordert Windows Vista, Windows XP oder Windows 2000 Professional. |
Server |
Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server. |
Kopfzeile |
Deklariert in Esent.h. |
Bibliothek |
Verwenden Sie ESENT.lib. |
DLL |
Erfordert ESENT.dll. |
Weitere Informationen
JET_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate