백업이 손상을 감지했지만 CHECKDB는


12

백업 명령을 실행할 때 데이터베이스가 있습니다

BACKUP DATABASE [MyDatabase] TO     
DISK =  'G:\Backup\MyDatabase_01_01_2018.bak'   
WITH    NOFORMAT, NOSKIP, COMPRESSION, INIT, BUFFERCOUNT = 100

오류 메시지가 나타납니다

메시지 3043, 수준 16, 상태 1, 줄 8
백업 'MyDatabase'가 파일 'F : \ Data \ MyDatabase_1.ndf'의 페이지 (1 : 745345)에서 오류를 감지했습니다.
메시지 3013, 수준 16, 상태 1, 줄 8
백업 데이터베이스가 비정상적으로 종료됩니다.

나는 전체 CHECKDB를 실행했지만 깨끗하게 돌아옵니다. Page Verify 옵션이 NONE으로 설정되지 않았 음을 알았으므로 CHECKSUM으로 변경하고 DB의 모든 인덱스를 다시 작성하여 모든 페이지에 쓰고 체크섬을 생성했습니다. 이 후에도 백업은 여전히 ​​실패하고 checkdb는 여전히 깨끗한 상태를 표시합니다 (변경 사항 없음).

DBCC CHECKDB('MyDatabase') WITH NO_INFOMSGS, ALL_ERRORMSGS,
DATA_PURITY, EXTENDED_LOGICAL_CHECKS;

SQL 로그에서 :

all_errormsgs, no_infomsgs, xxx에 의해 실행 된 data_purity가있는 DBCC CHECKDB (MyDatabase)가 0 개의 오류를 발견하고 0 개의 오류를 복구했습니다. 경과 시간 : 0 시간 21 분 46 초 내부 데이터베이스 스냅 샷에는 분할 지점 LSN = 000ab776 : 0000112f : 0001 및 첫 번째 LSN = 000ab776 : 0000112d : 0001이 있습니다.

DBCC PAGE를 실행했지만 오류가 발생했습니다 (처음에 올바른 페이지를 반환하지 않는 것 같습니다). 인쇄 옵션 2로 실행할 수 있으며 반환하지만 솔직히 내가 찾고있는 것을 모릅니다.

DBCC PAGE ('MyDatabase',1,745345,3)
페이지 : (3 : 513793)

완충기:


BUF @ 0x00000003811F8280

bpage = 0x00000000F2D70000 bhash = 0x0000000000000000 bpageno = (1 : 745345)
bdbid = 5 참조 = 0 bcputicks = 0
bsampleCount = 0 bUse1 = 44283 bstat = 0x809
블로그 = 0x5adb215a bnext = 0x0000000000000000          

페이지 헤더 :


페이지 @ 0x00000000F2D70000

m_pageId = (3 : 513793) m_headerVersion = 1 m_type = 2
m_typeFlagBits = 0x4 m_level = 0 m_flagBits = 0x0
m_objId (AllocUnitId.idObj) = 1075937538 m_indexId (AllocUnitId.idInd) = 2
메타 데이터 : AllocUnitId = 633462595911680 메타 데이터 : PartitionId = 0
메타 데이터 : IndexId = -1 메타 데이터 : ObjectId = 0 m_prevPage = (3 : 513795)
m_nextPage = (3 : 513820) pminlen = 17 m_slotCnt = 426
m_freeCnt = 2 m_free 데이터 = 7338 m_reservedCnt = 0
m_lsn = (608841 : 643611 : 411) m_xactReserved = 0 m_xdesId = (0 : 0)
m_ghostRecCnt = 0 m_tornBits = 0 DB Frag ID = 1

할당 상태

GAM (1 : 511232) = 할당 된 SGAM (1 : 511233) = 할당되지 않음     
PFS (1 : 744096) = 0x40 할당 된 0_PCT_FULL DIFF (1 : 511238) = 변경되지 않음
ML (1 : 511239) = MIN_LOGGED가 아님      

메시지 2514, 수준 16, 상태 8, 줄 20
DBCC PAGE 오류가 발생했습니다. 잘못된 페이지 메타 데이터-덤프 스타일 3을 사용할 수 없습니다.

다음에 시도 할 수있는 아이디어가 있습니까? 서버 버전은

select @@version
Microsoft SQL Server 2014 (SP2-CU11) (KB4077063)-12.0.5579.0 (X64) 
    2 월 21 2018 12:19:47 
    저작권 (c) Microsoft Corporation
    Windows NT 6.3 (빌드 9600 :)의 Developer Edition (64 비트) (하이퍼 바이저)

DB의 호환성 수준은 100입니다 (SQL 2008).


이 질문에 대한 의견이 채팅 으로 이동 되었습니다 .
Paul White 9

답변:


9

이 답변은 Paul Randal이 작성한 SQLskills.com 뉴스 레터의 "페이지 체크섬 오류로 백업에 실패하지만 DBCC CHECKDB"를 전달한 데이터베이스에 관한 문제에서 발췌 한 것 입니다.

익스텐트가 혼합 익스텐트 인 경우 (익스텐트의 8 페이지가 잠재적으로 8 개의 다른 할당 단위에 할당 될 수 있음- 여기 참조 ) , 일부 페이지가 관련 PFS 페이지에 의해 할당 된 것으로 잘못 표시 될 수 있습니다.

이 경우 DBCC CHECKDB할당 단위의 IAM 페이지에서 읽을 페이지를 파생시키기 때문에 해당 페이지를 읽으려고 시도하지 않습니다 (첫 번째 페이지는 혼합 범위에서 할당 된 페이지를 나열 함). 이 사례는 DBCC CHECKDB의 손상 감지 논리의 차이입니다 .

[ DBCC CHECKDB파손 ] 이 손상을 감지 할 수 없었기 때문에 이를 복구하는 데 필요한 수리가 불가능했습니다. 따라서을 사용하여 DBCC WRITEPAGE잘못 할당 된 페이지의 할당 상태에 필요한 변경 사항을 PFS 페이지에서 직접 해결했습니다.

이것은 매우 드문 경우입니다. DBCC CHECKDB 실패가 발생하지만 백업이 성공하는 것이 훨씬 일반적입니다 .

내 생각에 Paul의 해결책은 당신이했던 것처럼 데이터를 내보내고 가져 오는 것 이상의 방법이므로 올바른 일을했다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.