본문 바로가기
프로그래밍

[DB - MSSQL] 일관성 오류 해결

by 건우아빠유리남편 2012. 1. 20.
반응형

[DB - MSSQL] 일관성 오류 해결


SQL Server에서 일관성 기반의 논리적인 I/O 오류가 검색되었습니다: 체크섬이 잘못되었습니다


MSSQL을 사용하다 보면 위와 같은 오류를 만날 수 있다. 아이고... 이것땜에 또 얼매나 시간을 허비했나..ㅋㅋㅋ

상황은 이렇다. 어떤 테이블에서 데이터를 삭제하려고 하니 위와 같은 오류가... 그래서 나보고 오류를 검색해보란다.
DBCC CHECKDB                   => 요 명령어로 오류를 검출한다.
원인은 여러가지 일 수 있다.


나같은 경우엔.. 테이블 정의 중, 인덱스 정의를 변경 하여, 데이터 무결성이 보장되지 않아서 내는 오류였다. 그래서 인덱스를 함 다 지워보니, 정상적으로 오류를 출력하지 않음... 아무래도.. 인덱스별로 재구성 하면서, 인덱스 충돌로 인해 나는 오류같다. 인덱스를 좀 여러개 잡아놨거든..ㅋㅋㅋㅋ

참고로 웹에 검색해보면 아래와 같은 해결법도 있다.

alter database DB명 set single_user
go
dbcc checktable (charitem, REPAIR_FAST)
go
alter database DB명 set multi_user
go


참고] 복구 옵션에 대하여 이해하기
A. REPAIR_FAST 옵션 : 사소한 손상을 복구하는 작업을 수행하며 수행 시간도 빠 르고 데이터 유실도 유발하지 않습니다.
B. REPAIR_REBUILD 옵션 : REPAIR_FAST 에서 이루어지는 모든 복구 작업을 수 행하고 인덱스 재작성과 같이 시간이 소요되는 복구 작업을 수행하며,
소요 시간 이 길고 데이터 유실도 발생하지 않습니다.
C. REPAIR_ALLOW_DATA_LOSS 옵션 : REPAIR_REBUILD가 수행하는 모든 작업 들을 동일하게 수행하며, 데이터 유실이 발생할 수 있는 작업을 추가로 수행합니 다.
   구조적인 문제와 페이지 오류를 정정하고 손상된 텍스트 오브젝트를 삭제하 는 작업을 수행하기 때문에 데이터 유실이 발생할 수도 있습니다.

[참고] 복구 작업 단계 1. 해당 데이터베이스를 단일 사용자 모드로 변경합니다.
2. REPAIR 옵션을 지정하여 DBCC CHECKDB를 수행합니다.
   2-1. 먼저 REPAIR_FAST 나 REPAIR_REBUILD 옵션을 지정하여 문제 해결을 시 도합니다.
   2-2. REPAIR_FAST 나 REPAIR_REBUILD 옵션으로 문제가 해결되지 않으면 REPAIR_ALLOW_DATA_LOSS 옵션을 사용합니다.
[주의] REPAIR_ALLOW_DATA_LOSS 옵션을 사용하면 데이터의 유실이 발생할 수 있 다는 점을 명심하기 바랍니다. [
       권고사항] REPAIR_ALLOW_DATA_LOSS 옵션을 사용하는 경우에는 명령어 수행 후에 다 시 원래 상태로 복구할 수 있도록 하기 위해서 트랜잭션 내부에서 DBCC 명령어 를 수행할 것을 권고합니다.
       이와 같이 작업하면 복구 작업을 수행하고 결과를 확 인한 다음에 필요한 경우에 롤백이 가능해집니다. 3. 복구가 완료되면 데이터베이스를 백업합니다.


반응형

댓글