MSSQLSERVER_17066

Aplica-se a:SQL Server

Detalhes

Atributo Valor
Nome do Produto SQL Server
ID do evento 17066
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico SQLASSERT_ONLY
Texto da mensagem declaração SQL Server: arquivo: <%s>, line=%d Asserção com falha = '%s'. Talvez esse erro esteja relacionado à temporização. Se o erro persistir após a repetição da instrução, use DBCC CHECKDB para verificar a integridade estrutural do banco de dados ou reinicie o servidor para assegurar que as estruturas de dados na memória não estejam corrompidas.

Explicação

As declarações são instruções colocadas no código de um aplicativo para garantir que determinadas condições sejam atendidas. Nesse sentido, uma declaração se comporta de forma semelhante a um erro. Você pode pensar em declarações como erros enfáticos e firmes. A condição especificada deve ser atendida para que o programa continue a execução regular. Se a condição não for atendida, a declaração será gerada. Para obter mais informações, consulte Asserções C/C++.

SQL Server usa declarações em muitos lugares para garantir que as condições sejam verdadeiras. Por exemplo, a condição 'existingState == DB_Unencrypted' afirma que um estado de banco de dados não é criptografado antes que o próximo comando no código seja executado. Se esse não for o caso, a declaração será gerada. O erro 3624 notifica você de que tal condição não foi atendida e uma declaração foi gerada.

O erro 3624 é gerado junto com MSSQLSERVER_3624. Aqui estão exemplos de como você pode ver esses erros no log de erros do SQL Server. Você também verá a condição de declaração gerada durante o tempo de execução e o erro é enviado de SQL Server para o aplicativo cliente.

Error: 17066, Severity: 16, State: 1.
SQL Server Assertion: File: <"e:\\b\\s3\\sources\\sql\\ntdbms\\hekaton\\engine\\hadr\\physical\\ckptctrlprocesslogrecord.cpp">, line=1634 Failed Assertion = 'existingState == DB_Unencrypted'. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted.

Error: 3624, Severity: 20, State: 1.
A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a Hotfix from Technical Support.
Error: 17066, Severity: 16, State: 1.
SQL Server Assertion: File: <"xdes.cpp">, line=4919 Failed Assertion = 'lck_sufficient (lckMode, LCK_M_IX) || lck_sufficient (lckMode, LCK_M_BU)'. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted.

Error: 3624, Severity: 20, State: 1.
A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a Hotfix from Technical Support.
SQL Server Assertion: File: <diskio.cpp>, line=2902 Failed Assertion = 'filepos + cBytes <= GetMaxOffsetForIO ()'. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted.

Error: 3624, Severity: 20, State: 1.
A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a Hotfix from Technical Support.

Causa

Aqui estão alguns possíveis motivos para uma falha de declaração ocorrer:

Bug do produto
Um motivo comum para falhas de declaração são problemas no produto que levam às condições não serem verdadeiras. Esses problemas precisam ser investigados pela Microsoft e, quando reproduzidos e compreendidos, podem ser corrigidos.

Banco de dados corrompido Outra causa comum para falhas de declaração são inconsistências físicas em bancos de dados. Estruturas de dados danificadas, quando lidas na memória, podem fazer com que as condições esperadas sejam falsas e, portanto, gerar uma declaração.

Biblioteca externa ou driver de filtro Uma causa um tanto comum para mensagens de declaração foi encontrada como causada por DLL externa dentro SQL Server memória ou um driver de filtro projetado para monitorar ou interceptar SQL Server atividade. Se esse componente externo modificar objetos ou estruturas que SQL Server usa, poderão ocorrer falhas de declaração. Para obter mais informações, consulte Problemas de desempenho e consistência quando determinados módulos ou drivers de filtro são carregados.

Problema de hardware (memória, CPU) O hardware com falha pode causar corrupção de estruturas de dados na memória e, portanto, levar a falhas de declaração. Esse problema é menos comum, mas ocorre.

Ação do usuário

  1. Verifique sua compilação de SQL Server, consulte Determinar qual versão e edição do Mecanismo de Banco de Dados SQL Server está em execução

  2. Encontre as atualizações mais recentes disponíveis para sua versão de SQL Server ou abra melhor o arquivo do Excel que lista todas as correções para todos os builds

  3. Examine os artigos ou o arquivo do Excel para ver se há correções de declaração lançadas após o build atual do SQL Server. Se você encontrar um build posterior que corrija problemas de declaração, considere atualizar para esse build.

  4. Em alguns casos, você pode pesquisar a condição de declaração específica na parte declaração com falha do erro 17066. Por exemplo, na mensagem acima, pesquise por lck_sufficient (lckMode, LCK_M_IX). Essa expressão ajudará você com uma pesquisa mais precisa para um problema de correspondência. Essa expressão é a condição que dispara a declaração em primeiro lugar e é bastante específica.

  5. Execute DBCC CHECKDB em seus bancos de dados. Se o DBCC CHECKDB relatar erros de corrupção de banco de dados, concentre-se em resolver esse problema antes de qualquer outra coisa. Restaure um backup de banco de dados limpo e investigue a causa raiz das inconsistências do banco de dados. Para obter mais informações, consulte Solucionar problemas de erros de consistência de banco de dados relatados pelo DBCC CHECKDB.

  6. Verifique se há módulos externos carregados no espaço de memória SQL Server e também marcar para drivers de filtro

    SELECT * FROM sys.dm_os_loaded_modules
    WHERE company != 'Microsoft Corporation'
    

    Para drivers de filtro, execute o comando a seguir no Prompt de Comando

    fltmc filters
    

    Siga as recomendações em Problemas de desempenho e consistência quando determinados módulos ou drivers de filtro forem carregados.

  7. Se você já tiver atualizado seu SQL Server para a atualização cumulativa mais recente e o DBCC CHECKDB não relatar erros, entre em contato com o suporte técnico da Microsoft e esteja pronto para fornecer as seguintes informações:

    1. SQL Server logs de erros da pasta \Log
    2. SQL Server despejos de memória (SQLDump00xx.mdmp) gerados na pasta \Log
    3. Etapas para reproduzir a declaração quando disponível. Qual consulta ou ação leva à declaração a ser gerada?
    4. Saída de fltmc filters e da DMV 'sys.dm_os_loaded_modules.