DBCC(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스Azure SQL Managed Instance

Transact-SQL 프로그래밍 언어는 SQL Server에 대해 데이터베이스 콘솔 명령으로 작동하는 DBCC 문을 제공합니다.

데이터베이스 콘솔 명령 문은 다음과 같은 범주로 분류할 수 있습니다.

명령 범주 수행하는 작업
유지 관리 데이터베이스, 인덱스 또는 파일 그룹에 대한 유지 관리 태스크
기타 추적 플래그 설정이나 메모리에서 DLL 제거 같은 기타 태스크입니다.
정보 제공 다양한 정보를 수집하고 표시하는 태스크입니다.
유효성 검사 데이터베이스, 테이블, 인덱스, 카탈로그, 파일 그룹 또는 데이터베이스 페이지 할당에 대한 유효성 검사 작업입니다.

DBCC 명령은 입력 매개 변수와 반환 값을 사용합니다. 모든 DBCC 명령 매개 변수는 유니코드와 DBCS 리터럴을 모두 사용할 수 있습니다.

DBCC 내부 데이터베이스 스냅샷 사용법

다음 DBCC 명령은 데이터베이스 엔진에서 만든 내부 읽기 전용 데이터베이스 스냅샷에서 작동합니다. 이 스냅샷을 사용하면 이러한 명령이 실행될 때 차단 및 동시성 문제를 방지할 수 있습니다. 자세한 내용은 데이터베이스 스냅샷(SQL Serve)을 참조하세요.

  • DBCC CHECKALLOC
  • DBCC CHECKCATALOG
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE

이러한 DBCC 명령 중 하나를 실행할 때 데이터베이스 엔진에서 데이터베이스 스냅샷을 만들어 트랜잭션이 일관성 있는 상태가 되도록 합니다. 그런 다음 DBCC 명령은 이 스냅샷에 대한 검사를 실행합니다. DBCC 명령이 완료되면 이 스냅샷은 삭제됩니다.

내부 데이터베이스 스냅샷이 필요하지 않거나 생성되지 않는 경우도 있습니다. 이럴 경우 DBCC 명령은 실제 데이터베이스에 실행됩니다. 데이터베이스가 온라인 상태인 경우 DBCC 명령은 테이블 잠금을 사용하여 검사 중인 개체의 일관성을 유지하도록 합니다. 이 동작은 WITH TABLOCK 옵션이 지정된 경우와 동일합니다.

다음과 같은 경우에 DBCC 명령이 실행되면 내부 데이터베이스 스냅샷이 생성되지 않습니다.

  • master 데이터베이스에 대해 실행되고, SQL Server 인스턴스가 단일 사용자 모드로 실행 중인 경우
  • master 이외의 데이터베이스에 대해 실행되지만, 해당 데이터베이스가 ALTER DATABASE 문을 사용하여 단일 사용자 모드로 배치된 경우
  • 읽기 전용 데이터베이스에 대해 실행된 경우
  • ALTER DATABASE 문을 사용하여 응급 모드로 설정된 데이터베이스에 대해 실행된 경우
  • tempdb에 대해 실행된 경우. 이 경우 내부 제한 사항으로 인해 데이터베이스 스냅샷을 만들 수 없습니다.
  • WITH TABLOCK 옵션을 사용하는 경우 이 경우 DBCC는 데이터베이스 스냅샷을 만들지 않도록 요청하는 것으로 인식합니다.

DBCC 명령이 다음에 대해 실행될 때 이 명령은 내부 데이터베이스 스냅샷 대신 테이블 잠금을 사용합니다.

  • 읽기 전용 파일 그룹
  • FAT 파일 시스템
  • '명명된 스트림'을 지원하지 않는 볼륨
  • '대체 스트림'을 지원하지 않는 볼륨

참고

WITH TABLOCK 옵션을 사용하여 DBCC CHECKALLOC 또는 DBCC CHECKDB의 동등한 부분을 실행하려면 데이터베이스 X(X) 잠금이 필요합니다. 이 데이터베이스 잠금은 tempdb 또는 master에 설정할 수 없으며, 다른 모든 데이터베이스에서도 실패할 수 있습니다.

참고

내부 데이터베이스 스냅샷을 만들 수 없는 경우 DBCC CHECKDBmaster에 대해 실행되면 실패합니다.

DBCC 명령에 대한 진행률 보고

sys.dm_exec_requests 카탈로그 뷰에는 DBCC CHECKDB, CHECKFILEGROUPCHECKTABLE 명령의 현재 실행 단계와 진행률에 대한 정보가 포함되어 있습니다. percent_complete 열은 명령의 완료 비율을 표시하고, command 열은 해당 명령의 현재 실행 단계를 보고합니다.

진행률 단위에 대한 정의는 DBCC 명령의 현재 실행 단계에 따라 다릅니다. 때때로 진행률은 데이터베이스 페이지의 세분성에 따라 보고되며 다른 단계에서는 할당 복구 또는 단일 데이터베이스의 세분성에 따라 보고됩니다. 다음 표에서는 각 실행 단계 및 명령이 진행률을 보고하는 세분성에 대해 설명합니다.

실행 단계 Description 진행률 보고 세분성
DBCC TABLE CHECK 이 단계 동안 데이터베이스의 개체에 대한 논리적 일관성과 물리적 일관성을 검사합니다. 데이터베이스 페이지 수준에서 보고된 진행률입니다.

진행률 보고 값은 1000개의 데이터베이스 페이지가 검사될 때마다 업데이트됩니다.
DBCC TABLE REPAIR REPAIR_FAST, REPAIR_REBUILD 또는 REPAIR_ALLOW_DATA_LOSS가 지정되어 있고 복구해야 하는 개체 오류가 있는 경우 이 단계 동안 데이터베이스 복구가 수행됩니다. 개별 복구 수준에서 보고된 진행률입니다.

완료된 각 복구에 대해 카운터가 업데이트됩니다.
DBCC ALLOC CHECK 이 단계 동안 데이터베이스의 할당 구조를 검사합니다.

참고:DBCC CHECKALLOC는 동일한 검사를 수행합니다.
진행률이 보고되지 않음
DBCC ALLOC REPAIR REPAIR_FAST, REPAIR_REBUILD 또는 REPAIR_ALLOW_DATA_LOSS가 지정되어 있고 복구해야 하는 할당 오류가 있는 경우 이 단계 동안 데이터베이스 복구가 수행됩니다. 진행률이 보고되지 않습니다.
DBCC SYS CHECK 이 단계 동안 데이터베이스 시스템 테이블을 검사합니다. 데이터베이스 페이지 수준에서 보고된 진행률입니다.

진행률 보고 값은 검사되는 1000개의 데이터베이스 페이지마다 업데이트됩니다.
DBCC SYS REPAIR REPAIR_FAST, REPAIR_REBUILD 또는 REPAIR_ALLOW_DATA_LOSS가 지정되어 있고 복구해야 하는 시스템 테이블 오류가 있는 경우 이 단계 동안 데이터베이스 복구가 수행됩니다. 개별 복구 수준에서 보고된 진행률입니다.

완료된 각 복구에 대해 카운터가 업데이트됩니다.
DBCC SSB CHECK 이 단계 동안 SQL Server Service Broker 개체를 검사합니다.

참고:DBCC CHECKTABLE이 실행되는 경우 이 단계가 실행되지 않습니다.
진행률이 보고되지 않습니다.
DBCC CHECKCATALOG 이 단계 동안 데이터베이스 카탈로그의 일관성을 검사합니다.

참고: DBCC CHECKTABLE이 실행되는 경우 이 단계가 실행되지 않습니다.
진행률이 보고되지 않습니다.
DBCC IVIEW CHECK 이 단계 동안 데이터베이스에 있는 인덱싱된 뷰에 대한 논리적 일관성을 검사합니다. 검사 중인 개별 데이터베이스 뷰의 수준에서 보고된 진행률입니다.

알림 문

유효성 검사 문

유지 관리 문

기타 문