Поделиться через


MSSQLSERVER_17066

Область применения: SQL Server

Сведения

Атрибут Значение
Название продукта SQL Server
ИД события 17066
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя SQLASSERT_ONLY
Текст сообщения Утверждение SQL Server: файл: <%s>, line=%d Сбой утверждения = "%s". Возможно, эта ошибка связана со временем. Если ошибка не исчезнет после повторного выполнения инструкции, проверьте целостность структуры базы данных при помощи инструкции DBCC CHECKDB или перезапустите сервер, чтобы убедиться, что структуры данных в памяти не повреждены.

Описание

Утверждения — это операторы, помещенные в код приложения, чтобы обеспечить соответствие определенным условиям. В этом отношении утверждение ведет себя аналогично ошибке. Вы можете подумать о утверждениях как решительные, твердые ошибки. Указанное условие должно соответствовать программе для продолжения регулярного выполнения. Если условие не выполнено, вызывается утверждение. Дополнительные сведения см. в разделе "Утверждения C/C++".

SQL Server использует утверждения во многих местах, чтобы убедиться, что условия верны. Например, условие "existingState == DB_Unencrypted" утверждает, что состояние базы данных незашифровывается перед выполнением следующей команды в коде. Если это не так, утверждение вызывается. Ошибка 3624 уведомляет вас о том, что такое условие не было выполнено, и было поднято утверждение.

Ошибка 3624 возникает вместе с MSSQLSERVER_3624. Ниже приведены примеры того, как эти ошибки можно увидеть в журнале ошибок SQL Server. Вы также увидите условие утверждения, возникающее во время выполнения, и ошибка отправляется из SQL Server в клиентское приложение.

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.

Причина

Ниже приведены некоторые возможные причины сбоя утверждения:

Ошибка продукта
Распространенной причиной сбоев утверждения являются проблемы в продукте, которые приводят к тому, что условия не будут верными. Эти проблемы необходимо исследовать корпорацией Майкрософт, и при воспроизведении и определении их можно исправить.

Повреждение базы данных еще одна распространенная причина сбоев утверждений — это физические несоответствия в базах данных. Поврежденные структуры данных при чтении в памяти могут привести к тому, что ожидаемые условия будут ложными и таким образом вызывают утверждение.

Внешнюю библиотеку или драйвер фильтра, что несколько распространенных причин для сообщений утверждений вызывается внешней библиотекой DLL в памяти SQL Server или драйвером фильтра, предназначенным для отслеживания или перехвата действий SQL Server. Если такой внешний компонент изменяет объекты или структуры, которые использует SQL Server, могут возникать сбои утверждений. Дополнительные сведения см. в статье о проблемах производительности и согласованности при загрузке определенных модулей или драйверов фильтров.

Неисправное оборудование (память, ЦП) может привести к повреждению структур данных в памяти и, следовательно, привести к утверждению сбоев. Эта проблема менее распространена, но она возникает.

Действие пользователя

  1. Проверьте сборку SQL Server, см. статью "Определение версии и выпуска SQL Server ядро СУБД запущено"

  2. Найдите последние обновления, доступные для версии SQL Server, или откройте файл Excel, который содержит список всех исправлений для всех сборок.

  3. Просмотрите статьи или файл Excel для любых исправлений утверждений, выпущенных после текущей сборки SQL Server. Если вы найдете более позднюю сборку, которая устраняет проблемы с утверждением, рассмотрите возможность обновления до этой сборки.

  4. В некоторых случаях можно выполнить поиск конкретного условия утверждения в части утверждения с ошибкой 17066. Например, в приведенном выше сообщении выполняется lck_sufficient (lckMode, LCK_M_IX)поиск. Это выражение поможет вам с более точным поиском соответствующей проблемы. Это выражение является условием, которое активирует утверждение в первую очередь, и это довольно конкретно.

  5. Запустите DBCC CHECKDB в базах данных. Если DBCC CHECKDB сообщает об ошибках повреждения базы данных, сосредоточьтесь на разрешении этой проблемы перед любым другим. Восстановите чистую резервную копию базы данных и изучите первопричину несоответствий базы данных. Дополнительные сведения см. в разделе "Устранение ошибок согласованности базы данных", сообщаемых DBCC CHECKDB.

  6. Проверьте наличие внешних модулей, загруженных в пространство памяти SQL Server, а также проверьте наличие драйверов фильтров

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

    Для драйверов фильтров выполните следующую команду из командной строки.

    fltmc filters
    

    Следуйте рекомендациям по проблемам производительности и согласованности при загрузке определенных модулей или драйверов фильтров.

  7. Если вы уже обновили SQL Server до последнего накопительного обновления, а DBCC CHECKDB не сообщает об ошибках, обратитесь в службу технической поддержки Майкрософт и готовы предоставить следующие сведения:

    1. Журналы ошибок SQL Server из папки \Log
    2. Дампы памяти SQL Server (SQLDump00xx.mdmp), созданные в папке \Log
    3. Действия по воспроизведению утверждения при наличии. Какой запрос или действие приводит к вызову утверждения?
    4. Выходные данные из fltmc filters sys.dm_os_loaded_modules dmV.