Modifica dei livelli di isolamento delle transazioni
La proprietà di isolamento è una delle quattro proprietà ACID (atomicità, consistenza, isolamento e durevolezza) che un'unità di lavoro logica deve includere per essere considerata una transazione. Questa proprietà corrisponde alla capacità di proteggere le transazioni dagli effetti degli aggiornamenti eseguiti da altre transazioni simultanee. Il livello di isolamento può essere personalizzato per ogni transazione.
Il Motore di database di SQL Server supporta i livelli di isolamento delle transazioni definiti in SQL-92. L'impostazione dei livelli di isolamento delle transazioni consente ai programmatori di controbilanciare il maggior rischio di determinati problemi di integrità tramite il maggior supporto dell'accesso simultaneo ai dati. I livelli di isolamento sono i seguenti:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SNAPSHOT
SERIALIZABLE
Con due eccezioni, ogni livello di isolamento offre un isolamento maggiore rispetto al precedente tramite l'applicazione di blocchi più restrittivi per periodi di tempo più prolungati. Le eccezioni sono SNAPSHOT e READ COMMITTED quando READ_COMMITTED_SNAPSHOT è impostato su ON. Questi livelli di isolamento non acquisiscono blocchi condivisi sulle righe di dati durante le operazioni di lettura. Solo i blocchi SCH-S vengono mantenuti a livello di tabella.
Per impostare i livelli di isolamento delle transazioni, è possibile utilizzare Transact-SQL o un'API di database.
Transact-SQL
Gli script Transact-SQL utilizzano l'istruzione SET TRANSACTION ISOLATION LEVEL.ADO
Nelle applicazioni ADO la proprietà IsolationLevel dell'oggetto Connection viene impostata su adXactReadUncommitted, adXactReadCommitted, adXactRepeatableRead o adXactReadSerializable.ADO.NET
Le applicazioni ADO.NET che utilizzano lo spazio dei nomi gestito System.Data.SqlClient possono chiamare il metodo SqlConnection.BeginTransaction e impostare l'opzione IsolationLevel su Unspecified, Chaos, ReadUncommitted, ReadCommitted, RepeatableRead, Serializable e Snapshot.OLE DB
Quando si avvia una transazione, le applicazioni che utilizzano OLE DB chiamano ITransactionLocal::StartTransaction con l'opzione isoLevel impostata su ISOLATIONLEVEL_READUNCOMMITTED, ISOLATIONLEVEL_READCOMMITTED, ISOLATIONLEVEL_REPEATABLEREAD, ISOLATIONLEVEL_SNAPSHOT o ISOLATIONLEVEL_SERIALIZABLE.Quando si specifica il livello di isolamento delle transazioni in modalità autocommit, le applicazioni OLE DB possono impostare la proprietà DBPROPSET_SESSION DBPROP_SESS_AUTOCOMMITISOLEVELS su DBPROPVAL_TI_CHAOS, DBPROPVAL_TI_READUNCOMMITTED, DBPROPVAL_TI_BROWSE, DBPROPVAL_TI_CURSORSTABILITY, DBPROPVAL_TI_READCOMMITTED, DBPROPVAL_TI_REPEATABLEREAD, DBPROPVAL_TI_SERIALIZABLE, DBPROPVAL_TI_ISOLATED o DBPROPVAL_TI_SNAPSHOT.
ODBC
Le applicazioni ODBC chiamano SQLSetConnectAttr con l'opzione Attribute impostata su SQL_ATTR_TXN_ISOLATION e l'opzione ValuePtr impostata su SQL_TXN_READ_UNCOMMITTED, SQL_TXN_READ_COMMITTED, SQL_TXN_REPEATABLE_READ o SQL_TXN_SERIALIZABLE.Per le transazioni snapshot, le applicazioni chiamano SQLSetConnectAttr con l'opzione Attribute impostata su SQL_COPT_SS_TXN_ISOLATION e l'opzione ValuePtr impostata su SQL_TXN_SS_SNAPSHOT. È possibile recuperare una transazione snapshot utilizzando SQL_COPT_SS_TXN_ISOLATION oppure SQL_ATTR_TXN_ISOLATION.
Vedere anche