Bug: #50003826 (correção do SQL)
A Microsoft distribui correções do Microsoft SQL Server 2008 como um arquivo para download. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior de correções do SQL Server 2008.
Sintomas
No SQL Server 2008, você executa uma consulta que insere dados em uma tabela temporária. A instrução insert contém uma subconsulta que faz referência à mesma tabela temporária. Ao executar a consulta, você pode receber uma mensagem de erro semelhante à seguinte:
Observação
Mensagem 605, Nível 21, Estado 3, Linha 1
Falha na tentativa de buscar a página lógica (1:225) no banco de dados 2. Pertence à unidade de alocação 281474980315136 não a 504403158513025024.
Se executar a consulta novamente, você receberá uma mensagem de erro semelhante à seguinte:
Observação
- Mensagem 824, Nível 24, Estado 2, Linha 1
- SQL Server detectou um erro de E/S baseada em consistência lógica: soma de verificação incorreta (expected: 0x50758180; actual: 0x15658bfc). Ocorreu durante uma leitura da página (1:336) na ID do banco de dados 2 no deslocamento 0x000000002a0000 no arquivo 'C:\Program Files\Microsoft SQL Server\MSSQL10. SQL2008\MSSQL\DATA\tempdb.mdf'. Mensagens adicionais no log de erros do SQL Server ou no log de eventos do sistema podem fornecer mais detalhes. Essa é uma condição de erro grave que ameaça a integridade do banco de dados e deve ser corrigida imediatamente. Concluir uma marca completa de consistência de banco de dados (DBCC CHECKDB). Esse erro pode ser causado por muitos fatores; para obter mais informações, consulte o tópico a seguir nos Manuais Online do SQL Server.
Em alguns casos, você também pode receber uma mensagem de erro semelhante à seguinte:
Observação
Msg 601, Nível 12, Estado 3,Nome do processo de procedimento, Número de linha de linha
Não foi possível continuar a verificação com NOLOCK devido à movimentação de dados.
Uma possível construção de consulta que pode produzir esses erros é a seguinte:
insert #table1
select s.col1, s.col2
from #table2 s inner loop join #table1 t
on s.col3 = t.col3
Resolução
A correção para esse problema foi lançada pela primeira vez na Atualização Cumulativa 3. Para obter mais informações sobre como obter esse pacote de atualizações cumulativas para o SQL Server 2008, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
960484 Pacote de atualizações cumulativas 3 para SQL Server 2008Observação: como os builds são cumulativos, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior de correção do SQL Server 2008. Recomendamos que você considere aplicar a versão de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo da Base de Dados de Conhecimento Microsoft:
956909 As compilações do SQL Server 2008 lançadas após o lançamento do SQL Server 2008Após a instalação deste pacote de atualizações cumulativas, você precisará habilitar o sinalizador de rastreamento 4135. Para fazer isso, você pode adicionar o parâmetro de inicialização -T4135. Ou você pode usar a dbcc traceon(4135) declaração para uma sessão específica.
Solução alternativa
Para contornar esse problema, adicione uma coluna que tenha uma chave primária clusterizada e uma propriedade de identidade à tabela temporária. Por exemplo, execute a seguinte instrução para alterar a tabela temporária:
ALTER TABLE #TempTable
ADD id integer IDENTITY(1,1) CONSTRAINT id PRIMARY KEY CLUSTERED
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais informações
Embora você encontre a mensagem de erro 824 ou 605, o banco de dados não fica corrompido. Além disso, essas mensagens de erro fazem referência a páginas do banco de dados tempdb.
Para obter mais informações sobre quais arquivos são alterados e sobre os pré-requisitos para aplicar o pacote de atualizações cumulativas que contém o hotfix descrito neste artigo da Base de Dados de Conhecimento Microsoft, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
960484 Pacote de atualização cumulativa 3 para SQL Server 2008
Informações do BPA do SQL Server 2008 R2
O Analisador de Práticas Recomendadas do SQL Server 2008 R2 (SQL Server 2008 R2 BPA) fornece uma regra para detectar situações nas quais você não tem a atualização cumulativa ou o sinalizador de rastreamento ativado para resolver esse problema. O SQL Server 2008 R2 BPA é compatível com o SQL Server 2008 e o SQL Server 2008 R2.
Se você executar a ferramenta BPA e encontrar um aviso "Mecanismo de Banco de Dados – correção de erros tempdb ou sinalizador de rastreamento ausentes", deverá marcar a versão do SQL Server e os sinalizadores de rastreamento configurados para habilitar essa correção.
Referências
| Rule software | Título da regra | Identificador de regra |
|---|---|---|
| SQL Server 2008 R2 Regra BPA | Correção de erros de tempdb ou sinalizador de rastreamento ausente | RID3808 |
Observação: você pode habilitar o sinalizador de rastreamento 4135 ou o sinalizador de rastreamento 4199 para habilitar essa correção. O sinalizador de rastreamento 4135 foi introduzido no pacote de Atualização Cumulativa 3 para o SQL Server 2008. O sinalizador de rastreamento 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. O sinalizador de rastreamento 4199 foi introduzido no pacote de Atualização Cumulativa 7 para o SQL Server 2008, no pacote de Atualização Cumulativa 7 para o SQL Server 2008 Service Pack 1 e no pacote de Atualização Cumulativa 1 para o SQL Server 2008 R2. Para obter informações adicionais sobre o sinalizador de rastreamento 4199, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
974006 sinalizador de rastreamento 4199 é adicionado para controlar várias alterações do otimizador de consulta feitas anteriormente sob vários sinalizadores de rastreamento Como a correção desse problema envolve uma combinação de um build de hotfix específico e um sinalizador de rastreamento para habilitar a correção, incluímos a tabela a seguir para mostrar os diferentes cenários e a ação recomendada a ser executada para cada cenário.
Para obter informações adicionais sobre as compilações mais recentes do SQL Server, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
957826 Onde encontrar informações sobre os builds de SQL Server mais recentes
Referências
Para obter mais informações sobre a lista de compilações disponíveis após o lançamento do SQL Server 2008, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
956909 As compilações do SQL Server 2008 lançadas após o SQL Server 2008
Para obter mais informações sobre o Incremental Servicing Model para o SQL Server, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
935897 Um modelo de serviços incrementais disponível da equipe do SQL Server para fornecer hotfixes para problemas relatados
Para obter mais informações sobre o esquema de nomenclatura para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
822499 Novo esquema de nomenclatura para pacotes de atualização de software do Microsoft SQL Server Para obter informações adicionais sobre a terminologia de atualização de segurança, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
824684 Descrição da terminologia padrão usada para descrever as atualizações de software da Microsoft