DBCC CheckDB는 어떤 유형의 손상을 놓칠 수 있습니까?


16

이 질문은이 이전 게시물 과 프롬프트로 인해 나중에 복원 할 수있는 데이터베이스를 가지고 다음과 같이 복원되었습니다.

BACKUP 'BrokenDatabase' detected an error on page (1:123456) in file BrokenDatabase.mdf'.
Error: 3043, Severity: 16, State: 1.

관련 질문과 DBCC PAGE 조사 준비가 된 백업에서 DBCC CHECKDB는 오류없이 통과했지만 손상이있는 것으로 보입니다.

CHECKDB는 통과하지만 BACKUP WITH CHECKSUM은 실패하는 경우 어떤 유형의 손상이 발생할 수 있습니까?


1
DBCC IND : 명령이 테이블이나 인덱스에서 사용하는 페이지 목록을 제공합니까? 문제가있는 테이블, 색인을 볼 수 있습니다.
garik

1
문제가 발생했을 때 오류가 발생한 페이지를 빠르게 분석했습니다. 30 분 동안의 연구 결과에 따르면 잘못된 점을 해결하기 위해 30 분 이상이 필요하다고 결론을 내 렸습니다.
Mark Storey-Smith

답변:


10

다음은 내가 읽은 결과의 모음입니다. 링크 된 블로그 및 문서에서 훨씬 더 많은 정보를 찾을 수 있습니다.

먼저 DBCC CHECKDB체크섬 또는 torn_page 확인을 끄면 불일치를 감지하지 못할 수 있습니다. 이 게시물 에서 Paul Randal의 인용문 :

당신이 맞습니다-찢어진 페이지 또는 체크섬이 켜져 있지 않으면 페이지 보호 옵션과 관련하여 감지 할 수있는 것이 없습니다. CHECKDB는 여전히 모든 일관성 검사를 수행하여 발견 된 손상을 발견 할 수 있지만 데이터 값 중간에 손상이 표시되지는 않습니다.

Ha-그것은 페이지 체크섬을 켜는 것에 대한 혼란입니다. 페이지를 읽고, 바꾸고, 다시 쓸 때까지 아무 일도 일어나지 않습니다. 페이지가 체크섬을 받도록하는 유일한 방법은 페이지 인덱스를 변경하는 것입니다. 예를 들어, 모든 인덱스를 다시 작성하여 사용할 수없는 경우에는 '터치'도구가 전혀 없습니다.

SQL Server 2000에서 또는 2005 년 이후로 데이터베이스를 업그레이드 한 경우 위 상황이 발생할 수 있습니다. 그런 다음 ALTER DATABASE를 사용하여 페이지 체크섬을 수동으로 활성화해야 활성화됩니다. 그러나 위의 인용문의 두 번째 단락이 시작되어 문제가 될 수 있습니다.

BACKUP WITH CHECKSUM체크섬 불일치를 감지하지만 페이지에 이미 체크섬이 기록되어있는 경우에만 백업됩니다. 일반적으로 DBCC CHECKDB이러한 오류도 감지하므로 BACKUP WITH CHECKSUM을 사용하여 DBCC CHECKDB를 바꾸는 것은 좋지 않습니다 .

이제 DBCC CHECKDB일부가 있어도 불일치를 표시하지 않을 수있는 두 번째 가능성 이 있습니다. 이를 위해 나는 부패 와 관련된 오해 에서 Paul Randal을 다시 인용하고 있습니다. 그것들은 사라질 수 있습니까? :

사라지는 부패는 어떻습니까? 일관성 검사가 작동하는 방식에 도달합니다. 일관성 검사는 할당 된 데이터베이스의 페이지에서만 실행됩니다. 페이지가 어떤 것에도 할당되지 않으면 8192 바이트는 의미가 없으며 해석 할 수 없습니다. 예약 된 것과 할당 된 것 사이에 혼동하지 마십시오. 첫 번째 오해 게시물에서 여기에 설명되어 있습니다. 페이지가 할당되는 한 페이지 체크섬 테스트 (있는 경우)를 포함하여 DBCC CHECKDB가 일관성을 검사합니다. DBCC CHECKDB가 실행될 때 손상된 페이지가 할당 된 경우 다음 DBCC CHECKDB가 실행될 때 할당이 취소되면 손상이 사라지는 것처럼 보일 수 있습니다. 처음으로 손상된 것으로보고되지만 두 번째로 할당되지 않은 경우 일관성을 검사하지 않으며 손상되지 않은 것으로보고되지 않습니다. 부패는 신비스럽게 사라진 것 같습니다. 그러나 그것은 아닙니다-단지 손상된 페이지가 더 이상 할당되지 않는다는 것입니다. 손상된 페이지 할당을 해제하는 SQL Server를 중지하는 것은 없습니다. 실제로 많은 DBCC CHECKDB 복구가 수행하는 작업으로 손상된 부분을 할당 해제하고 모든 링크를 수정합니다.

귀하의 질문에 대한 최종 답변이 없지만 DBCC CHECKDB할당 된 페이지 만 확인하면 할당 해제 된 페이지에 불일치가 표시되지 않습니다. 내가 지금 상상할 수있는 유일한 상황은 BACKUP이 할당되지 않은 페이지를 백업하여에 의해 건너 뛴 잠재적 체크섬 오류를 보여주는 것 DBCC CHECKDB입니다.


Paul의 기사 대부분이 이미 북마크되어 있지만 요약을 위해 +1이되어 있습니다. 이 중 어느 것도 내가 따로 설정 한 데이터베이스에 적용되지 않으므로 다른 사람들이 더 많은 생각을 할 수 있기를 바랍니다.
Mark Storey-Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.