CORRECÇÃO: Poderá receber uma mensagem de erro de violação de acesso quando executa um plano de execução paralelo no SQL Server 2005

Traduções de Artigos Traduções de Artigos
Artigo: 912885 - Ver produtos para os quais este artigo se aplica.
N.º DE BUGS: 420246 (SQLBUDT)
A Microsoft distribui correcções Microsoft SQL Server 2005 como um ficheiro transferível. Uma vez que as correcções são cumulativas, cada nova versão contém todas as correcções e todas as correcções de segurança incluídas com o SQL Server 2005 anterior corrigir lançamento.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve o seguinte sobre esta versão de correcção:
  • Problemas corrigidos pelo pacote de correcção
  • Pré-requisitos para instalar o pacote de correcções
  • Se tem de reiniciar o computador depois de instalar o pacote de correcção
  • Se o pacote de correcções é substituído por qualquer outro pacote de correcção
  • Se terá de efectuar quaisquer alterações de registo
  • Ficheiros contidos no pacote de correcção

Sintomas

No Microsoft SQL Server 2005, poderá receber uma mensagem de erro de violação de acesso quando se verificam as seguintes condições:
  • Criar um índice que utiliza a opção IGNORE_DUP_KEY para uma tabela.
  • Executa 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 chaves da opção IGNORE_DUP_KEY é fornecido pelo utilizando um parâmetro.
Além disso, poderá receber uma mensagem de erro semelhante à seguinte:
Erro de servidor no comando actual. Os resultados, se existirem, devem ser eliminados.

Resolução

Informações sobre a correcção

Está disponível a partir da Microsoft uma correcção suportada. No entanto, esta correcção destina-se a corrigir o problema descrito neste artigo. Aplique esta correcção apenas em sistemas que tenham este problema específico. Esta correcção poderá submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde pela próxima actualização de software que contenha esta correcção.

Se a correcção está disponível para transferência, existe uma secção "denominada transferência de correcção disponível" na parte superior deste artigo da base de dados de conhecimento. Se esta secção não for apresentado, contacte o serviço de cliente do Microsoft e suporte para obter a correcção.

Nota Se ocorram problemas adicionais ou se for necessária qualquer resolução de problemas, poderá ter de criar um pedido de assistência separado. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem esta correcção específica. Para obter uma lista completa dos números de telefone do suporte de cliente do Microsoft ou para criar um pedido serviço separado, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota O formulário "Transferência de correcção disponível" apresenta os idiomas para a qual a correcção está disponível. Se não vir o idioma, é porque uma correcção não está disponível para esse idioma.

Pré-requisitos

Existem não pré-requisitos para esta correcção.

Informações sobre reinício

Não é necessário reiniciar o computador depois de aplicar esta correcção.

Informações de registo

Não é necessário alterar o registo.

Informações do ficheiro

Esta correcção contém apenas os ficheiros necessários para corrigir os problemas referidos neste artigo. Esta correcção poderá não conter todos os ficheiros que necessita para actualizar completamente um produto para a compilação mais recente.

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 na 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 no item data e hora no painel de controlo.
SQL Server 2005 para sistemas baseados em 86 em x
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Msvcp80.dll8.0.50727.42548,86414-Oct-200506: 26x 86
Msvcr80.dll8.0.50727.42626,68814-Oct-200506: 26x 86
Sqldiscoveryapi.dll2005.90.1518.0527,06421-Janeiro de 200611: 00x 86
SQL Server 2005 x 64 edition
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Msvcp80.dll8.0.50727.421,097,72814-Oct-200518: 46x 64
Msvcr80.dll8.0.50727.42822,78414-Oct-200518: 46x 64
Sqldiscoveryapi.dll2005.90.1518.0745,68821-Janeiro de 200604: 14x 64
SQL Server 2005 para sistemas baseados em Itanium
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Msvcp80.dll8.0.50727.421,385,47214-Oct-200518: 35IA-64
Msvcr80.dll8.0.50727.421,484,80014-Oct-200518: 35IA-64
Sqldiscoveryapi.dll2005.90.1518.01,924,31221-Janeiro de 200603: 30IA-64

Como contornar

Para contornar este problema, siga estes passos:
  1. Determine a instrução INSERT problemática que faz com que a violação de acesso.
  2. Força o Optimizador de consultas para gerar um plano de série para a instrução INSERT problemático. Por este motivo, a instrução pode ser executada num thread.
Nota Se não conseguir determinar a instrução INSERT problemática que faz com que a violação de acesso, pode utilizar 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, siga estes passos:
  1. No ficheiro de registo do erro de SQL Server, localize a mensagem de erro de violação de acesso.
  2. Junto da parte superior da mensagem de erro de violação de acesso, localize as informações da memória intermédia de entrada.
  3. Localize as informações batch que se segue as informações de memória intermédia de entrada.

    Nota A secção contém a instrução INSERT problemática que faz com que a violação de acesso.
  4. Se a secção contém apenas uma instrução INSERT, esta instrução é exactamente a instrução INSERT problemática. Se a secção contém várias instruções INSERT, efectue as operações seguintes para determinar a instrução INSERT problemática:
    1. No SQL Server Profiler, crie um rastreio de instância do SQL Server 2005.
    2. Na categoria de evento erros e avisos , seleccione a classe de evento atenção e a classe de evento de excepção .

      Nota Pode utilizar estas classes de evento para determinar a última instrução que começa a ser executado antes de ocorre a violação de acesso.

      Se a secção contém instruções de Transact-SQL, seleccione as seguintes classes eventos adicionais na categoria de evento TSQL :
      • SQL:BatchStarting
      • SQL:BatchCompleted
      • SQL:StmtStarting
      • SQL
      Se a secção contém um procedimento armazenado na qual ocorre a violação de acesso, seleccione as seguintes classes eventos adicionais na categoria de evento de Procedimentos armazenados :
      • SP: Iniciar
      • SP: concluída
      • SP:StmtStarting
      • SP:StmtCompleted
    3. Execute mesmo batch a partir da aplicação cliente.

      Seguir este passo para reproduzir a violação de acesso. Em seguida, pode determinar a instrução INSERT problemática. Quando executa a secção, certifique-se que o rastreio está em execução.

      Se a aplicação cliente não for SQL Server Management Studio, poderá executar manualmente também mesmo batch no SQL Server Management Studio. No entanto, não poderá obter o mesmo plano de execução como o plano original de execução que causa o problema. Este comportamento ocorre se o SQL Server 2005 recompila a instrução INSERT problemática no lote utilizando um plano de execução diferentes ou utilizar parâmetros diferentes.
    4. Parar o rastreio e, em seguida, analisar os resultados de rastreio para determinar a instrução INSERT problemática. Para determinar a instrução INSERT problemática, determine o SPID experiências que a violação de acesso e que desliga a aplicação cliente. Em seguida, sobre o SPID, repare a instrução INSERT que cumpre os seguintes requisitos:
      • A instrução INSERT é iniciada.
      • A instrução INSERT mesma não for concluída.
Para forçar o Optimizador de consultas para gerar um plano de série para a instrução INSERT problemático, utilize um dos seguintes métodos.

Método 1

Nota Utilize este método se conseguir aceder a instrução INSERT problemática.

Adicione a expressão OPTION (MAXDOP 1) para a instrução INSERT problemática. Segue-se 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 secção "Utilizar MAXDOP" no seguinte Web site da MSDN (Microsoft Developer Network):
http://msdn2.microsoft.com/en-us/library/ms181714.aspx

Método 2

Nota Utilize este método se não conseguir aceder a instrução INSERT problemática. Por exemplo, a instrução INSERT problemática é de uma aplicação cliente. No entanto, não é possível reconfigurar a aplicação cliente ou não recompilar o aplicativo cliente para adicionar a expressão OPTION (MAXDOP 1) . Ou, a instrução INSERT problemática está a ser um procedimento armazenado. No entanto, o procedimento armazenado é encriptado. Não é possível alterar as instruções no procedimento armazenado.

Utilize o procedimento sp_create_plan_guide armazenadas com a instrução INSERT problemático. Ao fazê-lo, forçar a expressão OPTION (MAXDOP 1) na instrução INSERT problemática. Segue-se um exemplo de como utilizar 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 mais informações sobre o procedimento armazenado sp_create_plan_guide , visite o site da Web MSDN seguinte:
http://msdn2.microsoft.com/en-us/library/ms179880.aspx

Método 3

Nota Utilize 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 Este método permite todas as consultas na instância do SQL Server 2005 para executar um thread. Sugerimos-não utilizar este método. Este método poderá causar problemas de desempenho em outras consultas que são executados na instância.

Execute as seguintes instruções de 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 mais informações sobre a opção máximo grau de parallelism , visite o seguinte site da Web MSDN:
http://msdn2.microsoft.com/en-us/library/ms181007.aspx

Ponto Da Situação

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

Mais Informação

Para obter mais informações sobre o esquema de atribuição de nomes para as actualizações do SQL Server, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
822499Novo esquema de atribuição de nomes de ficheiros para pacotes de actualização de software do Microsoft SQL Server
Para obter mais informações sobre a terminologia de actualização de software, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Propriedades

Artigo: 912885 - Última revisão: 20 de novembro de 2007 - Revisão: 3.5
A informação contida neste artigo aplica-se a:
  • Microsoft SQL 2005 Server Enterprise
  • 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 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: 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