DBCC CHECKALLOC (Transact-SQL)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance
Checks the consistency of disk space allocation structures for a specified database.
Transact-SQL syntax conventions
Syntax
DBCC CHECKALLOC
[
( database_name | database_id | 0
[ , NOINDEX
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
)
[ WITH
{
[ ALL_ERRORMSGS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
}
]
]
Arguments
database_name | database_id | 0
The name or the ID of the database for which to check allocation and page usage.
If not specified, or if 0 is specified, the current database is used.
Database names must follow the rules for identifiers.
NOINDEX
Specifies that nonclustered indexes for user tables shouldn't be checked.
NOINDEX
is maintained for backward compatibility only and doesn't affect DBCC CHECKALLOC
.
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
Specifies that DBCC CHECKALLOC
repair the found errors. database_name must be in single-user mode.
REPAIR_ALLOW_DATA_LOSS
Tries to repair any errors that are found. These repairs can cause some data loss.
REPAIR_ALLOW_DATA_LOSS
is the only option that allows for allocation errors to be repaired.REPAIR_FAST
Syntax is maintained for backward compatibility only. No repair actions are performed.
REPAIR_REBUILD
Not applicable.
Important
Use the REPAIR options only as a last resort. To repair errors, we recommend restoring from a backup. Repair operations don't consider any of the constraints that may exist on or between tables. If the specified table is involved in one or more constraints, we recommend running DBCC CHECKCONSTRAINTS
after a repair operation. If you must use REPAIR, run DBCC CHECKDB
without a repair option to find the repair level to use. If you use the REPAIR_ALLOW_DATA_LOSS
level, we recommend that you back up the database before you run DBCC CHECKDB
with this option.
WITH
Enables options to be specified.
ALL_ERRORMSGS
Displays all error messages. All error messages are displayed by default. Specifying or omitting this option has no effect.
NO_INFOMSGS
Suppresses all informational messages and the report of space used.
TABLOCK
Causes the DBCC command to obtain an exclusive database lock.
ESTIMATEONLY
Displays the estimated amount of
tempdb
space that is required to runDBCC CHECKALLOC
when all the other options are specified.
Remarks
DBCC CHECKALLOC
checks the allocation of all pages in the database, regardless of the type of page or type of object to which they belong. It also validates the various internal structures that are used to keep track of these pages and the relationships between them.
If NO_INFOMSGS
isn't specified, DBCC CHECKALLOC
collects space usage information for all objects in the database. This information is printed together with any errors that are found.
Note
The DBCC CHECKALLOC
functionality is included in DBCC CHECKDB and DBCC CHECKFILEGROUP. This means that you do not have to run DBCC CHECKALLOC
separately from these statements. DBCC CHECKALLOC
does not check FILESTREAM data. FILESTREAM stores binary large objects (BLOBS) on the file system.
Internal database snapshot
DBCC CHECKALLOC
uses an internal database snapshot to provide the transactional consistency that it needs to perform these checks. If a snapshot can't be created, or TABLOCK
is specified, DBCC CHECKALLOC
tries to acquire an exclusive (X
) lock on the database to obtain the required consistency.
Note
Running DBCC CHECKALLOC
against tempdb
does not perform any checks. This is because, for performance reasons, database snapshots are not available on tempdb
. This means that the required transactional consistency cannot be obtained. Stop and start the Database Engine to resolve any tempdb
allocation issues. This action drops and re-creates the tempdb
database.
Understand DBCC error messages
After the DBCC CHECKALLOC
command finishes, a message is written to the SQL Server error log. If the DBCC command successfully executes, the message indicates a successful completion, and the amount of time that the command ran. If the DBCC command stops before completing the check because of an error, the message indicates the command was terminated, a state value, and the amount of time the command ran. The following table lists and describes the state values that can be included in the message.
State | Description |
---|---|
0 | Error number 8930 was raised. This indicates a metadata corruption that caused the DBCC command to terminate. |
1 | Error number 8967 was raised. There was an internal DBCC error. |
2 | A failure occurred during emergency mode database repair. |
3 | This indicates a metadata corruption that caused the DBCC command to terminate. |
4 | An assert or access violation was detected. |
5 | An unknown error occurred that terminated the DBCC command. |
Error reporting
A mini-dump file (SQLDUMP<nnnn>.txt
) is created in the SQL Server LOG
directory whenever DBCC CHECKALLOC
detects a corruption error. When the Feature Usage data collection and Error Reporting features are enabled for the instance of SQL Server, the file is automatically forwarded to Microsoft. The collected data is used to improve SQL Server functionality.
The dump file contains the results of the DBCC CHECKALLOC
command and additional diagnostic output. The file has restricted discretionary access-control lists (DACLs). Access is limited to the SQL Server service account and members of the sysadmin role. By default, the sysadmin role contains all members of the Windows BUILTIN\Administrators group and the local administrator's group. The DBCC command doesn't fail if the data collection process fails.
Resolve errors
If DBCC CHECKALLOC
reports any errors, we recommend that you restore the database from the database backup instead of running a repair. If a backup doesn't exist, running a repair can correct the reported errors; however, correcting the errors might require some pages, and therefore data, to be deleted.
A repair can be performed in a user transaction. This allows for changes to be rolled back. If changes are rolled back, the database will still contain errors, and must be restored from a backup. After the repairs finish, back up the database.
Result sets
The following tables describe the information that DBCC CHECKALLOC
returns.
Item | Description |
---|---|
FirstIAM | Internal use only. |
Root | Internal use only. |
Dpages | Data page count. |
Pages used | Allocated pages. |
Dedicated extents | Extents allocated to the object. If mixed allocation pages are used, there might be pages allocated without extents. |
DBCC CHECKALLOC
also reports an allocation summary for each index and partition in each file. This summary describes the distribution of the data.
Item | Description |
---|---|
Reserved pages | Pages allocated to the index and the unused pages in allocated extents. |
Used pages | Pages allocated and being used by the index. |
Partition ID | Internal use only. |
Alloc unit ID | Internal use only. |
In-row data | Pages contain index or heap data. |
LOB data | Pages contain varchar(max), nvarchar(max), varbinary(max), text, ntext, xml, and image data. |
Row-overflow data | Pages contain variable-length column data that has been pushed off-row. |
DBCC CHECKALLOC
returns the following result set (values may vary), except when ESTIMATEONLY
or NO_INFOMSGS
is specified.
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.
When ESTIMATEONLY
is specified, DBCC CHECKALLOC
returns the following result set.
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
34
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Permissions
Requires membership in the sysadmin fixed server role or the db_owner fixed database role.
Examples
The following example executes DBCC CHECKALLOC
for the current database and for the AdventureWorks2022
database.
-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks2022 database.
DBCC CHECKALLOC (AdventureWorks2022);
GO