Partilhar via


Tempo limite de bloqueio

Quando o Microsoft SQL Server Compact 4.0 não pode conceder um bloqueio para uma transação em um recurso porque outra transação já possui um bloqueio conflitante nesse recurso, a transação que está solicitando o bloqueio fica bloqueada até que a outra transação libere o bloqueio. Essa situação também pode resultar de um deadlock. O SQL Server Compact 4.0 possui um tempo limite padrão de dois segundos. Não existe nenhuma forma de testar se um recurso está bloqueado antes de bloqueá-lo, exceto a tentativa de acessar os dados e potencialmente atingir o tempo limite.

Dica

Você pode usar a exibição do sistema sys.lock_information para determinar se uma solicitação de bloqueio está sendo bloqueada e para ajudar a determinar o que está causando esse bloqueio. Para obter mais informações, consulte Exibindo informações de bloqueio.

A configuração LOCK_TIMEOUT permite que um aplicativo defina um tempo máximo para que uma instrução espere um recurso bloqueado. Quando uma instrução espera por mais tempo do que a configuração LOCK_TIMEOUT, a instrução bloqueada é cancelada automaticamente e a mensagem de erro SSCE_M_LOCKTIMEOUT "O sistema atingiu o tempo limite aguardando por um bloqueio" é retornada ao aplicativo. No entanto, o SQL Server Compact 4.0 não reverte ou cancela nenhuma transação que contenha a instrução. O aplicativo deve ter um manipulador de erro que possa interceptar a mensagem de erro SSCE_M_LOCKTIMEOUT. Se um aplicativo não interceptar o erro, ele poderá prosseguir sem saber que uma determinada instrução em uma transação foi cancelada. Podem ocorrer erros porque instruções posteriores na transação podem depender da instrução que não foi executada.

A implementação de um manipulador de erro que intercepte a mensagem de erro SSCE_M_LOCKTIMEOUT permite que um aplicativo possa lidar com a situação de tempo limite e execute uma ação para corrigir a situação, como automaticamente enviar novamente a instrução que foi bloqueada ou reverter toda a transação.

Para definir a configuração LOCK_TIMEOUT atual para uma sessão, execute a sintaxe SET LOCK_TIMEOUT, como mostra o seguinte exemplo de código:

SET LOCK_TIMEOUT 2000;

Consulte também

Conceitos

Compreendendo o bloqueio

Nível de isolamento da transação

Dicas de bloqueio