Como criar um bloqueio compartilhado bloqueando um bloqueio exclusivo intencional

2

Pelo que entendi, uma instrução SELECT colocará um bloqueio compartilhado nas linhas que ele retornará. Enquanto esse SELECT estiver em execução, se uma instrução UPDATE aparecer e precisar capturar um bloqueio exclusivo intencional, essa instrução UPDATE precisará aguardar até que a instrução SELECT libere seus bloqueios compartilhados.

Eu estou tentando testar essa coisa de bloqueio compartilhado SELECT, fazendo um BEGIN TRAN e, em seguida, executando um SELECT, não COMMITING e, em seguida, executando um UPDATE em outra sessão na mesma linha exata. O UPDATE funcionou bem - sem bloqueio, sem esperar. Portanto, isso não deve ser uma maneira válida de simular um bloqueio compartilhado bloqueando um bloqueio exclusivo intencional? Você pode me dar um cenário onde eu possa criar um bloqueio com um SELECT que forçaria um UPDATE a esperar?

Estou trabalhando com o SQL Server 2000 e 2005 em um servidor vinculado: a tabela está na instância de 2005, a seleção está acontecendo em 2000 e a atualização é executada a partir de 2005. Tudo no SSMS 2005.

    
por FremenFreedom 13.10.2010 / 16:26

1 resposta

0

Você pode alterar os níveis de isolamento de READ COMMITTED para REPEATABLE READ ou SERIALIZABLE para forçar o bloqueio.

    
por 08.03.2011 / 08:19