Erro 17066 ou 17310 durante a inicialização do SQL Server

Aplica-se a
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Express SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Express SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Express Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Express Edition

Sintomas

Durante a inicialização do Microsoft SQL Server, você observa um ou mais dos seguintes sintomas imediatamente após a conclusão da recuperação do banco de dados e a habilitação das conexões do cliente.

Sintoma 1

Você recebe mensagens de erro e afirmações semelhantes às seguintes no log de erros do SQL Server:

Observação

2014-12-13 08:03:34.85 spid24s Usando 'dbghelp.dll' versão '4.0.5'
2014-12-13 08:03:34.85 spid24s **Thread de despejo - spid = 0, EC = 0x0000000082274B20
2014-12-13 08:03:34.85 spid24s ***Stack Dump sendo enviado para C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0001.txt
2014-12-13 08:03:34.85 spid24s * *******************************************************************************
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:34.85 spid24s * BEGIN STACK DUMP:
2014-12-13 08:03:34.85 spid24s * 12/13/14 08:03:34 spid 24
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:34.85 spid24s * Localização: ghost.cpp:1742
2014-12-13 08:03:34.85 spid24s * Expressão: tcln1 != NULL
2014-12-13 08:03:34.85 spid24s * SPID: 24
2014-12-13 08:03:34.85 spid24s * Identificação do processo: 35444
2014-12-13 08:03:34.85 spid24s *

2014-12-13 08:03:35.47 spid24s Erro: 17066, Severidade: 16, Estado: 1.
2014-12-13 08:03:35.47 spid24s SQL Server Declaração: Arquivo: <ghost.cpp>, line=1742 Falha Assertion = 'tcln1 != NULL'. Esse erro pode estar relacionado ao tempo. Se o erro persistir após a execução da instrução, use DBCC CHECKDB para marcar a integridade estrutural do banco de dados ou reinicie o servidor para garantir que as estruturas de dados na memória não sejam corrompidas.

Sintoma 2

Você recebe mensagens de erro e exceções semelhantes às seguintes no log de erros do SQL Server:

Observação

2014-12-13 12:38:30.25 spid51 Usando 'dbghelp.dll' versão '4.0.5'
2014-12-13 12:38:30.25 spid51 ***Despejo de pilha sendo enviado para C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0003.txt
2014-12-13 12:38:30.25 spid51 SqlDumpExceptionHandler: Processo 51 gerou a exceção fatal c0000005 EXCEPTION_ACCESS_VIOLATION. O SQL Server está encerrando esse processo.
2014-12-13 12:38:30.25 spid51 * *******************************************************************************
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 * BEGIN STACK DUMP:
2014-12-13 12:38:30.25 spid51 * 12/13/14 12:38:30 spid 51
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 * Endereço de exceção = 000000000030D47C Módulo(sqlservr+00000000000FD47C)
2014-12-13 12:38:30.25 spid51 * Código de exceção = c0000005 EXCEPTION_ACCESS_VIOLATION
2014-12-13 12:38:30.25 spid51 * Ocorreu uma violação de acesso lendo o endereço FFFFFFFFFFFFFF
2014-12-13 12:38:30.25 spid51 * Buffer de entrada de 54 bytes -
2014-12-13 12:38:30.25 spid51 * exec usp_select1

2014-12-13 12:38:30.77 Erro do servidor: 17310, Severidade: 20, Estado: 1.
2014-12-13 12:38:30.77 Servidor Uma solicitação do usuário da sessão com o SPID 51 gerou uma exceção fatal. O SQL Server está encerrando esta sessão. Entre em contato com os Serviços de Atendimento ao Produto com o despejo produzido no diretório de log.

A Violação de Acesso terá a seguinte pilha de chamadas:

sqlservr! TaskGhostCleanup::IsHashed+0x8d
sqlservr! TaskGhostCleanup::Enfile+0x32
sqlservr! IndexRowScanner::MoveToRowOnNextPage+0x9c
sqlservr! IndexDataSetSession::GetNextRowValuesInternal+0x11cb

Sintoma 3

Depois de receber as mensagens mencionadas nas seções de sintomas anteriores, você receberá as seguintes mensagens no log de erros do SQL Server:

Observação

2014-12-13 08:04:53.37 Processo de Servidor 0:0:0 (0x23c8) O 0x000000002880C1A0 de trabalho parece não ceder no Agendador 23. Hora de criação do tópico: 13062953007877. CPU de thread aproximada usada: kernel 0 ms, usuário 0 ms. Utilização do processo 0%. Sistema ocioso 88%. Intervalo: 70013 ms.
2014-12-13 08:04:53.37 Processo de Servidor 0:0:0 (0x71d8) O 0x000000002A8D21A0 de trabalho parece não ceder no Agendador 30. Hora de criação do tópico: 13062953007891. CPU de thread aproximada usada: kernel 0 ms, usuário 0 ms. Utilização do processo 0%. Sistema ocioso 88%. Intervalo: 70013 ms.
2014-12-13 08:04:53.38 Servidor ***Não é possível obter contexto de thread para spid 0
2014-12-13 08:04:53.38 Servidor * *******************************************************************************
2014-12-13 08:04:53.38 Servidor *
2014-12-13 08:04:53.38 Servidor * BEGIN STACK DUMP:
2014-12-13 08:04:53.38 Server * 12/13/14 08:04:53 spid 29488
2014-12-13 08:04:53.38 Servidor *
2014-12-13 08:04:53.38 Servidor * Agendador sem rendimento
2014-12-13 08:04:53.38 Servidor *
2014-12-13 08:04:53.38 Servidor * *******************************************************************************
2014-12-13 08:04:53.38 A assinatura da pilha do servidor para o despejo é 0x0000000000000341
2014-12-13 08:04:55.43 O código de retorno do processo de despejo externo do servidor 0x20000001. O processo de despejo externo não retornou erros.
2014-12-13 08:04:55.43 Processo de Servidor 0:0:0 (0x9358) O 0x0000000081CE41A0 de trabalho parece não produzir no Agendador 4. Hora de criação do tópico: 13062953009701. CPU de thread aproximada usada: kernel 0 ms, usuário 15 ms. Utilização do processo 0%. Sistema ocioso 88%. Intervalo: 70011 ms.

O SQL Server pode não estar respondendo às solicitações do usuário neste momento. Se esse for o caso, você deverá reiniciar o serviço para corrigir a situação.

Causa

Esse problema ocorre porque as consultas do usuário tentam usar as filas de limpeza fantasmas antes que esse processo seja totalmente inicializado.

Resolução

Informações sobre o service pack

Para resolver esse problema, obtenha o Service Pack 1 para o SQL Server 2014.

Para obter mais informações sobre o SQL Server 2014 Service Pack 1 (SP1), consulte os bugs corrigidos no SQL Server 2014 Service Pack 1.

Hotfix para o SQL Server 2008 SP4

Para resolve esse problema, aplique o KB 3034373: Um pacote de atualização de hotfix sob demanda está disponível para o SQL Server 2008 SP4.

Hotfix para o SQL Server 2008 R2 SP3

Para resolve esse problema, aplique o KB 3033860: Um pacote de atualização de hotfix sob demanda está disponível para SQL Server 2008 R2 SP3 .

Informações sobre a atualização cumulativa

A melhoria de recurso foi introduzida na atualização cumulativa seguinte do SQL Server.

Atualização cumulativa 6 para SQL Server 2014 /pt-pt/help/3031047

Atualização cumulativa 4 para SQL Server 2012 SP2 /en-us/help/3007556

Atualização Cumulativa 14 para SQL Server 2012 SP1 /en-us/help/3023636

Sobre atualizações cumulativas para o SQL Server

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:

      

Solução alternativa

Para solucionar esse problema, siga estas etapas:

  1. Configure -T669 como parâmetro de inicialização. Esses sinalizadores de rastreamento impedem que as consultas do usuário entrem em fila solicitações para o processo de limpeza fantasma.
  2. Configure um alerta de SQL Server Agent para acionar um trabalho no SQL Msg 3408. Por exemplo, configure o seguinte alerta:
    A recuperação está concluída. Trata-se apenas de uma mensagem informativa. Não é necessária qualquer ação do utilizador.
  3. Dentro desse trabalho, execute um script TSQL para aguardar de 5 a 10 minutos e, em seguida, execute o comando DBCC TRACEOFF (669,-1).

Este procedimento garante que este sinalizador de rastreio está ativo apenas durante SQL Server arranque. O uso desse sinalizador de rastreamento não afeta o funcionamento normal do processo de limpeza fantasma em segundo plano.

Status

A Microsoft confirmou que se trata de um problema com o SQL Server e está atualmente a investigar uma correção para este problema. Este artigo da Base de Dados de Conhecimento será atualizado com informações adicionais assim que for ficando disponível.

Referências

Dentro do mecanismo de armazenamento: limpeza fantasma em profundidade
        
         Alertas
        
         sp_add_alert (Transact-SQL)
        
         DBCC TRACEOFF (Transact-SQL)
        
         Rastrear Sinalizadores
        
         Opções de Inicialização do Mecanismo de Banco de Dados