ID do artigo: 118552 - Última revisão: quinta-feira, 22 de fevereiro de 2007 - Revisão: 5.3

Descrição de manipular condições de bloqueio no SQL Server

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

Um deadlock é uma condição onde processos 2 (ou mais) tentam acessar um recurso que a outra contém um bloqueio. Como cada processo tem uma solicitação de recurso do outro, nenhum processo pode ser concluído. Quando um deadlock é detectado, SQL Server traz de volta a transação que tem o menor tempo e retorna erro de processamento de mensagem 1205 para o aplicativo. Mensagem de erro 1205 finaliza o lote atual e reverte a transação atual.

Mais Informações

Em alguns casos, uma condição de deadlock fará com que um comando de biblioteca (biblioteca de banco de dados) do banco de dados (como dbsqlexec, dbsqlok ou dbresults) para retornar falha. Sempre é de responsabilidade do programa para verificar os códigos de retorno de cada comando de banco de dados biblioteca. Se falha for retornada por um desses comandos de banco de dados biblioteca, o programa deve cancelar o lote e tentará continuar. Em alguns casos, é possível continuar a execução de comandos subseqüentes no lote. No entanto, como uma situação de deadlock ocorreu e o comando que provocou sua foi revertido, comandos posteriores no lote provavelmente falhará com um erro mais grave, como um objeto não encontrado.



Em outros casos, uma condição de bloqueio não fará com que um comando de banco de dados biblioteca para retornar falha. Para lidar com essa condição, o programa deve verificar mensagem 1205 no manipulador de mensagem e use a função dbsetuserdata para se comunicar isso para o seu aplicativo (um exemplo pode ser encontrado no capítulo 4 "biblioteca de banco de dados funções" no SQL Server "Programmer ' s Reference para C" em dbsetuserdata). O programa deve, em seguida, verifique o indicador de bloqueio após cada chamada a biblioteca do banco de dados e deve cancelar o lote se um deadlock é detectado.



Embora possa parecer desnecessária cancelar um lote após receber uma mensagem de bloqueio 1205, é necessário porque o servidor não sempre anular o lote em uma situação de deadlock. Se o lote não for cancelado, qualquer tentativa de enviar um novo lote pode resultar em um erro de biblioteca de banco de dados 10038 "Resultados pendentes".

Você pode encontrar uma descrição de travado e um exemplo de como detectar uma condição de deadlock no "Apêndice E maximização consistência e simultaneidade" no SQL Server para Windows NT "Referência do programador de C".

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 4.21a Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Palavras-chave: 
kbmt kbinfo kbprogramming KB118552 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 118552  (http://support.microsoft.com/kb/118552/en-us/ )