Ajustando níveis de isolamento da transação
A propriedade de isolamento é uma das quatro propriedades ACID (atomicidade, consistência, isolamento e durabilidade) que uma unidade lógica de trabalho deve ter para que seja qualificada como uma transação. É a habilidade para proteger transações dos efeitos de atualizações executadas por outras transações simultâneas. O nível de isolamento é realmente personalizável para cada transação.
O Mecanismo de banco de dados do SQL Server dá suporte a níveis de isolamento da transação definidos em SQL-92. A definição de níveis de isolamento da transação permite aos programadores trocar o risco crescente de problemas de integridade por maior acesso simultâneo aos dados. Os níveis de isolamento da transação são:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SNAPSHOT
SERIALIZABLE
Com duas exceções, cada nível de isolamento oferece mais isolamento do que o nível anterior mantendo mais bloqueios restritivos para períodos mais longos. As exceções são SNAPSHOT e READ COMMITTED quando READ_COMMITTED_SNAPSHOT é definido como ON. Esses níveis de isolamento não adquirem bloqueios compartilhados em linhas de dados durante operações de leitura. Só são mantidos apenas os bloqueios SCH-S no nível de tabela.
Níveis de isolamento da transação podem ser definidos usando Transact-SQL ou por uma API de banco de dados.
Transact-SQL
Scripts Transact-SQL usam a instrução SET TRANSACTION ISOLATION LEVEL.ADO
Aplicativos ADO definem a propriedade IsolationLevel do objeto Conexão como adXactReadUncommitted, adXactReadCommitted, adXactRepeatableRead ou adXactReadSerializable.ADO.NET
Aplicativos ADO.NET que usam o namespace gerenciado System.Data.SqlClient podem chamar o método SqlConnection.BeginTransaction e podem definir a opção IsolationLevel com Unspecified, Caos, READUNCOMMITTED, READCOMMITTED, REPEATABLEREAD, Serializable e Snapshot.OLE DB
Ao iniciar uma transação, aplicativos que usam chamada OLE DB ITransactionLocal::StartTransaction com isoLevel definidos como ISOLATIONLEVEL_READUNCOMMITTED, ISOLATIONLEVEL_READCOMMITTED, ISOLATIONLEVEL_REPEATABLEREAD, ISOLATIONLEVEL_SNAPSHOT ou ISOLATIONLEVEL_SERIALIZABLE.Ao especificar o nível de isolamento da transação em modo de confirmação automática, aplicativos OLE DB podem definir a propriedade DBPROPSET_SESSION como DBPROP_SESS_AUTOCOMMITISOLEVELS DBPROPVAL_TI_CHAOS, DBPROPVAL_TI_READUNCOMMITTED, DBPROPVAL_TI_BROWSE, DBPROPVAL_TI_CURSORSTABILITY, DBPROPVAL_TI_READCOMMITTED, DBPROPVAL_TI_REPEATABLEREAD, DBPROPVAL_TI_SERIALIZABLE, DBPROPVAL_TI_ISOLATED ou DBPROPVAL_TI_SNAPSHOT.
ODBC
Aplicativos ODBC chamam SQLSetConnectAttr com Attribute definido como SQL_ATTR_TXN_ISOLATION e ValuePtr definido como SQL_TXN_READ_UNCOMMITTED, SQL_TXN_READ_COMMITTED, SQL_TXN_REPEATABLE_READ ou SQL_TXN_SERIALIZABLE.Para transações de instantâneo, aplicativos chamam SQLSetConnectAttr com atributo definido como SQL_COPT_SS_TXN_ISOLATION e ValuePtr definido como SQL_TXN_SS_SNAPSHOT. Uma transação de instantâneo que usa SQL_COPT_SS_TXN_ISOLATION ou SQL_ATTR_TXN_ISOLATION pode ser recuperada.
Consulte também