MSSQLSERVER_17066

적용 대상:SQL Server

세부 사항

attribute
제품 이름 SQL Server
이벤트 ID 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.

원인

어설션 실패가 발생할 수 있는 몇 가지 이유는 다음과 같습니다.

제품 버그
어설션 실패에 대한 일반적인 이유는 조건이 true가 아닌 것으로 이어지는 제품의 문제입니다. 이러한 문제는 Microsoft에서 조사해야 하며 재현 및 이해 시 해결할 수 있습니다.

데이터베이스 손상 어설션 실패의 또 다른 일반적인 원인은 데이터베이스의 물리적 불일치입니다. 메모리에서 읽을 때 손상된 데이터 구조로 인해 예상 조건이 false가 되어 어설션이 발생할 수 있습니다.

외부 라이브러리 또는 필터 드라이버 어설션 메시지에 대한 다소 일반적인 원인은 SQL Server 메모리 내의 외부 DLL 또는 SQL Server 활동을 모니터링하거나 가로채도록 설계된 필터 드라이버로 인해 발생하는 것으로 나타났습니다. 이러한 외부 구성 요소가 SQL Server에서 사용하는 개체 또는 구조를 수정하는 경우 어설션 오류가 발생할 수 있습니다. 자세한 내용은 특정 모듈 또는 필터 드라이버가 로드될 때의 성능 및 일관성 문제를 참조하세요.

하드웨어 문제(메모리, CPU) 하드웨어 오류로 인해 메모리의 데이터 구조가 손상되어 어설션 오류가 발생할 수 있습니다. 이 문제는 덜 일반적이지만 발생합니다.

사용자 작업

  1. SQL Server 빌드를 확인하고 실행 중인 SQL Server 데이터베이스 엔진의 버전 및 버전 확인을 참조 하세요.

  2. SQL Server 버전사용할 수 있는 최신 업데이트를 찾거나 모든 빌드에 대한 모든 수정 사항을 나열하는 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. 'sys.dm_os_loaded_modules DMV의 fltmc filters 출력입니다.