BoSD(Blue Screen) 발생 후 비정상적으로 시스템이 재시작 되었습니다. 부팅 후 Enterprise Manager 를 확인해 보니 laigo 데이터베이스가 suspect(주의대상) 상태가 되었습니다. 트랜잭션이 손상되었고 로그 리빌드를 수행하여 데이터베이스를 복구하는 방법을 아래와 같이 정리하였습니다.
[환경]
SQL Server 2000 SP4
[현상]
laigo 데이터베이스 Suspect(주의대상) 발생
[해결방법]
해당 데이터베이스에 접근이 불가능하므로 suspect 상태에서는 아무런 작업을 진행할 수 없습니다.
응급 복구 모드로 변경해야 하므로 시스템 테이블을 변경하기 위해 구성 옵션을 변경합니다.
go
sp_configure 'allow update', 1
RECONFIGURE WITH OVERRIDE
go
해당 데이터베이스 응급 모드(32768 = emergency mode)로 변경합니다.
SQL 서비스를 중지합니다.
기존 LDF 파일의 이름을 변경하거나, 복사해서 다른 곳으로 백업합니다. SQL 서비스를 재시작 합니다.
로그 파일을 재 생성합니다.
DB의 .ldf 파일이 초기화 되면서, DB는 DBO만 사용상태로 활성화 됩니다.
다음 명령으로 복구한 DB의 상태가 ‘2048 = dbo use only’ 상태로 되어 있는지 확인합니다.
다음 명령으로 복구한 DB의 모드를 ‘기본모드 = 0’ 변경합니다. 이제 EM을 재연결 하면 DB의 상태가 보통으로
변경 됨을 확인 할 수 있습니다.(사용자 접속이 가능한 상태)
일관성 오류를 체크하기 위해 single user 모드로 변경하며 즉시 사용자 접속을 차단합니다.
데이터베이스 손상 여부를 검사하기 위해 일관성 검사를 진행합니다.
명령 실행 후 오류가 발견되지 않았다면 복구가 완료된 상태입니다.
일관성 오류를 수정하기 위해 다음 명령을 실행합니다.
일관성 오류가 발생되었을 때, 해당하는 적합한 옵션을 부여합니다.
데이터의 손실 위험 없이 빠른 복구 작업을 수행할 수 있습니다(클러스터되지 않은 인덱스 복구 가능)
(2) REPAIR_REBUILD
REPAIR_FAST이 하는 모든 작업, 인덱스 재생성과 같이 시간이 소요되는 작업이 복구 과정에서 진행됩니다. 역시 데이터의 손실 위험은 없습니다.
(3) REPAIR_ALLOW_DATA_LOSS
REPAIR_REBUILD이 하는 모든 작업, 할당 오류, 구조적 행 오류나 페이지 오류, 손상된 텍스트 개체 삭제를 수정하기 위한 행과 페이징의 할당 및 할당 취소 등의 작업이 행해집니다. 이러한 복구를 할 경우 일부 데이터가 손실될 수 있습니다. 복구를 완료한 후 데이터베이스를 백업합니다.
명령이 완료되면, 다시 한번 DBCC CHECKDB 명령을 수행하여 일관성 오류가 수정되었는지 확인합니다.
더 이상 오류가 발견되지 않으면, multi_user 모드로 변경하여 사용자 접속이 가능하게 해줍니다.
사용자 접속이 되고 있는지 모니터링 합니다.
모든 작업이 완료되면, 시스템 카탈로그를 수정 할 수 없게 변경해 줍니다.
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
