MSSQLSERVER_9004

적용 대상:SQL Server

세부 사항

attribute
제품 이름 SQL Server
이벤트 ID 9004
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 LOG_CORRUPT
메시지 텍스트 데이터베이스 '%.*ls'에 대한 로그를 처리하는 동안 오류가 발생했습니다. 가능하면 백업에서 복원합니다. 백업을 사용할 수 없는 경우 로그를 다시 빌드해야 할 수 있습니다.

설명

롤백, 복구 또는 복제 중에 로그를 처리하는 동안 오류가 발생했습니다. 이는 운영 체제에서 검색된 오류 또는 SQL Server에서 감지한 내부 일관성 오류를 나타낼 수 있습니다.
SQL Server 데이터베이스 엔진은 트랜잭션 로그 콘텐츠를 읽고 처리할 때 트랜잭션 로그 내용의 일관성에 대한 논리적 검사를 수행합니다. 로그 헤더, 로그 블록 및 로그 레코드의 모든 측면이 검사되는 것은 아닙니다. 상태 번호는 오류 유형에 대한 자세한 정보를 제공합니다.

  • 상태 1 VLF(가상 로그 파일)의 로그 파일 헤더가 손상되었습니다. 손상된 로그 파일 헤더가 서비스 시작 시 데이터베이스를 시작하는 과정의 일부로 발견되면 ERRORLOG에 오류 9004만 표시될 수 있습니다. 로그 파일 헤더는 트랜잭션 로그 내에서 각 VLF의 첫 번째 부분입니다. 로그 파일 헤더는 로그 파일의 단일 파일 헤더 또는 처음 8KB와 동일하지 않습니다. 로그 파일의 파일 헤더가 손상된 경우 데이터베이스 파일 헤더 페이지 손상과 유사한 Msg 5172가 발생할 수 있습니다.
  • 상태 2 및 3 RESTORE 작업 중에 복구를 수행할 때 로그 블록이 잘못되었습니다.
  • 상태 4~12 로그 레코드를 처리할 때 로그 블록에 대한 다양한 검사입니다. 여기에는 트랜잭션 로그의 패리티, 섹터 및 기타 일관성에 대한 논리적 검사가 포함됩니다.

대부분의 경우 로그를 처리하는 작업이 직접 사용자 명령(예: SQL Server 엔진이 시작될 때 실행되는 복구)을 기반으로 하지 않기 때문에 이 오류는 EVENTID = 9004가 있는 ERRORLOG 또는 Windows 애플리케이션 이벤트 로그에만 표시됩니다. 이러한 상황에서 오류 9004는 종종 오류 3414와 함께 표시됩니다. 그러나 ALTER DATABASE와 같은 일부 쿼리는 로그를 처리해야 할 수 있으므로 이러한 오류가 표시됩니다. 오류가 심각도=21이므로 사용자 세션의 연결이 끊어집니다.

원인

오류 9004는 트랜잭션 로그의 내용이 손상되었음을 나타내는 일반적인 오류입니다. 로그가 일치하지 않게 되는 이유는 SQL Server 엔진이 감지한 데이터베이스 손상 문제와 비슷합니다. 로그 손상의 원인을 찾으려면 가능한 하드웨어, 파일 시스템 및 I/O 문제 분석을 포함하여 데이터베이스 손상에 사용되는 유사한 기술을 따라야 합니다. DBCC CHECKDB는 트랜잭션 로그를 작업의 일부로 확인하지 않으며 로그 손상 오류를 검색할 수 없습니다. 오류 9004는 SQL Server 엔진 자체에서 발생시킵니다.

사용자 작업

다음 작업 중 하나가 이 오류를 수정합니다.

  • 백업에서 복원: 알려진 정상 백업에서 복원하여 이 문제를 복구합니다. 데이터베이스 또는 로그 백업의 로그 부분에 손상된 내용이 포함된 경우 RESTORE에서 오류 9004가 발생할 수 있습니다. 이 경우 백업의 트랜잭션 로그가 손상된 것입니다.

  • 로그 다시 작성: 백업에서 복원할 수 없는 경우 트랜잭션 로그를 다시 빌드하여 데이터베이스를 온라인 상태로 만들 수 있습니다. 트랜잭션 로그를 다시 작성할 때의 결과를 신중하게 이해해야 합니다. 여기에는 데이터베이스의 트랜잭션 일관성 손실이 포함됩니다. 트랜잭션 로그를 다시 빌드하는 방법에 대한 자세한 내용은 데이터베이스 비상 모드에서 오류 해결을 참조하세요.

  • 시스템 문제에 대한 로그 검사: 또한 시스템 이벤트 로그 및 오류 로그를 확인하여 문제를 발생시킨 시스템 내의 문제를 식별합니다.