DBCC CHECKDB
Error 확인
USE [카탈로그명]; GO DBCC CHECKDB NO_INFOMSGS; |
DBCC CHECKDB NO_INFOMSGS
CHECKDB 후 단순 정보 메세지가 나오는 것을 방지한다. (serverity level 10 이상만 보여줌)
DBCC CHECKDB TBLOCK
CHECKDB 시 DB 스냅샷을 생성하는데 이 작업을 하지 않고 임시 exclusive lock을 걸어 체크한다.
장점 : CHECKDB 소요시간을 줄여준다.
단전 : 다른 프로세스와 경합이 발생한다. System table metadata와 service broker validation 체크는 하지 않는다.
DBCC CHECKDB PHYSICAL_ONLY
시스템 카탈로그, 모든 테이블의 각 페이지를 체크한다.
DBCC CHECKDB ESTIMATEONLY
CHECKDB는 실행하지 않고 snapshot을 생성하기 위해 필요한 TempDB 사이즈만 알려준다.
DBCC CHECKDB ALL_ERRORMSGS
지난 버전과의 호환성 확인을 위해 사용한다.
Error 수정
* DBCC CHECKDB 실행 시 minimum repair option을 알려주기 때문에 처음부터 수정하기 위한 옵션을 포함해서 실행하지 않는 것이 좋다.
ALTER DATABASE [카탈로그명] SET SINGLE_USER; GO DBCC CHECKDB ([카탈로그명], REPAIR_REBUILD); GO ALTER DATABASE [카탈로그명] SET MULTI_USER; |
DBCC CHECKDB ([카탈로그명], REPAIR_REBUILD)
Data 손실 없이 복구하는 방법으로 bad page pointer, non-clustered index 경합 등의 문제를 해결할 수 있따.
DBCC CHECKDB ([카탈로그명], REPAIR_ALLOW_DATA_LOSS)
백업이 없을 경우 해당 옵션을 사용하고 가능하면 REPAIR_REBUILD 옵션 사용 권장
msdb.dbo.suspect_pages 에서 deallocated 된 page에 접근한 기록 확인 가능
Emergency Mode
DB 파일의 extent가 손상되어 접근이 불가능하며 REPAIR_ALLOW_DATA_LOSS 옵션으로도 복구 불가능하고 사용 가능한 Backup도 없을 때 Emergency Mode로 REPAIR_ALLOW_DATA_LOSS를 실행한다.
이 작업은 transaction log가 복구 되도록 강제 시도하고 이 작업이 실패할 경우 transaction log를 재생성한다. 이 때문에 * transaction 정합성이 깨질 수 있어 마지막 복구 용도로만 사용해야 한다.
Data 와 Log 파일이 SQL Server Process에 의해 Lock 되었기 때문에 인스턴스 재시작이 필요하다.
인스턴스 재시작시 복구중(Recovery Pending) 을 확인할 수 있다.
ALTER DATABASE [카탈로그명] SET EMERGENCY; GO ALTER DATABASE [카탈로그명] SET SINGLE_USER; GO DBCC CHECKDB ([카탈로그명], REPAIR_ALLOW_DATA_LOSS); GO ALTER DATABASE [카탈로그명] SET MULTI_USER; |
이 작업으로 인해 정합성이 깨졌기 때문에 DBCC CHECKCONSTRAINTS를 실행해서 DB 제약 사항을 체크해 주어야 한다.
만약 Emergency Mode에서 CHECKDB 실행 실패 시 DB를 복구할 방법은 없다.
다른 DBCC 명령어
DBCC CHECKCATALOG
해당 카탈로그의 일관성 체크 (DBCC CHECKDB의 한 부분으로 PHYSICAL_ONLY, DATA_PURITY 옵션을 제외하고 CHECKDB 옵션을 동일하게 사용할 수 있다.)
DBCC CHECKALLOC
DB disk alooction 구조에 대한 일관성 체크를 할 수 있다. (DBCC CHECKDB의 한 부분으로 table, index, partition에 대한 결과를 반환하며 PHYSICAL_ONLY, DATA_PURITY, REPAIR_REBUILD 옵션을 제외하고 CHECKDB 옵션을 동일하게 사용할 수 있다.)
DBCC CHECKTABLE
특정 테이블과 인덱스에 대해 일관성 체크를 하기위해 사용한다.
DBCC CHECKFILEGROUP
파일그룹에 대해 일관성 체크. 일관성 체크 시 특정 파일 그룹 내의 오브젝트만 일관성 체크를 실행하기 때문에 여러 개에 나눠있는 partition과 같은 경우 다른 파일 그룹에 대해서는 일관성 체크가 되지 않는다.
DBCC CHECKIDENT
Identity 컬럼 체크
옵션으로 테이블명, NORESEED, RESEED, New Reseed Value, WITH NO_INFOMSG가 있음
DBCC CHECKIDENT('테이블명', NORESEED); |
DBCC CHECKCONSTRAINTS
무결성 체크
옵션으로 테이블명 또는 제약조건명, ALL_CONSTRINTS, ALL_ERRORMSGS, NO_INFOMSGS가 있음
대용량 데이터 베이스의 정합성 체크 (Consistency Checks on VLDBs)
DBCC CHECKDB with PHYSICAL_ONLY
전체 CHECKDB 보단 PHYSICAL_ONLY 옵션을 사용하여 시스템 카탈로그, 모든 테이블의 각 페이지 체크를 자주 진행
Backing Up WITH CHECKSUM and DBCC CHECKALLOC
백업 실행 시 WITH CHECKSUM 진행
Spliting the Workload
DBCC CHECKDB 대신 filegroup을 나눠서 DBCC CHECKFILEGROUP으로 실행하여 분산 처리 한다.
Offloading to a Secondary Server
Secondary 서버에서 실행