English
Instant Developer Foundation Documentazione
  • Reference Librerie
  • Libreria Database
  • Libreria Standard
  • Funzioni Client

Isolation Level

copia link

Scopo

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

Database.IsolationLevel := livello

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

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum