次の方法で共有


MSSQLSERVER_17066

適用対象: SQL Server

詳細

属性
製品名 SQL Server
イベント ID 17066
イベント ソース MSSQLSERVER
コンポーネント SQLEngine
シンボル名 SQLASSERT_ONLY
メッセージ テキスト SQL Server アサーション: ファイル: <%s>、line=%d Failed Assertion = '%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.

原因

アサートエラーが発生する可能性のあるいくつかの理由を次に示します。

製品のバグ
アサートエラーの一般的な理由は、条件が正しくない原因となる製品の問題です。 これらの問題は Microsoft が調査する必要があり、再現して理解した時点で修正できます。

データベースの破損 アサート エラーのもう 1 つの一般的な原因は、データベースの物理的な不整合です。 メモリ内の読み取り時に破損したデータ構造が原因で、予期される条件が false になり、アサートが発生する可能性があります。

外部ライブラリまたはフィルター ドライバー アサート メッセージの一般的な原因は、SQL Server メモリ内の外部 DLL または SQL Server アクティビティを監視またはインターセプトするように設計されたフィルター ドライバーが原因であることが判明しました。 このような外部コンポーネントが SQL Server で使用するオブジェクトまたは構造体を変更すると、アサート エラーが発生する可能性があります。 詳細については、「 特定のモジュールまたはフィルター ドライバーが読み込まれるときのパフォーマンスと整合性の問題を参照してください。

ハードウェアの問題 (メモリ、CPU) 障害のあるハードウェアは、メモリ内のデータ構造の破損を引き起こす可能性があるため、アサートエラーが発生する可能性があります。 この問題はあまり一般的ではありませんが、発生します。

ユーザーの操作

  1. SQL Server のビルドを確認し、「実行されている SQL Server データベース エンジンのバージョンとエディションを確認する」を参照してください

  2. SQL Server バージョンで使用可能な Latest 更新プログラムを見つけるかすべてのビルドのすべての修正プログラムを一覧表示する Excel ファイルを最適に開く

  3. 現在の SQL Server ビルド後にリリースされたアサート修正については、記事または Excel ファイルを確認してください。 アサートの問題を修正する後のビルドが見つかる場合は、そのビルドへのアップグレードを検討してください。

  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 でエラーが報告されない場合は、Microsoft テクニカル サポートに連絡し、次の情報を提供する準備をしてください。

    1. \Log フォルダーからの SQL Server エラー ログ
    2. \Log フォルダーに生成された SQL Server メモリ ダンプ (SQLDump00xx.mdmp)
    3. アサートを使用可能な場合に再現する手順。 アサートが発生する原因となるクエリまたはアクションは何ですか?
    4. fltmc filtersおよび 'sys.dm_os_loaded_modules DMV からの出力。