Isolation Level
copia linkScopo
Questa proprietà rappresenta il livello di isolamento delle operazioni eseguite sul database.
Per livello di isolamento di una transazione si intende il tipo di protezione che il database garantisce sulle operazioni eseguite in una transazione rispetto alle modifiche ai dati eseguite contemporaneamente da altri utenti.
Il livello di isolamento entra in gioco anche quando non c'è una esplicita transazione in corso, in questo caso sarà riferito alla singola istruzione SQL di interrogazione o modifica.
Sintassi
Quando letta
Ritorna il livello di isolamento attualmente impostato sul database.
Quando impostata
Modifica il livello di isolamento. Può essere impostata ad uno dei seguenti valori interi: 1, 2, 4, 8. Vedi le note sotto per maggiori informazioni.
Esempio di codice
// Fired before changes in panel are saved to database
// ***************************************************
event NewForm.Categorie.BeforeCommit(
inout boolean Cancel // When set to TRUE, abort deletion
)
{
// Chiudo la connessione perchè voglio cambiare il livello di isolamento
// che voglio usare per salvare i dati del pannello. In realtà la connessione
// non viene effettivamente chiusa, ma solo rimandata nel pool per un attimo
NwindDB.CloseConnection()
NwindDB.IsolationLevel := DUE
}
Esempio di codice
// Fired after changes in panel are saved to database
// **************************************************
event NewForm.Categorie.AfterCommit(
int RowsUpdated // Number of rows inserted or updated
int RowsInErrors // Number of rows that cannot be updated due to database errors
)
{
// Dopo aver salvato i dati torno al livello 1 perchè voglio leggere i dati
// senza problemi di lock
NwindDB.CloseConnection()
NwindDB.IsolationLevel := ONE
}
- Il valore 1 equivale al livello Read Uncommitted (o Dirty Read). In questo caso è possibile leggere i dati modificati da altri utenti anche se le transazioni non sono ancora state confermate. E' quindi possibile leggere dati che saranno smentiti a breve, per questo non è consigliabile utilizzare questo livello di isolamento se non assolutamente necessario.
- Il valore 2 equivale al livello Read Committed. In questo caso è possibile leggere i dati modificati da altri utenti solo se le transazioni sono state confermate. Questo è il livello di isolamento di default ed è quello consigliato per la normalità delle operazioni sul database perchè bilancia in modo equilibrato la concorrenza delle operazioni con la correttezza dei dati letti.
- Il valore 4 equivale al livello Repeatable Read. In questo caso è possibile ripetere ogni istruzione di select effettuata dall'inizio della transazione ottenendo gli stessi dati sulle righe lette precedentemente, potrebbero tuttavia essere lette le nuove righe inserite nel frattempo da altri utenti. Per ottenere questo, il database server blocca ogni possibile scrittura sui dati letti fino alla fine della transazione, posponendo a tale momento il rilascio dei lock di lettura sui record. Questo livello normalmente diminuisce la possibilità di concorrenza delle operazioni sul database ed è quindi consigliato solo se necessario.
- Il valore 8 equivale al livello Serializable. In questo caso è possibile ripetere ogni istruzione di select effettuata dall'inizio della transazione ottenendo gli stessi dati. Questo significa però che normalmente il database server blocca ogni possibile scrittura sull'intera tabella fino alla fine della transazione. Questo livello normalmente diminuisce notevolmente la possibilità di concorrenza delle operazioni sul database ed è quindi consigliato solo se assolutamente necessario.
- Questa proprietà può essere modificata in qualunque momento, tuttavia essa viene comunicata al database al momento del primo utilizzo della connessione per effettuare query o aprire transazioni, nell'ambito della gestione della richiesta attuale del browser. Se allora si desidera modificare il livello di isolamento durante la gestione della richiesta è necessario effettuare una Close esplicita della connessione prima di modificare il livello di isolamento.
Ultima modifica: 17/02/2009 / Validità: da 6.6.2750