SQL Server 데이터베이스가 포함된 컴퓨터에서 DBCC CHECKDB 명령을 실행할 때 오류 메시지

이 문서에서는 SQL Server 데이터베이스가 포함된 컴퓨터에서 명령을 실행할 DBCC CHECKDB 때 발생하는 문제를 해결합니다.

원래 제품 버전: SQL Server 2008
원래 KB 번호: 960791

증상

다음과 같은 경우를 생각해볼 수 있습니다.

  • 백업에서 Microsoft SQL Server 2008 또는 SQL Server 2005 데이터베이스를 복원합니다.

  • 복원 프로세스 중에 데이터베이스를 복원할 수 없는 오류가 발생합니다.

  • CONTINUE_AFTER_ERROR 옵션을 사용하여 동일한 백업에서 데이터베이스를 성공적으로 복원합니다.

이 시나리오에서는 SQL Server 데이터베이스가 포함된 컴퓨터에서 DBCC CHECKDB 명령을 실행하면 다음과 유사한 오류 메시지가 표시됩니다.

Msg 8967, 수준 16, 상태 216, 서버 <서버 이름>, 줄 2
DBCC에서 내부 오류가 발생하여 추가 처리를 방지했습니다. 고객 지원에 문의하세요.
'데이터베이스 이름>'<에 대한 DBCC 결과입니다.

Msg 8921, 수준 16, 상태 1, 서버 <서버 이름>, 줄 1

확인이 종료되었습니다. 사실을 수집하는 동안 오류가 감지되었습니다. tempdb가 공간이 부족하거나 시스템 테이블이 일치하지 않는 것일 수 있습니다. 이전 오류를 확인합니다.

또한 다음과 유사한 메시지가 SQL Server 오류 로그에 표시될 수 있습니다.

2007-05-26 07:13:49.21 spid58 DBCC에서 내부 데이터베이스 스냅샷 대한 LSN(<로그 LSN)의 현재 끝보다 큰 LSN> 페이지를 발견했습니다. 페이지를 읽을 수 없음(파일 ID:페이지 ID), 데이터베이스 '<데이터베이스 이름'(데이터베이스 ID 데이터베이스 ID>), LSN = (<LSN>), 유형 = 32, isInSparseFile = 1. 이 DBCC 명령을 다시 실행하세요.

원인

이 문제는 명령이 데이터베이스의 DBCC CHECKDB 일관성을 확인하는 데 필요한 검사를 수행할 수 없는 경우에 발생합니다. 이러한 검사는 여러 가지 이유로 수행할 수 없습니다. 예를 들어 메타데이터 불일치 또는 데이터베이스 스냅샷 손상과 같은 데이터베이스에 근본적인 불일치가 있는 경우 이 동작이 발생할 수 있습니다. 이 오류의 특정 원인에 대한 자세한 내용은 오류 메시지에 표시되는 다른 상태를 검사하여 확인할 수 있습니다. 증상 섹션에 설명된 시나리오에서 상태 216 메시지는 명령이 DBCC CHECKDB 로그 LSN의 끝보다 더 큰 로그 시퀀스 번호(LSN)가 있는 내부 스냅샷 페이지를 읽는 것을 나타냅니다. 이 동작은 CONTINUE_AFTER_ERROR 옵션을 사용하여 데이터베이스를 복원하는 경우에 발생할 수 있습니다.

해결 방법

이 문제를 해결하려면 명령과 함께 TABLOCK 힌트를 DBCC CHECKDB 사용합니다. 이렇게 하면 명령이 DBCC CHECKDB 오류 메시지를 생성하지 않고 완료할 수 있습니다.

TABLOCK 힌트에 대한 자세한 내용은 Microsoft 웹 사이트 힌트(Transact-SQL) - 테이블을 참조하세요.