BoSD(Blue Screen) 발생 후 비정상적으로 시스템이 재시작 되었습니다. 부팅 후 Enterprise Manager 를 확인해 보니 laigo 데이터베이스가 suspect(주의대상) 상태가 되었습니다. 트랜잭션이 손상되었고 로그 리빌드를 수행하여 데이터베이스를 복구하는 방법을 아래와 같이 정리하였습니다. 


[환경]
SQL Server 2000 SP4


[현상]
laigo 데이터베이스 Suspect(주의대상) 발생

사용자 삽입 이미지




[해결방법]
해당 데이터베이스에 접근이 불가능하므로 suspect 상태에서는 아무런 작업을 진행할 수 없습니다.
응급 복구 모드로 변경해야 하므로 시스템 테이블을 변경하기 위해 구성 옵션을 변경합니다.

USE MASTER
go

sp_configure 'allow update', 1
RECONFIGURE WITH OVERRIDE
go


해당 데이터베이스 응급 모드(32768 = emergency mode)로 변경합니다.

UPDATE SYSDATABASES SET STATUS = 32768 WHERE NAME = 'laigo'


SQL 서비스를 중지합니다.
기존 LDF 파일의 이름을 변경하거나, 복사해서 다른 곳으로 백업합니다. SQL 서비스를 재시작 합니다.
로그 파일을 재 생성합니다.

DBCC REBUILD_LOG('laigo' , 'D:\DATA\laigo_log.ldf')


DB의 .ldf 파일이 초기화 되면서, DB는 DBO만 사용상태로 활성화 됩니다.
다음 명령으로 복구한 DB의 상태가 ‘2048 = dbo use only’ 상태로 되어 있는지 확인합니다.
 

SELECT * FROM SYSDATABASES

사용자 삽입 이미지



다음 명령으로 복구한 DB의 모드를 ‘기본모드 = 0’ 변경합니다. 이제 EM을 재연결 하면 DB의 상태가 보통으로
변경 됨을 확인 할 수 있습니다.(사용자 접속이 가능한 상태)
 

UPDATE SYSDATABASES SET STATUS = 0 WHERE NAME = 'laigo'


일관성 오류를 체크하기 위해 single user 모드로 변경하며 즉시 사용자 접속을 차단합니다.

ALTER DATABASE laigo SET single_user WITH ROLLBACK IMMEDIATE


데이터베이스 손상 여부를 검사하기 위해 일관성 검사를 진행합니다.
명령 실행 후 오류가 발견되지 않았다면 복구가 완료된 상태입니다.

DBCC CHECKDB('laigo')


사용자 삽입 이미지


일관성 오류를 수정하기 위해 다음 명령을 실행합니다.

DBCC CHECKDB('laigo', 옵션)

일관성 오류가 발생되었을 때, 해당하는 적합한 옵션을 부여합니다.

(1) REPAIR_FAST
데이터의 손실 위험 없이 빠른 복구 작업을 수행할 수 있습니다(클러스터되지 않은 인덱스 복구 가능)

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

(3) REPAIR_ALLOW_DATA_LOSS
REPAIR_REBUILD이 하는 모든 작업, 할당 오류, 구조적 행 오류나 페이지 오류, 손상된 텍스트 개체 삭제를 수정하기 위한 행과 페이징의 할당 및 할당 취소 등의 작업이 행해집니다. 이러한 복구를 할 경우 일부 데이터가 손실될 수 있습니다. 복구를 완료한 후 데이터베이스를 백업합니다.


명령이 완료되면, 다시 한번 DBCC CHECKDB 명령을 수행하여 일관성 오류가 수정되었는지 확인합니다.

DBCC CHECKDB('laigo')


더 이상 오류가 발견되지 않으면, multi_user 모드로 변경하여 사용자 접속이 가능하게 해줍니다.

ALTER DATABASE laigo SET multi_user


사용자 접속이 되고 있는지 모니터링 합니다.

sp_who2


모든 작업이 완료되면, 시스템 카탈로그를 수정 할 수 없게 변경해 줍니다.

sp_configure 'allow update', 0
RECONFIGURE WITH OVERRIDE
go



[참고자료]
SQL Server DBA 가이드
http://www.microsoft.com/korea/technet/sql/tuning_guide_developer03.mspx

SQL 2000 DB Suspect 발생 시 대처 요령
http://winlife.tistory.com/entry/SQL-2000-DB-Suspect-발생-시-대처-요령


작성자 : Lai Go / 작성일자 : 2008.05.18

Posted by Lai Go