CORRECÇÃO: Consulta com nível de isolamento de transacção definido como READ UNCOMMITTED falha com o erro 601

Traduções de Artigos Traduções de Artigos
Artigo: 815008 - Ver produtos para os quais este artigo se aplica.
N.º DE BUGS: 363988 (SHILOH_BUGS)
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando executa uma consulta com o nível de isolamento transacção definido como READ UNCOMMITTED, o SQL Server 2000 cancela a consulta e devolve a seguinte mensagem de erro:

Servidor: Erro 601, nível de 12, estado 3, linha 14
Não foi possível continuar análise com NOLOCK devido a movimento de dados.

Causa

Este comportamento pode ocorrer quando uma linha numa tabela é eliminada entre a hora que do SQL Server lê a localização da linha de um índice e a hora que do SQL Server obtém a linha.

Resolução

Informações sobre Service Packs

Para resolver este problema, obtenha o service pack mais recente do Microsoft SQL Server 2000. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
290211Como obter o SQL Server 2000 service pack mais recente

Informações sobre a correcção

A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas no formato de hora universal coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário na ferramenta Data e hora no painel de controlo.
Date		Time	Version		Size		 File name
-----------------------------------------------------------------------------

07-Feb-2003	16:14			  786,432 bytes  Distmdl.ldf
07-Feb-2003	16:14			2,359,296 bytes  Distmdl.mdf
29-Jan-2003	12:25			      180 bytes  Drop_repl_hotfix.sql
31-Jan-2003	11:02	2000.80.763.0	1,557,052 bytes	 Dtsui.dll     
29-Jan-2003	15:48			  746,470 bytes  Instdist.sql
29-Jan-2003	12:25	                    1,402 bytes  Inst_repl_hotfix.sql
07-Feb-2003	17:10	2000.80.765.0      90,692 bytes  Msgprox.dll  
29-Jan-2003	11:48	7.0.9466.0        344,064 bytes  Msvcr70.dll      
29-Jan-2003	11:48	2000.80.722.0      57,904 bytes  Osql.exe         
07-Feb-2003	14:23                   1,065,895 bytes  Replmerg.sql
07-Feb-2003	17:10	2000.80.765.0	  221,768 bytes  Replprov.dll     
07-Feb-2003	17:10	2000.80.765.0     307,784 bytes  Replrec.dll      
29-Jan-2003	15:48		   	1,084,318 bytes  Replsys.sql
29-Jan-2003	11:48	2000.80.534.0	  127,548 bytes  Sqdedev.dll    
07-Feb-2003	17:10	2000.80.765.0	  176,696 bytes  Sqlmap70.dll  
07-Feb-2003	17:10	2000.80.765.0	   57,920 bytes  Sqlrepss.dll    
14-Feb-2003	13:22	2000.80.769.0   7,512,145 bytes  Sqlservr.exe   
29-Jan-2003	11:48	2000.80.194.0     180,290 bytes  Sqlunirl.dll     
07-Feb-2003	17:10	2000.80.765.0      45,644 bytes  Sqlvdi.dll   
07-Feb-2003	17:10	2000.80.765.0      82,492 bytes  Ssnetlib.dll     
				
Nota Devido a dependências de ficheiros, a correcção ou funcionalidade que contém os ficheiros mais recentes poderão também conter ficheiros adicionais.


Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".Este problema foi corrigido pela primeira vez no Microsoft SQL Server 2000 Service Pack 4.

Mais Informação

Depois de instalar a correcção, pode utilizar o sinalizador de rastreamento 9134 para alterar o comportamento do SQL Server. Para activar o sinalizador de rastreamento 9134 para que esta opção está activada sempre SQL Server é iniciado, adicione o sinalizador de rastreio como um parâmetro de arranque do SQL Server. Para adicionar o sinalizador de rastreamento 9134 como um parâmetro de arranque do SQL Server, siga estes passos:
  1. No SQL Server Enterprise Manager, clique com o botão direito do rato no servidor que esteja a executar o SQL Server e, em seguida, clique em Propriedades .
  2. No separador Geral , clique em arranque parâmetros .
  3. Na caixa de texto parâmetro , escreva -T9134 , clique em Adicionar e, em seguida, clique em OK .
  4. Em Properties(Configure) do SQL Server < servidor nome > diálogo caixa, clique em OK .
  5. Reinicie o serviço SQL Server para o novo parâmetro entrem em vigor.
Como alternativa, pode executar a seguinte consulta no Query Analyzer para activar dinamicamente o sinalizador de rastreamento:
DBCC TRACEON (9134, -1)
no entanto, se não adicionar o sinalizador de rastreamento 9134 como um parâmetro de arranque, o efeito do comando DBCC TRACEON é perdido quando reinicia o serviço SQL Server.

Quando o sinalizador de rastreamento 9134 está activado e uma linha é eliminada ou modificada entre a hora que do SQL Server lê a localização da linha e o tempo que obtém a linha através de uma pesquisa de marcador, a consulta não cancelar ou devolver o erro 601. Em vez disso, SQL Server ignora a linha que não é possível localizar e continua a procurar linhas adicionais que cumprem os critérios de consulta. Assim, continua a execução da consulta; no entanto, os resultados que devolve o SQL Server podem não incluir linhas que foram eliminadas ou movidas durante a execução da consulta.

Nota As informações neste artigo e o rastreio sinalizador só se aplicam a uma consulta que está a ser executada com o nível de isolamento de transacções definidas para READ UNCOMMITTED. As informações não se aplica a uma consulta é executada com a dica de optimização NOLOCK. Nesse caso, o comportamento permanece inalterado a partir do qual é descrito na secção "Sintomas".

Além disso, o sinalizador de rastreio não afecta o facto de que outras inconsistências de dados e erros podem ocorrer quando ler os dados não consolidados. Para obter mais informações sobre os níveis de isolamento suportados pelo SQL Server e o efeito da utilização de cada nível de isolamento, consulte o tópico "Bloqueio" no SQL Server Books Online.

Microsoft não recomenda a utilização deste sinalizador de rastreio a menos que se aplicam a todos os seguintes:
  • A aplicação em utilização requer um nível de isolamento UNCOMMITTED de leitura.
  • A aplicação a ser utilizada está a ter um grande número de 601 erros.
  • O utilizador compreende que, quando utiliza o sinalizador de rastreio, as linhas que foram eliminadas ou movidas durante a execução da consulta são ignoradas.
Nota Antes de utilizar o nível de isolamento READ UNCOMMITTED, tem de compreender a funcionalidade. Para obter mais informações sobre o nível de isolamento UNCOMMITTED de leitura, visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms171885.aspx

Referências

Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
235880INF: Erro 605 gera o optimizador sugestão UNCOMMITTED leitura NOLOCK ou nível de isolamento do
Para mais informações, visite os seguintes Web sites da MSDN:
Resolução de problemas Erro 601
http://msdn2.microsoft.com/en-us/library/aa258726(SQL.80).aspx
DEFINIR NÍVEL DE ISOLAMENTO DE TRANSACÇÃO
http://msdn2.microsoft.com/en-us/library/aa259216(SQL.80).aspx

Propriedades

Artigo: 815008 - Última revisão: 2 de novembro de 2007 - Revisão: 6.6
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
Palavras-chave: 
kbmt kbhotfixserver kbqfe kbsqlserv2000presp4fix kbbug kberrmsg kbfix KB815008 KbMtpt
Traduçã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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 815008

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com