SQL Server 2000에서 손상된 페이지를 식별하려면 데이터베이스 옵션 TORN_PAGE_DETECTION을 TRUE로 설정해야합니다.
그러나 SQL 2005 이상에서는 새로운 설정 PAGE_VERIFY가 기존 TORN_PAGE_DETECTION을 대체하여 두 가지 다른 유형의 페이지 확인 (TORN_PAGE_DETECTION 및 CHECKSUM) 중에서 선택할 수 있습니다.
이제 어떤 질문을 설정해야합니까-TORN_PAGE_DETECTION 또는 CHECKSUM?
TORN_PAGE_DETECTION-페이지가 디스크에 성공적으로 쓰여지지 않은 시점을 감지 할 수 있도록 페이지에 512 바이트마다 비트를 기록합니다. 캐치는 512 바이트에 저장된 데이터가 실제로 올바른지 아닌지를 알려주지 않으므로 몇 바이트가 잘못 기록되었을 수 있습니다.
CHECKSUM-페이지에 체크섬이 있다고 가정하고 페이지를 쓸 때와 페이지를 읽을 때 페이지의 체크섬을 요약합니다.
SQL Server는 페이지의 비트 패턴을 기반으로 체크섬을 계산하고이를 페이지 헤더에 저장 한 다음 I / O를 발행하여 페이지를 작성합니다. SQL Server는 페이지를 읽을 때 동일한 논리를 사용하여 체크섬을 다시 계산 한 다음 페이지 헤더에서 사용 가능한 값과 비교합니다. 체크섬 값이 일치하면 쓰기-읽기주기 동안 페이지가 손상되지 않은 것으로 가정합니다.
체크섬 계산 비용은 각 페이지 읽기 및 쓰기에서 발생하므로 CPU 오버 헤드가 증가하여 워크로드 처리량에 영향을 줄 수 있습니다. 명심해야 할 또 다른 사항은 체크섬이 페이지의 특정 비트 패턴에 대해 고유하지 않다는 것입니다. 두 페이지가 동일한 체크섬 값에 매핑 될 수 있습니다. 따라서 페이지 손상이 감지되지 않을 수있는 원격 가능성이 있습니다.
참조 : SQL2005의 체크섬
질문에 구체적으로 답변하려면 :
Checksum이 SQL2005에 도입되었으며 이전 버전에서 DB를 업그레이드하거나 복원하면 이전 페이지 확인 방법이 유지된다고 생각합니다. 즉, 암시 적 업그레이드가 없었습니다.
예 CHECKSUM은 SQL Server 2005에 도입되었으며 DEFAULT 입니다. 2000에서 2005로 업그레이드 할 때 CHECKSUM을 사용하도록 데이터베이스 옵션 페이지 확인을 명시 적으로 변경해야합니다.
sql 2005에서 이미 생성 된 데이터베이스를 sql 2005를 실행하는 다른 서버로 복원하는 경우 설정할 필요가 없습니다. 페이지 확인 옵션을 설정 한 내용으로 유지됩니다.
찢어진 페이지 감지가 왔을 때 연구에 성공하지 못했습니다
보낸 사람 : http://support.microsoft.com/kb/230785
7.0 이전의 SQL Server 버전
7.0 이전의 SQL Server 버전은 로그 패리티 또는 조각난 비트 감지 기능을 제공하지 않았습니다. 실제로 해당 버전은 로그 레코드가 2KB 로그 페이지를 채울 때까지 동일한 로그 페이지를 여러 번 쓸 수 있습니다. 성공적으로 커밋 된 트랜잭션이 노출 될 수 있습니다. 장애가 발생한 동안 로그 페이지를 다시 쓰면 커밋 된 트랜잭션이있는 섹터가 제대로 다시 쓰지 않을 수 있습니다.
따라서 TORN_PAGE_DETECTION은 SQL Server 7.0부터 사용되었습니다. 그럼에도 불구하고 기본값은 활성화되지 않은 것입니다 (동일한 링크) .
참고 SQL Server 7.0에서는 찢어진 페이지 감지 기능이 기본적으로 사용되지 않습니다. 시스템에서 탐지를 활성화하는 방법 은 sp_dboption 을 참조하십시오 .
따라서 데이터베이스가 7.0 인스턴스에 대해 개발 된 후 업그레이드 된 경우 NONE의 기존 PAGE VERIFY 옵션을 사용하여 업그레이드했을 것입니다 (@ThomasStringer가 그의 답변에서 언급 한 바와 같이).
편집 : 2013 년 9 월 24 일 답변을 개선하려면 :
SQLSkills의 SQL Server 내부 메모를 참조하면 페이지 덤프를 사용하여 찢어진 비트 감지-TORN_PAGE_DETECTION 또는 CHECKSUM의 활성화 여부를 확인할 수 있습니다.
use database_name -- change here for your database !!
checkpoint
go
dbcc traceon (3604) -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604) -- turn off the trace flag
go
m_tornBits : 데이터베이스에 어떤 페이지 보호가 설정되어 있는지에 따라 페이지 체크섬 또는 찢어진 페이지 보호 비트로 대체 된 비트가 유지됩니다.
참고 : 이전 SQL Server 버전을 실행하고 있지 않습니다. 아래는 SQL Server 2000 이상 에서 확인되었습니다 . 7.0 또는 6.5가 돌아 다니고 있다면 확인할 수도 있습니다 :-)
