Compartilhar via


Nível de isolamento da transação

Por padrão, o Microsoft SQL Server Compact 4.0 opera em um nível de isolamento de Leitura Confirmada. No entanto, um aplicativo pode precisar operar em um nível de isolamento diferente. Para implementar níveis de isolamento diferentes em aplicativos, você pode personalizar o bloqueio para uma sessão inteira definindo o nível de isolamento da sessão com a instrução SET TRANSACTION ISOLATION LEVEL.

Importante

Embora o nível de isolamento padrão no SQL Server Compact 4.0 seja de Leitura confirmada, usar esse nível não resultará nos bloqueios S que ocorrem quando os dados são lidos. Esse comportamento é diferente do MicrosoftSQL Server. No SQL Server, quando o nível de Leitura confirmada é usado, um bloqueio S é solicitado sempre que a linha é lida e ocorre uma espera quando há um bloqueio conflitante naquela linha. O SQL Server Compact 4.0 não requer um bloqueio S porque versões de páginas de dados são automaticamente mantidas para garantir que os dados confirmados possam ser lidos sem a necessidade de bloqueio. Isso é importante porque, no SQL Server Compact 4.0, operações SELECT não precisam de bloqueios nos dados e quase sempre obtêm êxito. As operações SELECT não aguardarão se alguns dados tiverem um bloqueio X, diferente do SQL Server. A operação SELECT ainda requer um bloqueio Sch-S. Ela falhará somente se a tabela estiver sendo modificada, porque existirá um bloqueio Sch-X conflitante.

Quando o nível de isolamento for especificado, o comportamento de bloqueio de todas as instruções SELECT na sessão do SQL Server Compact 4.0 operará nesse nível de isolamento e permanecerá em vigor até que a sessão seja finalizada ou até que o nível de isolamento seja definido para outro nível. Por exemplo, para definir o nível de isolamento da transação como Serializável e garantir que nenhuma linha fantasma possa ser inserida nas transações simultâneas na tabela Funcionários, use a seguinte instrução SQL:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT EmployeeID FROM Employee;

Você também pode definir o nível de isolamento da transação programaticamente. A seguir, um exemplo de como definir o nível de isolamento da transação usando ADO .NET:

SqlTransaction myTrans;

myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);

Consulte também

Conceitos

Compreendendo o bloqueio

Exibindo informações de bloqueio

Dicas de bloqueio

Tempo limite de bloqueio