Condividi tramite


Livello di isolamento della transazione

Microsoft SQL Server Compact 4.0 funziona, per impostazione predefinita, a un livello di isolamento Read Committed. Tuttavia, potrebbe essere necessario impostare un livello di isolamento diverso per un'applicazione. Per implementare nelle applicazioni livelli di isolamento diversi, è possibile personalizzare il blocco per un'intera sessione impostando il livello di isolamento della sessione con l'istruzione SET TRANSACTION ISOLATION LEVEL.

Importante

Sebbene il livello di isolamento predefinito in SQL Server Compact 4.0 sia Read Committed, l'utilizzo di questo livello di isolamento non determina l'attivazione di blocchi S durante la lettura dei dati. Questo comportamento è diverso da quello di MicrosoftSQL Server. In SQL Server, se si utilizza Read Committed, ogni volta che viene letta una riga viene richiesto un blocco S, che resterà in attesa per verificare l'esistenza di un blocco in conflitto per tale riga. SQL Server Compact 4.0 non richiede un blocco S poiché le versioni delle pagine di dati vengono automaticamente mantenute per garantire la possibilità di leggere i dati di cui è stato eseguito il commit senza dover attivare un blocco. Questo è importante poiché in SQL Server Compact 4.0 non è necessario che sia attivato alcun blocco dalle operazioni SELECT, che vengono quasi sempre completate correttamente. Contrariamente a SQL Server, le operazioni SELECT non restano in attesa per verificare l'esistenza di eventuali blocchi X. L'operazione SELECT richiede tuttavia un blocco Sch-S. L'operazione non verrà completata solo se è in corso una modifica alla tabella, perché il blocco Sch-X provocherà un conflitto.

Quando il livello di isolamento è specificato, il comportamento del blocco per tutte le istruzioni SELECT nella sessione di SQL Server Compact 4.0 opera a tale livello di isolamento e rimane attivo fino al termine della sessione o finché il livello di isolamento non viene impostato su un altro livello. Per impostare il livello di isolamento della transazione su Serializable, ad esempio, e per garantire che nessuna riga fantasma possa essere inserita da transazioni concorrenti nella tabella Employee, utilizzare la seguente istruzione SQL:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT EmployeeID FROM Employee;

È inoltre possibile impostare il livello di isolamento della transazione a livello di programmazione. Di seguito è disponibile un esempio di impostazione del livello di isolamento della transazione tramite ADO .NET:

SqlTransaction myTrans;

myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);

Vedere anche

Concetti

Informazioni sul blocco

Visualizzazione delle informazioni sui blocchi

Hint di blocco

Timeout di blocco