DBCC CHECKALLOC(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
지정된 데이터베이스에 대한 디스크 공간 할당 구조의 일관성을 검사합니다.
구문
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 CHECKDB 및 DBCC 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, xml 및 image 데이터가 포함됩니다. |
행 오버플로 데이터 | 페이지에 행 외부로 밀어넣은 가변 길이 열 데이터가 포함됩니다. |
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