다음을 통해 공유


DBCC CHECKALLOC(Transact-SQL)

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

지정된 데이터베이스에 대한 디스크 공간 할당 구조의 일관성을 검사합니다.

Transact-SQL 구문 표기 규칙

구문

DBCC CHECKALLOC
[
    ( database_name | database_id | 0
      [ , NOINDEX
      | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
    )
    [ WITH
        {
          [ ALL_ERRORMSGS ]
          [ , NO_INFOMSGS ]
          [ , TABLOCK ]
          [ , ESTIMATEONLY ]
        }
    ]
]

인수

database_name | database_id | 0

할당 및 페이지 사용률을 검사할 데이터베이스의 이름 또는 ID입니다.

아무 값도 지정하지 않거나 0을 지정하면 현재 데이터베이스가 사용됩니다.

데이터베이스 이름은 반드시 식별자에 적용되는 규칙을 준수해야 합니다.

NOINDEX

사용자 테이블의 비클러스터형 인덱스를 검사하지 않도록 지정합니다.

NOINDEX는 이전 버전과의 호환성을 위해서만 유지 관리되며 DBCC CHECKALLOC에 영향을 주지 않습니다.

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD

DBCC CHECKALLOC 실행 시 검색된 오류를 복구하도록 지정합니다. database_name은 단일 사용자 모드여야 합니다.

  • REPAIR_ALLOW_DATA_LOSS

    발견된 오류를 복구하려고 시도합니다. 이러한 복구를 수행하면 일부 데이터가 손실될 수 있습니다. REPAIR_ALLOW_DATA_LOSS는 할당 오류를 복구하는 데 사용할 수 있는 유일한 옵션입니다.

  • REPAIR_FAST

    이전 버전과의 호환성을 위해서만 구문이 유지됩니다. 복구 동작은 수행되지 않습니다.

  • REPAIR_REBUILD

    해당 사항 없음

중요

REPAIR 옵션은 최후의 수단으로만 사용하십시오. 오류를 복구하려면 백업에서 복원하는 것이 좋습니다. 복구 작업이 수행될 경우 테이블 자체나 테이블 간에 존재할 수 있는 제약 조건이 고려되지 않습니다. 지정된 테이블이 하나 이상의 제약 조건에 관련되면 복구 작업 후에 DBCC CHECKCONSTRAINTS를 실행하는 것이 좋습니다. REPAIR를 사용해야 하는 경우 복구 옵션 없이 DBCC CHECKDB를 실행하여 사용할 복구 수준을 확인합니다. REPAIR_ALLOW_DATA_LOSS 수준을 사용하는 경우 이 옵션으로 DBCC CHECKDB를 실행하기 전에 데이터베이스를 백업하는 것이 좋습니다.

WITH

지정할 옵션을 설정합니다.

  • ALL_ERRORMSGS

    모든 오류 메시지를 표시합니다. 기본적으로 모든 오류 메시지가 표시됩니다. 이 옵션을 지정하거나 생략하더라도 아무런 영향을 미치지 않습니다.

  • NO_INFOMSGS

    모든 정보 메시지와 사용한 공간 보고서를 표시하지 않습니다.

  • TABLOCK

    DBCC 명령으로 데이터베이스에 대한 배타적 잠금을 얻습니다.

  • ESTIMATEONLY

    다른 모든 옵션이 지정되면 DBCC CHECKALLOC 실행에 필요한 tempdb 공간의 예상 크기를 표시합니다.

설명

DBCC CHECKALLOC는 페이지가 속한 페이지 유형이나 개체 유형과 관계없이 데이터베이스에 있는 모든 페이지의 할당을 검사합니다. 또한 이러한 페이지와 페이지 간 관계를 추적하는 데 사용되는 다양한 내부 구조의 유효성을 검사합니다.

NO_INFOMSGS가 지정되지 않은 경우 DBCC CHECKALLOC는 데이터베이스의 모든 개체에 대한 공간 사용 정보를 수집합니다. 이 정보는 발견된 오류와 함께 출력됩니다.

참고

DBCC CHECKALLOC 기능은 DBCC CHECKDBDBCC CHECKFILEGROUP에 포함되어 있습니다. 따라서 이러한 문과 별도로 DBCC CHECKALLOC를 실행할 필요가 없습니다. DBCC CHECKALLOC는 FILESTREAM 데이터를 검사하지 않습니다. FILESTREAM은 파일 시스템에 BLOB(Binary Large Object)을 저장합니다.

내부 데이터베이스 스냅샷

DBCC CHECKALLOC는 내부 데이터베이스 스냅샷을 사용하여 이러한 검사를 수행하는 데 필요한 트랜잭션 일관성을 지원합니다. 스냅샷을 만들 수 없거나 TABLOCK이 지정되어 있는 경우 DBCC CHECKALLOC는 데이터베이스에 대한 배타적(X) 잠금을 획득하여 필요한 일관성을 확보하려고 합니다.

참고

tempdb에 대해 DBCC CHECKALLOC를 실행하면 아무런 검사도 수행되지 않습니다. 이것은 성능상 이유로 tempdb의 데이터베이스 스냅샷을 사용할 수 없기 때문입니다. 즉, 필요한 트랜잭션 일관성을 얻을 수 없음을 의미합니다. tempdb 할당 문제를 해결하려면 데이터베이스 엔진을 중지한 후 시작합니다. 이 동작을 수행하면 tempdb 데이터베이스가 삭제되고 다시 생성됩니다.

DBCC 오류 메시지 이해

DBCC CHECKALLOC 명령이 완료되면 SQL Server 오류 로그에 메시지가 기록됩니다. DBCC 명령이 성공적으로 실행되면 메시지에 실행 완료 및 명령이 실행된 소요 시간이 표시됩니다. 오류로 인해 DBCC 명령이 검사를 완료하기 전에 중지되면 메시지에 명령 종료, 상태 값 및 명령이 실행된 소요 시간이 표시됩니다. 다음 표에서는 메시지에 포함될 수 있는 상태 값을 나열하고 설명합니다.

시스템 상태 설명
0 오류 번호 8930이 발생했습니다. 메타데이터가 손상되어 DBCC 명령이 종료되었음을 나타냅니다.
1 오류 번호 8967이 발생했습니다. 내부 DBCC 오류가 있습니다.
2 응급 모드 데이터베이스 복구 중에 오류가 발생했습니다.
3 메타데이터가 손상되어 DBCC 명령이 종료되었음을 나타냅니다.
4 어설션 또는 액세스 위반이 감지되었습니다.
5 알 수 없는 오류가 발생하여 DBCC 명령이 종료되었습니다.

오류 보고

DBCC CHECKALLOC이 손상 오류를 발견할 때마다 SQL Server LOG 디렉터리에 미니덤프 파일(SQLDUMP<nnnn>.txt)이 생성됩니다. SQL Server 인스턴스에 대해 기능 사용 데이터 수집 및 오류 보고 기능을 설정하면 이 파일이 Microsoft에 자동으로 전달됩니다. 수집된 데이터를 사용하여 SQL Server 기능을 향상시킬 수 있습니다.

덤프 파일에는 DBCC CHECKALLOC 명령의 결과 및 추가 진단 출력이 포함됩니다. 이 파일에는 제한된 DACL(임의 액세스 제어 목록)이 있습니다. 액세스는 SQL Server 서비스 계정 및 sysadmin 역할의 멤버로 제한됩니다. 기본적으로 sysadmin 역할에는 Windows BUILTIN\Administrators 그룹 및 로컬 관리자 그룹의 모든 멤버가 포함됩니다. 데이터 수집 프로세스가 실패해도 DBCC 명령은 실패하지 않습니다.

오류 해결

DBCC CHECKALLOC가 오류를 보고하면 복구를 실행하는 대신 데이터베이스 백업으로 데이터베이스를 복원하는 것이 좋습니다. 백업이 없는 경우 복구를 실행하면 보고된 오류를 해결할 수 있지만 이렇게 하면 일부 페이지와 그 안의 데이터가 삭제될 수도 있습니다.

사용자 트랜잭션에서 복구를 수행할 수 있습니다. 이렇게 하면 변경 내용이 롤백될 수 있습니다. 변경 내용이 롤백되어도 데이터베이스에는 오류가 그대로 남아 있으므로 백업에서 데이터베이스를 복원해야 합니다. 복구를 완료한 후 데이터베이스를 백업합니다.

결과 집합

다음 표에서는 DBCC CHECKALLOC가 반환하는 정보에 대해 설명합니다.

항목 설명
FirstIAM 내부 전용입니다.
Root 내부 전용입니다.
Dpages 데이터 페이지 수입니다.
Pages used 할당된 페이지입니다.
Dedicated extents 개체에 할당된 익스텐트입니다.

혼합된 할당 페이지를 사용하는 경우에는 익스텐트가 없이 할당된 페이지가 있을 수도 있습니다.

또한 DBCC CHECKALLOC는 각 파일의 인덱스와 파티션에 대한 할당 요약을 보고합니다. 이 요약에서는 데이터 배포에 대해 설명합니다.

항목 Description
Reserved pages 인덱스에 할당된 페이지 및 할당된 익스텐트에서 사용되지 않은 페이지입니다.
Used pages 할당되었으며 인덱스에서 사용하고 있는 페이지입니다.
Partition ID 내부적으로만 사용됩니다.
Alloc unit ID 내부적으로만 사용됩니다.
행 내부 데이터 페이지에 인덱스 또는 힙 데이터가 포함됩니다.
LOB 데이터 페이지에 varchar(max), nvarchar(max), varbinary(max), text, ntext, xmlimage 데이터가 포함됩니다.
행 오버플로 데이터 페이지에 행 외부로 밀어넣은 가변 길이 열 데이터가 포함됩니다.

ESTIMATEONLY 또는 NO_INFOMSGS가 지정된 경우를 제외하고 DBCC CHECKALLOC는 다음 결과 집합을 반환합니다(값은 달라질 수 있음).

DBCC results for 'master'.
***************************************************************
Table sysobjects                Object ID 1.
Index ID 1         FirstIAM (1:11)   Root (1:12)    Dpages 22.
    Index ID 1. 24 pages used in 5 dedicated extents.
Index ID 2         FirstIAM (1:1368)   Root (1:1362)    Dpages 10.
    Index ID 2. 12 pages used in 2 dedicated extents.
Index ID 3         FirstIAM (1:1392)   Root (1:1408)    Dpages 4.
    Index ID 3. 6 pages used in 0 dedicated extents.
Total number of extents is 7.
***************************************************************
'...'
***************************************************************
Table spt_server_info                Object ID 1938105945.
Index ID 1         FirstIAM (1:520)   Root (1:508)    Dpages 1.
    Index ID 1. 3 pages used in 0 dedicated extents.
Total number of extents is 0.
***************************************************************
Processed 52 entries in sysindexes for database ID 1.
File 1. Number of extents = 210, used pages = 1126, reserved pages = 1280.
           File 1 (number of mixed extents = 73, mixed pages = 184).
    Object ID 1, Index ID 0, data extents 5, pages 24, mixed extent pages 9.
'...'
    Object ID 1938105945, Index ID 0, data extents 0, pages 3, mixed extent pages 3.
Total number of extents = 210, used pages = 1126, reserved pages = 1280 in this database.
       (number of mixed extents = 73, mixed pages = 184) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC results for 'master'.
***************************************************************
Table sys.sysrowsetcolumns                Object ID 4.
Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). FirstIAM (1:98). Root (1:94). Dpages 7.
Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). 9 pages used in 1 dedicated extents.
Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). FirstIAM (0:0). Root (0:0). Dpages 0.
Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). 0 pages used in 0 dedicated extents.
Total number of extents is 1.
...
***************************************************************
Processed 201 entries in system catalog for database ID 1.
File 1. Number of extents = 44, used pages = 300, reserved pages = 345.
           File 1 (number of mixed extents = 29, mixed pages = 225).
    Object ID 4, index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data), data extents 1, pages 9, mixed extent pages 8.
    Object ID 5, index ID 1, partition ID 327680, alloc unit ID 327680 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 7, index ID 1, partition ID 458752, alloc unit ID 458752 (type In-row data), data extents 0, pages 5, mixed extent pages 5.
    Object ID 8, index ID 0, partition ID 524288, alloc unit ID 524288 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 13, index ID 1, partition ID 851968, alloc unit ID 851968 (type In-row data), data extents 1, pages 9, mixed extent pages 8.
    Object ID 15, index ID 1, partition ID 983040, alloc unit ID 983040 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 26, index ID 1, partition ID 281474978414592, alloc unit ID 1703937 (type In-row data), data extents 0, pages 3, mixed extent pages 3.
    Object ID 27, index ID 1, partition ID 281474978480128, alloc unit ID 1769473 (type In-row data), data extents 0, pages 3, mixed extent pages 3.
    Object ID 27, index ID 2, partition ID 562949955190784, alloc unit ID 1769474 (type In-row data), index extents 0, pages 3, mixed extent pages 3.
...
    Object ID 1179151246, index ID 1, partition ID 72057594038845440, alloc unit ID 13435136 (type In-row data), data extents 2, pages 18, mixed extent pages 8.
    Object ID 1179151246, index ID 2, partition ID 72057594038910976, alloc unit ID 13566208 (type In-row data), index extents 1, pages 16, mixed extent pages 8.
    Object ID 1911677858, index ID 0, partition ID 72057594039631872, alloc unit ID 15073536 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
Total number of extents = 41, used pages = 289, reserved pages = 323 in this database.
       (number of mixed extents = 27, mixed pages = 211) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

ESTIMATEONLY가 지정되면 DBCC CHECKALLOC는 다음 결과 집합을 반환합니다.

Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
34
  
(1 row(s) affected)
  
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

사용 권한

sysadmin 고정 서버 역할의 멤버 또는 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.

예제

다음 예에서는 현재 데이터베이스 및 DBCC CHECKALLOC 데이터베이스에 대해 AdventureWorks2022를 실행합니다.

-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks2022 database.
DBCC CHECKALLOC (AdventureWorks2022);
GO

추가 정보