* 데이터베이스 논리적인 오류 복구 방법
--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') 로 확인해 주는 것이 좋음.
'sql server' 카테고리의 다른 글
[ms sql] 로그(log)파일 손상으로 트랜잭션 로그 백업 오류 (0) | 2025.02.24 |
---|---|
[ms sql] 랜덤한 난수 생성 (1) | 2024.12.19 |
[ms sql] IDENTITY 필드에 수동(강제)입력 (0) | 2023.03.12 |
[ms sql] 양의정수 조회 (0) | 2022.10.25 |
[ms sql] 레코드 그룹별 문자열 합치기 (0) | 2022.07.15 |