Partilhar via


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 Asserção do 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

Asserts são instruções colocadas no código de um aplicativo para garantir que determinadas condições sejam atendidas. A esse respeito, uma afirmação se comporta de forma semelhante a um erro. Você pode pensar em afirmaçõ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++.

O 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 afirmação é levantada. O erro 3624 notifica que essa 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 será enviado do 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 motivos possíveis para a ocorrência de uma falha de declaração:

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

Corrupção de banco de dados 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, assim, gerar uma declaração.

Driver de biblioteca ou filtro externo Descobriu-se que uma causa um tanto comum para mensagens de declaração é causada por DLL externa dentro da memória do SQL Server ou um driver de filtro projetado para monitorar ou interceptar a atividade do SQL Server. Se esse componente externo modificar objetos ou estruturas que o 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) Hardware defeituoso 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 o build do SQL Server, consulte Determinar qual versão e edição do Mecanismo de Banco de Dados do SQL Server está em execução

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

  3. Examine os artigos ou o arquivo do Excel para obter correções de declaração lançadas após o build atual do SQL Server. Se você encontrar uma compilação posterior que corrija problemas de declaração, considere atualizar para essa compilação.

  4. Em alguns casos, você pode pesquisar a condição de asserção específica na parte Asserção com falha do erro 17066. Por exemplo, na mensagem acima, procure por lck_sufficient (lckMode, LCK_M_IX). Essa expressão ajudará você a pesquisar com mais precisão 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 DBCC CHECKDB relatar erros de corrupção de banco de dados, concentre-se em resolver esse problema antes de mais nada. 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 erros de consistência de banco de dados relatados por DBCC CHECKDB.

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

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

    Para drivers de filtro, execute o seguinte comando 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 são carregados.

  7. Se você já atualizou seu SQL Server para a Atualização Cumulativa mais recente e DBCC CHECKDB não relata nenhum erro, entre em contato com o suporte técnico da Microsoft e esteja pronto para fornecer as seguintes informações:

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