CORRECÇÃO: Recebe o erro 605 e erro 824 quando executa uma consulta que insere dados na tabela temporária SQL Server

Template: CPR – SQL Server 2008 CU individual hotfix

Erro: #50003826 (correcção SQL)

BUG #: 102328 (Content Maintenance)BUG #: 50003826 (SQL Hotfix)

A Microsoft distribui correcções do Microsoft SQL Server 2008, como um ficheiro para transferência. Uma vez que as correcções são cumulativas, cada nova versão inclui todas as correcções e correcção de todas as correcções de segurança que foram incluídas no anterior do SQL Server 2008.

Sintomas

SQL Server 2008, pode executar uma consulta que insere dados numa tabela temporária. A instrução de inserção contém uma subconsulta que referencia a mesma tabela temporária. Quando executa a consulta, poderá receber uma mensagem de erro semelhante à seguinte:

Msg 605, 21 de nível de estado 3, 1Attempt de linha para obter a página lógica (1:225) na base de dados 2 falhou. Pertence a unidade de atribuição 281474980315136 não para 504403158513025024.

Se executar novamente a consulta, receberá uma mensagem de erro semelhante à seguinte:

Msg 824, nível 24, estado 2, a linha 1

SQL Server detectou um erro de e/s com base em consistência lógico: soma de verificação incorrecta (esperado: 0x50758180; real: 0x15658bfc). Durante a leitura da página (1:336) ocorreu na base de dados ID 2 no deslocamento 0x000000002a0000 no ficheiro ' c:\Programas\Microsoft c:\Programas\Microsoft SQL Server\MSSQL10. SQL2008\MSSQL\DATA\tempdb.mdf'. Mensagens adicionais no SQL Server erro registo ou sistema de registo de eventos poderão fornecer mais detalhes. Esta é uma condição de erro grave que ameace a integridade da base de dados e tem de ser corrigida imediatamente. Conclua a verificação de consistência da base de dados (DBCC CHECKDB). Este erro pode ser causado por vários factores; Para mais informações, consulte SQL Server Books Online.

Em alguns casos, também poderá receber uma mensagem de erro semelhante à seguinte:

Msg 601, nível 12, estado 3, do procedimento procedure nome, número de linhanão foi possível continuar a digitalização com NOLOCK devido à circulação de dados.

Uma construção de consulta possíveis que pode produzir estes erros é o seguinte:

insert #table1select s.col1, s.col2from #table2 s inner loop join #table1 t on s.col3 = t.col3 

Resolução

A correcção deste problema publicada pela primeira vez na actualização cumulativa 3. Para mais informações sobre como obter este pacote de actualização cumulativa para o SQL Server 2008, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

960484 Pacote de actualização cumulativa 3 para SQL Server 2008Nota Uma vez que as compilações são cumulativas, cada edição contém todas as correcções e correcção de todas as correcções de segurança que foram incluídas no anterior do SQL Server 2008. Recomendamos que pense em aplicar a edição de correcção mais recente que contenha esta correcção. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

956909 Cria o SQL Server 2008 que foram disponibilizadas após o lançamento do SQL Server 2008Depois de instalar este pacote de actualização cumulativa, terá de activar o sinalizador de rastreio 4135. Para efectuar este procedimento, pode adicionar a -T4135 o parâmetro de arranque. Ou, pode utilizar a instrução dbcc traceon(4135) para uma sessão específica.

Solução

Para contornar este problema, adicione uma coluna que tenha uma chave primária agrupada e uma propriedade de identidade para a tabela temporária. Por exemplo, execute a seguinte instrução para alterar a tabela temporária:

ALTER TABLE #TempTableADD id integer IDENTITY(1,1) CONSTRAINT id PRIMARY KEY CLUSTERED

Estado

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

Mais Informações

Apesar de encontrar a mensagem de erro 824 ou 605, a base de dados não danificado. Além disso, estas mensagens de erro referenciam páginas da base de dados tempdb.Para mais informações sobre que ficheiros são alterados e para obter informações sobre quaisquer pré-requisitos para aplicar o pacote de actualização cumulativa que contém a correcção descrita neste artigo da Base de dados de conhecimento da Microsoft, clique no número de artigo seguinte para visualizar a artigo na Microsoft Knowledge Base:

960484 Pacote de actualização cumulativa 3 para SQL Server 2008

Informações do BPA do SQL Server 2008 R2

O SQL Server 2008 R2 prática analisador de melhores (SQL Server 2008 R2 BPA) fornece uma regra para detectar situações em que não tem a actualização cumulativa, ou o sinalizador de rastreio activado para resolver este problema. O SQL Server 2008 R2 BPA suporta o SQL Server 2008 e o SQL Server 2008 R2. Se executar a ferramenta BPA e encontrar um "motor de base de dados - tempdb erros, corrigir ou em falta do sinalizador de rastreio" aviso, tem de verificar a versão do SQL Server e os sinalizadores de rastreio que estão configurados para permitir esta correcção.

Referências

Software de regra

Título de regra

Identificador de regra

Regra BPA do SQL Server 2008 R2

erros de TempDB corrigir ou em falta do sinalizador de rastreio

RID3808

Nota Pode activar o sinalizador de rastreio 4135 ou 4199 para activar esta correcção de sinalizador de rastreio. Sinalizador de rastreio 4135 foi introduzido no pacote de actualização cumulativa 3 para SQL Server 2008. Sinalizador de rastreio 4135 também está disponível no SQL Server 2008 Service Pack 1, no SQL Server 2008 Service Pack 2 e no SQL Server 2008 R2. Sinalizador de rastreio 4199 foi introduzido no pacote de actualização cumulativa 7 para SQL Server 2008, no pacote de actualização cumulativa 7 para SQL Server 2008 Service Pack 1 e no pacote de actualização cumulativa 1 para o SQL Server 2008 R2. Para mais informações sobre o sinalizador de rastreio 4199, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

974006 Sinalizador de rastreio 4199 é adicionada ao controlo anteriormente efectuadas várias alterações de optimização de consulta em vários sinalizadores de rastreio Uma vez que a correcção para este problema envolve uma combinação de uma compilação de correcção específico e um sinalizador de rastreio para activar a correcção, incluímos a tabela seguinte para mostrar os diferentes cenários e uma acção recomendada para realizar um para cada cenário.Para mais informações sobre as compilações do SQL Server mais recentes, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

957826 Onde encontrar informações sobre o SQL Server mais recente cria

Call stack information

6338c88c 02ab0ed6 kernel32!RaiseException+0x53
6338c8d8 026b607e sqlservr!CDmpDump::Dump+0x95
6338c910 026b6a49 sqlservr!SQLDumperLibraryInvoke+0x174
6338ca0c 026ae00a sqlservr!CImageHelper::DoMiniDump+0x29d
6338d7bc 026ae713 sqlservr!stackTrace+0x643
6338d7dc 0175ec9e sqlservr!stackTraceCallBack+0x40
6338da74 01222ecb sqlservr!ex_raise2+0x1c6
6338daa0 024b7fb9 sqlservr!ex_raise+0x64
6338dbe8 016dc45c sqlservr!RaiseWrongPageError+0xa7
6338dc54 01006a2e sqlservr!FixPageNotThruLinkage+0x2a5
6338dce0 01006db6 sqlservr!HeapPageManager::GetNextPage+0x185
6338e4a8 015307fd sqlservr!HeapDataSetSession::GetNextRowValuesInternal+0x4df
6338e4f8 015306cc sqlservr!RowsetNewSS::FetchNextRow+0x126
6338e524 01530882 sqlservr!CQScanRowsetNew::GetRowWithPrefetch+0x2b
6338e548 01530182 sqlservr!CQScanTableScanNew::GetRow+0x80
6338e568 015336a5 sqlservr!CQScanHash::ReadRow+0xe9
6338e5ac 01558b24 sqlservr!CQScanHash::ConsumeBuild+0x2bf

Referências

Para mais informações sobre a lista de compilações disponíveis após o lançamento do SQL Server 2008, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

956909 Cria o SQL Server 2008 que foram disponibilizadas após o lançamento do SQL Server 2008Para mais informações sobre o modelo de Assistência Incremental para o SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

935897 Um modelo de Assistência Incremental está disponível a partir da equipa do SQL Server para proporcionar correcções para problemas comunicadosPara mais informações sobre o esquema de atribuição para actualizações do SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

822499Novo esquema de atribuição de nomes para pacotes de actualização de software do Microsoft SQL ServerPara mais informações sobre a terminologia de atualização de software, clique no seguinte número de artigo para visualizar o artigo na Base de Dados de Conhecimento Microsoft:

824684Descrição da terminologia padrão utilizada para descrever as atualizações de software da Microsoft

Author (SME): bruceye
Writer: ericzha
Tech Reviewer: bruceye; wcarroll
Editor: v-janhal

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×