Personalizzazione del livello di isolamento delle transazioni

READ COMMITTED è il livello di isolamento predefinito per Microsoft Motore di database di SQL Server. Se per un'applicazione è necessario impostare un livello di isolamento diverso, è possibile utilizzare i metodi seguenti:

  • Eseguire l'istruzione SET TRANSACTION ISOLATION LEVEL.
  • Le applicazioni ADO.NET che utilizzano lo spazio dei nomi gestito System.Data.SqlClient possono specificare un'opzione IsolationLevel utilizzando il metodo SqlConnection.BeginTransaction.
  • Le applicazioni che utilizzano ADO possono impostare la proprietà Autocommit Isolation Levels.
  • Quando si avvia una transazione, le applicazioni che utilizzano OLE DB possono chiamare ITransactionLocal::StartTransaction con isoLevel impostato sul livello di isolamento delle transazioni desiderato. Quando si specifica il livello di isolamento in modalità autocommit, le applicazioni che utilizzano OLE DB possono impostare la proprietà DBPROPSET_SESSION DBPROP_SESSION_AUTOCOMMITISOLEVELS sul livello di isolamento delle transazioni desiderato.
  • Le applicazioni che utilizzano ODBC possono impostare l'attributo SQL_COPT_SS_TXN_ISOLATION utilizzando SQLSetConnectAttr.

Per ulteriori informazioni sull'impostazione dei livelli di isolamento della transazione, vedere Modifica dei livelli di isolamento delle transazioni.

Quando si specifica il livello di isolamento, il comportamento del blocco per tutte le query e le istruzioni DLM nella sessione SQL Server dipende dal livello di isolamento stesso. Il livello di isolamento viene mantenuto come valido fino al termine della sessione o all'impostazione di un livello di isolamento diverso.

Nell'esempio seguente viene impostato il livello di isolamento di SERIALIZABLE:

USE AdventureWorks
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
GO
BEGIN TRANSACTION;
SELECT EmployeeID
    FROM HumanResources.Employee;
GO

Se necessario, il livello di isolamento impostato può essere ignorato per singole query o istruzioni DML specificando hint a livello di tabella, che non hanno alcun effetto sulle altre istruzioni della sessione. È consigliabile utilizzare gli hint a livello di tabella per modificare il funzionamento predefinito del blocco solo se assolutamente necessario.

Potrebbe essere necessario per Motore di database acquisire blocchi durante la lettura dei metadati anche se il livello di isolamento è impostato in modo da non richiedere blocchi di condivisione durante la lettura dei dati. Una transazione in esecuzione con il livello di isolamento Read uncommitted, ad esempio, non acquisisce blocchi di condivisione durante la lettura dei dati, ma potrebbe talvolta richiedere blocchi durante la lettura di una vista del catalogo di sistema. È pertanto possibile che una transazione Read uncommitted provochi un blocco durante l'esecuzione di una query su una tabella quando una transazione simultanea modifica i metadati della tabella.

Per determinare il livello di isolamento attualmente impostato, utilizzare l'istruzione DBCC USEROPTIONS come illustrato nell'esempio seguente. Il set di risultati può variare rispetto a quello del sistema.

USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
DBCC USEROPTIONS;
GO

Set di risultati:

Set Option                   Value                                       
---------------------------- ------------------------------------------- 
textsize                     2147483647
language                     us_english
dateformat                   mdy
datefirst                    7
...                          ...
Isolation level              repeatable read

(14 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Vedere anche

Altre risorse

DBCC USEROPTIONS (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
SELECT (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005