Funzione JetGetLock
Si applica a: Windows | Windows Server
Funzione JetGetLock
La funzione JetGetLock fornisce un mezzo per riservare in modo esplicito la possibilità di aggiornare una riga, un blocco di scrittura o di impedire esplicitamente l'aggiornamento di una riga da qualsiasi altra sessione, blocco di lettura. In genere, i blocchi di scrittura delle righe vengono acquisiti in modo implicito come risultato dell'aggiornamento delle righe. I blocchi di lettura non sono in genere necessari a causa del controllo delle versioni dei record. Tuttavia, in alcuni casi una transazione può voler bloccare in modo esplicito una riga per applicare la serializzazione o per assicurarsi che un'operazione successiva avrà esito positivo in base al fatto che i blocchi necessari siano già stati eseguiti.
JET_ERR JET_API JetGetLock(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in JET_GRBIT grbit
);
Parametri
sesid
Sessione che verrà usata per questa chiamata.
tableid
Cursore che verrà usato per questa chiamata.
grbit
Un gruppo di bit che contengono le opzioni da usare per questa chiamata, che includono zero o più dei seguenti elementi:
Valore |
Significato |
---|---|
JET_bitReadLock |
Questo flag causa l'acquisizione di un blocco di lettura nel record corrente. I blocchi di lettura non sono compatibili con i blocchi di scrittura già mantenuti da altre sessioni, ma sono compatibili con i blocchi di lettura mantenuti da altre sessioni. |
JET_bitWriteLock |
Questo flag causa l'acquisizione di un blocco di scrittura nel record corrente. I blocchi di scrittura non sono compatibili con blocchi di scrittura o lettura mantenuti da altre sessioni, ma sono compatibili con i blocchi di lettura mantenuti dalla stessa sessione. |
Valore restituito
Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sugli errori ESE possibili, vedere Errori del motore di archiviazione estendibili e parametri di gestione degli errori.
Codice restituito |
Descrizione |
---|---|
JET_errSuccess |
Operazione riuscita. |
JET_errClientRequestToStopJetService |
Non è possibile completare l'operazione perché tutte le attività nell'istanza associata alla sessione non sono state interrotte in seguito a una chiamata a JetStopService. |
JET_errInstanceUnavailable |
Non è possibile completare l'operazione perché l'istanza associata alla sessione ha rilevato un errore irreversibile che richiede che l'accesso a tutti i dati venga revocato per proteggere l'integrità dei dati. Questo errore verrà restituito solo da Windows XP e versioni successive. |
JET_errInvalidgrbit |
Il grbit specificato non è JET_bitReadLock o JET_bitWriteLock. Deve essere uno di questi due flag. |
JET_errNoCurrentRecord |
Il cursore deve essere su un record per acquisire un blocco. I blocchi sono sempre presenti nei record. |
JET_errNotInitialized |
Non è possibile completare l'operazione perché l'istanza associata alla sessione non è ancora stata inizializzata. |
JET_errNotInTransaction |
I blocchi possono essere acquisiti solo dalle sessioni in una transazione. |
JET_errPermissionDenied |
Il cursore non può essere letto solo e acquisire un blocco di scrittura. |
JET_errRestoreInProgress |
Non è possibile completare l'operazione perché un'operazione di ripristino è in corso nell'istanza associata alla sessione. |
JET_errSessionSharingViolation |
La stessa sessione non può essere usata contemporaneamente per più thread. Questo errore verrà restituito solo da Windows XP e versioni successive. |
JET_errTermInProgress |
Non è possibile completare l'operazione perché l'istanza associata alla sessione viene arrestata. |
JET_errTransReadOnly |
La sessione deve disporre delle autorizzazioni di scrittura per acquisire il blocco di scrittura. |
JET_errWriteConflict |
Errore restituito quando viene richiesto un blocco in conflitto. |
In caso di esito positivo, la sessione ha acquisito il blocco richiesto.
In caso di errore, la sessione non ha acquisito il blocco richiesto.
Commenti
I blocchi di scrittura non possono essere acquisiti con sessioni o cursori con autorizzazioni di sola lettura, anche se la sessione e il cursore non eseguono un'operazione di aggiornamento. Sia la sessione che il cursore devono avere privilegi di scrittura per acquisire un blocco di scrittura.
I blocchi di lettura e scrittura sono un mezzo di blocco pessimistico. Il blocco pessimistico prevede più sessioni simultanee in conflitto e acquisisce i blocchi in anticipo per garantire che le loro operazioni abbiano esito positivo.
La maggior parte delle operazioni sarà serializzabile a causa di blocchi implicitamente presi. Tuttavia, alcune operazioni non verranno eseguite. Per illustrare questa operazione, considerare le due transazioni,
T1 : R(A), U(B)
T2 : R(B), U(A)
Il controllo delle versioni a livello di record garantisce che ogni transazione eseguita simultaneamente visualizzerà i valori originali per A e B. Non esiste un ordine seriale di esecuzione che potrebbe produrre gli stessi risultati per A e B nel caso in cui i risultati siano dipendenti dalla lettura dei dati. Per rendere serializzabile questa transazione, l'applicazione deve acquisire un blocco di lettura esplicito su A e B in ogni transazione quando il valore viene letto.
Requisiti
Requisito | Valore |
---|---|
Client |
Richiede Windows Vista, Windows XP o Windows 2000 Professional. |
Server |
Richiede Windows Server 2008, Windows Server 2003 o Windows 2000 Server. |
Intestazione |
Dichiarato in Esent.h. |
Libreria |
Usare ESENT.lib. |
DLL |
Richiede ESENT.dll. |
Vedere anche
JET_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate