alter database 테이블이름 set single_user

go

dbcc checkdb('테이블이름', repair_allow_data_loss)

go

alter database 테이블이름 set multi_user



최소두번정돈 돌려주어야 찜찜한 노란색메세지를 볼수없이..초록색정상 쿼리실행 메세지를 볼수가있다.






----------------------------------------------

회사에서 이전작업용 테스트용DB에서 쿼리중 아래와 같은 메세지가 나왔습니다.

 

---

SQL Server에서 일관성 기반의 논리적인 I/O 오류가 검색되었습니다: 체크섬이 잘못되었습니다(예상 체크섬: 0xdbc667f0. 실제 체크섬: 0xdbc663f0).. 파일 'L:\TESTDB_data1.NDF'의 오프셋 0x0000006e992000에서 데이터베이스 ID 22에 있는 페이지 (3:226505)의 읽기 중 이오류가 발생했습니다. 자세한 내용은 SQL Server 오류 로그 또는 시스템 이벤트 로그의 추가 메시지에서 확인할 수 있습니다. 이는 데이터베이스 무결성을 위협하는 심각한 오류 상태이며 즉시 수정해야 합니다. 전체 데이터베이스 일관성 검사(DBCC CHECKDB)를 완료하십시오. 이 오류는 다양한 요인으로 인해 발생할 수 있습니다. 자세한 내용은 SQL Server 온라인 설명서를 참조하십시오.

---

 

처음 겪어보는(?) 메세지라 dbcc checkdb (DB명) 을 하였더니

중간에 아래와 같은 메세지가 있더군요

 

---

'CHARITEM'의 DBCC 결과입니다.
메시지 8928, 수준 16, 상태 1, 줄 1
개체 ID 117575457, 인덱스 ID 1, 파티션 ID 72057594250919936, 할당 단위 ID 72057594259177472(In-row data 유형): 페이지 (3:226505)을(를) 처리할 수 없습니다. 자세한 내용은 다른 오류를 참조하십시오.
메시지 8939, 수준 16, 상태 98, 줄 1
테이블 오류: 개체 ID 117575457, 인덱스 ID 1, 파티션 ID 72057594250919936, 할당 단위 ID 72057594259177472(In-row data 유형), 페이지 (3:226505). 테스트(IS_OFF (BUF_IOERR, pBUF->bstat))가 실패했습니다. 값은 29493257 및 -4입니다.
메시지 8976, 수준 16, 상태 1, 줄 1
테이블 오류: 개체 ID 117575457, 인덱스 ID 1, 파티션 ID 72057594250919936, 할당 단위 ID 72057594259177472(In-row data 유형). 부모 (5:141950)과(와) 이전의 (3:226504)이(가) 페이지 (3:226505)을(를) 참조하지만 이 페이지가 검색에 없습니다. 이전 오류를 확인하십시오.
메시지 8978, 수준 16, 상태 1, 줄 1
테이블 오류: 개체 ID 117575457, 인덱스 ID 1, 파티션 ID 72057594250919936, 할당 단위 ID 72057594259177472(In-row data 유형). 페이지 (3:226506)에 이전 페이지 (3:226505)에서의 참조가 없습니다. 체인 연결 문제가 있는 것 같습니다.
332892개 페이지에 개체 "CHARITEM"에 대한 행이 15609729개 있습니다.
CHECKDB이(가) 테이블 'CHARITEM'(개체 ID 117575457)에서 0개의 할당 오류와 4개의 일관성 오류를 찾았습니다.
---

 

그래서 아래와 같이 해서 수정하였습니다.

 

alter database DB명 set single_user
go

dbcc checktable (charitem, REPAIR_ALLOW_DATA_LOSS )
go

alter database DB명 set multi_user
go

 

운영경험이 적어서  위와같은 물리적 오류를 많이 안겪어봤는데,  혹시나 저와같은 상황을 처음겪는분들에게

조금라도 도움이 될까해서 남깁니다.^^;

 

참고로

dbcc checktable 의 옵션에 3가지가 존재하는데

REPAIR_FAST or  REPAIR_REBUILD  해보고 안되면 REPAIR_ALLOW_DATA_LOSS 하세요.

REPAIR_ALLOW_DATA_LOSS 는 데이타가 손실될수 있습니다.

 

DBCC CHECKDB 에 관한 석이님 링크 : http://cafe.naver.com/sqlmvp/492

 



Posted by 요지
,