CORRECÇÃO: Você pode receber uma mensagem de erro violação de acesso quando você executar um plano de execução paralela no SQL Server 2005

Traduções deste artigo Traduções deste artigo
ID do artigo: 912885 - Exibir os produtos aos quais esse artigo se aplica.
BUG #: 420246 (SQLBUDT)
A Microsoft distribui correções do Microsoft SQL Server 2005 como um arquivo para download. Como as correções são cumulativas, cada versão nova contém todos os hotfixes e todos os as correções de segurança que foram incluídas com o anterior SQL Server 2005 corrigir lançamento.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo descreve o seguinte sobre esta versão de hotfix:
  • Problemas corrigidos pelo pacote de hotfix
  • Os pré-requisitos para instalar o pacote de hotfix
  • Se é necessário reiniciar o computador depois de instalar o pacote de hotfix
  • Se o pacote de hotfix é substituído por qualquer outro pacote de hotfix
  • Se você deve fazer alterações no registro
  • Arquivos que estão contidos no pacote de hotfix

Sintomas

Microsoft SQL Server 2005, você receberá uma mensagem de erro de violação de acesso quando as seguintes condições forem verdadeiras:
  • Criar um índice que usa a opção IGNORE_DUP_KEY para uma tabela.
  • Você executar uma instrução INSERT que insere uma nova linha este índice.
  • O plano para a instrução INSERT é paralelo.
  • O valor para uma das colunas chave da opção IGNORE_DUP_KEY é fornecido usando um parâmetro.
Além disso, você receberá uma mensagem de erro semelhante à seguinte:
Erro de servidor no comando atual. Os resultados, se houver, devem ser descartados.

Resolução

Informações sobre o hotfix

Um hotfix suportado está disponível no Microsoft. No entanto, esse hotfix destina-se a corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde a próxima atualização de software que contém esse hotfix.

Se o hotfix está disponível para download, há uma seção "Download de Hotfix disponível" na parte superior neste artigo da Base de dados de Conhecimento. Se esta seção não for exibida, contate o atendimento e suporte para obter o hotfix.

Observação Se ocorrerem problemas adicionais ou se qualquer solução de problemas é necessária, talvez você precise criar uma solicitação de serviço separada. Os custos normais de suporte serão aplicados a questões de suporte adicionais e problemas que não se qualificam para esse hotfix específico. Para obter uma lista completa de números de telefone de suporte e Atendimento Microsoft ou para criar uma solicitação de serviço separada, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação O formulário "Download de Hotfix disponível" exibe os idiomas para os quais o hotfix está disponível. Se você não vir seu idioma, é porque um hotfix não está disponível para esse idioma.

Pré-requisitos

Não há nenhum pré-requisito para esse hotfix.

Informações sobre reinicialização

Não é necessário reiniciar o computador após aplicar esse hotfix.

Informações do registro

Não é necessário alterar o registro.

Informações sobre o arquivo

Esse hotfix contém apenas os arquivos que são necessárias para corrigir os problemas que este artigo lista. Este hotfix pode não conter todos os arquivos que você deve ter para actualizar completamente um produto para a compilação mais recente.

A versão em inglês deste hotfix tem atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas no horário de universal coordenado (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário no item Data e hora no painel de controle.
SQL Server 2005 para sistemas com base em 86 x
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Msvcp80.dll8.0.50727.42548,86414 De outubro de 200506: 26x 86
Msvcr80.dll8.0.50727.42626,68814 De outubro de 200506: 26x 86
Sqldiscoveryapi.dll2005.90.1518.0527,06421 De janeiro de 200611: 00x 86
SQL Server 2005 x 64 edition
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Msvcp80.dll8.0.50727.421,097,72814 De outubro de 200518: 46x 64
Msvcr80.dll8.0.50727.42822,78414 De outubro de 200518: 46x 64
Sqldiscoveryapi.dll2005.90.1518.0745,68821 De janeiro de 200604: 14x 64
SQL Server 2005 para sistemas baseados no Itanium
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Msvcp80.dll8.0.50727.421,385,47214 De outubro de 200518: 35IA-64
Msvcr80.dll8.0.50727.421,484,80014 De outubro de 200518: 35IA-64
Sqldiscoveryapi.dll2005.90.1518.01,924,31221 De janeiro de 200603: 30IA-64

Como Contornar

Para contornar esse problema, execute estas etapas:
  1. Determine a instrução INSERT problemática que faz com que a violação de acesso.
  2. Força o otimizador para gerar um plano serial para a instrução INSERT problemático. Portanto, a instrução pode ser executada em um thread.
Observação Se você não pode determinar a instrução INSERT problemática que faz com que a violação de acesso, você pode usar o método descrito no método 3 para contornar este problema.

Para determinar a instrução INSERT problemática que faz com que a violação de acesso, execute essas etapas:
  1. No arquivo de log de erro do SQL Server, localize a mensagem de erro de violação de acesso.
  2. No topo da mensagem de erro de violação de acesso, localize as informações de buffer de entrada.
  3. Localize as informações em lotes que segue as informações de buffer de entrada.

    Observação O lote contém a instrução INSERT problemática que faz com que a violação de acesso.
  4. Se o lote contiver apenas uma instrução INSERT, essa afirmação é exatamente a instrução INSERT problemática. Se o lote tiver várias instruções INSERT, execute as operações a seguir para determinar a instrução INSERT problemática:
    1. No SQL Server Profiler, crie um rastreamento com a instância do SQL Server 2005.
    2. Na categoria de evento erros e avisos , selecione a classe de evento de Realce e a classe de evento de exceção .

      Observação Você pode usar essas classes de evento para determinar a última instrução começa a executar antes da violação de acesso ocorre.

      Se o lote contém apenas instruções Transact-SQL, selecione as seguintes classes de evento adicionais na categoria de evento TSQL :
      • SQL:BatchStarting
      • SQL:BatchCompleted
      • SQL:StmtStarting
      • SQL:StmtCompleted
      Se o lote contém um procedimento armazenado no qual ocorre a violação de acesso, selecione as seguintes classes de evento adicionais na categoria de evento de Procedimentos armazenados :
      • SP: Iniciando
      • SP: concluído
      • SP:StmtStarting
      • SP:StmtCompleted
    3. Execute o mesmo lote do aplicativo cliente.

      Execute esta etapa para reproduzir a violação de acesso. Em seguida, você pode determinar a instrução INSERT problemática. Quando você executar o lote, verifique se o rastreamento está em execução.

      Se o aplicativo cliente não for SQL Server Management Studio, você pode executar manualmente o mesmo lote no SQL Server Management Studio. No entanto, você não pode obter o mesmo plano de execução como o plano original de execução que faz com que o problema. Esse comportamento ocorre se o SQL Server 2005 recompila a instrução INSERT problemática no lote usando um plano de execução diferentes ou usar parâmetros diferentes.
    4. Parar o rastreamento e, em seguida, analisar os resultados de rastreamento para determinar a instrução INSERT problemática. Para determinar a instrução INSERT problemática, determine o SPID que apresentar a violação de acesso e que desconecta o aplicativo cliente. Em seguida, na SPID, observe a instrução INSERT que atende aos seguintes requisitos:
      • A instrução INSERT é iniciada.
      • A mesma instrução INSERT não será concluída.
Para forçar o otimizador para gerar um plano serial para a instrução INSERT problemático, use um dos seguintes métodos.

Método 1

Observação Use este método se você pode acessar a instrução INSERT problemática.

Adicione a expressão OPTION (MAXDOP 1) para a instrução INSERT problemática. A seguir é um exemplo da instrução INSERT novo.
INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2 FROM OtherTable
OPTION (MAXDOP 1) 
Para obter mais informações sobre a dica de consulta MAXDOP, consulte a seção "Usando MAXDOP" no site do Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms181714.aspx

Método 2

Observação Use este método se você não pode acessar a instrução INSERT problemática. Por exemplo, a instrução INSERT problemática é de um aplicativo cliente. No entanto, você não é possível reconfigurar o aplicativo cliente ou você não recompilar o aplicativo cliente para adicionar a expressão OPTION (MAXDOP 1) . Ou, a instrução INSERT problemática em um procedimento armazenado. No entanto, o procedimento armazenado é criptografado. Não é possível alterar as instruções no procedimento armazenado.

Use o procedimento sp_create_plan_guide armazenados contra a instrução INSERT problemático. Fazendo isso, você forçar a expressão OPTION (MAXDOP 1) na instrução INSERT problemática. Este é um exemplo de como usar o procedimento sp_create_plan_guide armazenados.
sp_create_plan_guide @name = N'planguide_for_MyFailingProc', -- Arbitrary name
@stmt = N'INSERT INTO MyOneFailingStatementTable VALUES (@a,@b,@c)', -- The problematic INSERT statement
@type = N'OBJECT', @module_or_batch = N'dbo.MyFailingProc', -- The name of the stored procedure that contains the problematic INSERT statement
@params = NULL, @hints = N'OPTION (MAXDOP 1)'-- Query hint to prevent parallelism
Para obter mais informações sobre o procedimento sp_create_plan_guide armazenados, visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/ms179880.aspx

Método 3

Observação Use este método se uma das seguintes condições for verdadeira:
  • A instrução INSERT problemática é gerada dinamicamente.
  • Não é possível determinar a instrução INSERT que faz com que a violação de acesso.
importante Esse método permite que todas as consultas na instância do SQL Server 2005 para executar em um thread. Não sugerimos que você usa esse método. Esse método pode causar problemas de desempenho em outras consultas que executar na instância.

Execute as seguintes instruções Transact-SQL.
sp_configure 'show advanced options', 1;
GO

RECONFIGURE WITH OVERRIDE;
GO

sp_configure 'max degree of parallelism', 1;
GO

RECONFIGURE WITH OVERRIDE;
GO
Para obter mais informações sobre a opção de nível máximo de paralelismo , visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/ms181007.aspx

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

Para obter mais informações sobre o esquema para nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822499Novo esquema para nomeação para pacotes de atualização de software do Microsoft SQL Server
Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software

Propriedades

ID do artigo: 912885 - Última revisão: terça-feira, 20 de novembro de 2007 - Revisão: 3.5
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium-based Systems Community Technology Preview
Palavras-chave: 
kbmt kbautohotfix kbsql2005engine kbsql2005presp1fix kbhotfixserver kbfix kbbug kbsqlserv2005fix kbqfe kbpubtypekc KB912885 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 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: 912885

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