본문 바로가기

sql server

[ms sql] DBCC CHECKDB 이용한 논리적 오류 복구 방법

* 데이터베이스 논리적인 오류 복구 방법

--DB에 오류가 있는지 확인.
--오류가 심각할 경우는 DBCC CHECKDB 가 완료되지 못하고 오류 메시기 발생. 이때는 DBCC CHECKDB 로 복구 불가.
DBCC CHECKDB('DBname')

--복구 가능한 오류가 발견되면, 다른 세션에서의 접근을 막기 위해 single user 모드로 변경.
ALTER DATABASE DBname set single_user WITH ROLLBACK IMMEDIATE

--오류를 수정하기 위해 다음의 명령을 실행.
DBCC CHECKDB('DBname', REPAIR_FAST) -- 데이터 손실 위험 없는 REPAIR_FAST 또는 REPAIR_REBUILD 을 먼저 실행.

/*
(1)REPAIR_FAST : 데이타의 손실 위험 없이 빨리 복구 작업을 수행할 수 있다.(클러스터되지 않은 인덱스 복구 가능)

(2)REPAIR_REBUILD : REPAIR_FAST이 하는 모든 작업, 인덱스 재생성과 같이 시간이 소요되는 작업이 복구 과정에서 진행됨. 역시 데이터의 손실 위험은 없다.

(3)REPAIR_ALLOW_DATA_LOSS : REPAIR_REBUILD이 하는 모든 작업, 할당 오류, 구조적 행 오류나 페이지 오류, 손상된 텍스트 개체 삭제를 수정하기 위한 행과 페이징의 할당 및 할당 취소 등의 작업이 행해진다. 데이터 손실 위험 있음.
*/

--오류 유무 다시 확인.
DBCC CHECKDB('DBname') 실행 후 여전히 오류 발생시 DBCC CHECKDB('DBname', REPAIR_ALLOW_DATA_LOSS) 실행. 데이터 손실 위험 있음.

--오류가 없으면 DB를 Multi User 모드로 변경.
ALTER DATABASE DBname SET MULTI_USER

 

* DB에 큰 오류를 막기 위해 주기적으로 DBCC CHECKDB('DBname') 로 확인해 주는 것이 좋음.