Array
(
)

Travamento (Locks do SQL)

Gleyson
   - 07 mai 2004

Estou com um problema no meu trabalho.

Trabalho em um sistema Delphi que usa SQL Server como banco de dados, conectando via BDE (argh).

Algumas vezes houve um travamento do banco de dados na empresa e eu não sabia dizer o que estava causando isso. Descobri que eram tabelas não-marcadas como CLUSTERED. Resolvi esse problema e a maioria dos travamentos parou (o sistema está, inclusive, implantado).

Porém houve outro travamento depois, e descobri que isso se deu devido a uma transação não completada que ficou esperando uma entrada de dados do usuário para terminar. Essa é a primeira pergunta. Uma transação bloqueia as tabelas modificadas até o Commit? Ou foi outra coisa? Eu tenho certeza de que a transação (pelo menos no Delphi) bloqueia as outras tabelas por que um outro caso parecido aconteceu que eu também tinha corrigido.

Agora o pior de todos. Hoje uma moça em uma máquina da qual eu não atualizei o sistema estava visualizando um relatório e o sistema ficou travado até eu reiniciar o serviço MSSQL. Sendo que esse relatório só manda SELECTS para o banco, e nenhum UPDATE ou INSERT, como pode ter bloqueado o banco (já que a tabela principal do sistema é uma das que ficaram bloqueadas).