DBCC CHECKALLOC (Transact-SQL)DBCC CHECKALLOC (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Проверяет согласованность структур выделения места на диске для указанной базы данных.Checks the consistency of disk space allocation structures for a specified database.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon 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 | 0database_name | database_id | 0
Имя или идентификатор базы данных, для которой выполняется проверка выделения и использования страниц.The name or the ID of the database for which to check allocation and page usage. Если значение не указано или указано значение 0, используется текущая база данных.If not specified, or if 0 is specified, the current database is used. Имена баз данных должны соответствовать правилам построения идентификаторов.Database names must follow the rules for identifiers.

NOINDEXNOINDEX
Указывает, что не следует проверять некластеризованные индексы для таблиц пользователя.Specifies that nonclustered indexes for user tables should not be checked.
Аргумент NOINDEX поддерживается только для обратной совместимости и не влияет на выполнение инструкции DBCC CHECKALLOC.NOINDEX is maintained for backward compatibility only and does not affect DBCC CHECKALLOC.

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILDREPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
Указывает, что инструкции DBCC CHECKALLOC следует исправлять обнаруженные ошибки.Specifies that DBCC CHECKALLOC repair the found errors. База данных database_name должна работать в однопользовательском режиме.database_name must be in single-user mode.

REPAIR_ALLOW_DATA_LOSSREPAIR_ALLOW_DATA_LOSS
Предпринимает попытку устранить любые обнаруженные ошибки.Tries to repair any errors that are found. Эти исправления могут привести к частичной потере данных.These repairs can cause some data loss. Параметр REPAIR_ALLOW_DATA_LOSS — единственный, который позволяет исправлять ошибки при выделении пространства.REPAIR_ALLOW_DATA_LOSS is the only option that allows for allocation errors to be repaired.

REPAIR_FASTREPAIR_FAST
Синтаксис сохраняется только в целях обратной совместимости.Syntax is maintained for backward compatibility only. Действия по восстановлению не выполняются.No repair actions are performed.

REPAIR_REBUILDREPAIR_REBUILD
Неприменимо.Not applicable.
Используйте аргументы REPAIR только как последнее средство.Use the REPAIR options only as a last resort. Для устранения ошибок рекомендуется восстановление из резервной копии.To repair errors, we recommend restoring from a backup. Операции восстановления не учитывают никакие ограничения, которые могут существовать для таблиц или между таблицами.Repair operations do not consider any of the constraints that may exist on or between tables. Если указанная таблица включена в одно или несколько ограничений, рекомендуется выполнить инструкцию DBCC CHECKCONSTRAINTS после операции восстановления.If the specified table is involved in one or more constraints, we recommend running DBCC CHECKCONSTRAINTS after a repair operation. Если необходимо использовать аргументы REPAIR, выполните инструкцию DBCC CHECKDB без параметра восстановления, чтобы узнать требуемый уровень восстановления.If you must use REPAIR, run DBCC CHECKDB without a repair option to find the repair level to use. При использовании уровня REPAIR_ALLOW_DATA_LOSS, рекомендуется создать резервную копию базы данных перед выполнением инструкции DBCC CHECKDB с этим параметром.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_ERRORMSGSALL_ERRORMSGS
Отображает все сообщения об ошибках.Displays all error messages. Все сообщения об ошибках выводятся по умолчанию.All error messages are displayed by default. Указание или пропуск этого параметра не приводит к изменениям.Specifying or omitting this option has no effect.

NO_INFOMSGSNO_INFOMSGS
Подавляет все информационные сообщения и отчет об использованном пространстве.Suppresses all informational messages and the report of space used.

TABLOCKTABLOCK
Настраивает команду DBCC на получение монопольной блокировки базы данных.Causes the DBCC command to obtain an exclusive database lock.

ESTIMATEONLYESTIMATEONLY
Отображает примерное место на диске, занимаемое базой данных tempdb, которое требуется для запуска инструкции DBCC CHECKALLOC, когда указаны все другие аргументы.Displays the estimated amount of tempdb space that is required to run DBCC CHECKALLOC when all the other options are specified.

RemarksRemarks

Инструкция DBCC CHECKALLOC проверяет выделение всех страниц в базе данных, независимо от типа страницы и типа объекта, к которому они принадлежат.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. Если не указан аргумент NO_INFOMSGS, то инструкция DBCC CHECKALLOC собирает сведения об использовании пространства всеми объектами в базе данных.If NO_INFOMSGS is not specified, DBCC CHECKALLOC collects space usage information for all objects in the database. Впоследствии эти сведения отображаются вместе со всеми обнаруженными ошибками.This information is printed together with any errors that are found.

Примечание

Функциональность инструкции DBCC CHECKALLOC включена в инструкции DBCC CHECKDB и DBCC CHECKFILEGROUP.The DBCC CHECKALLOC functionality is included in DBCC CHECKDB and DBCC CHECKFILEGROUP. Это означает, что не нужно запускать DBCC CHECKALLOC отдельно от этих инструкций.This means that you do not have to run DBCC CHECKALLOC separately from these statements. Инструкция DBCC CHECKALLOC не проверяет данные FILESTREAM.DBCC CHECKALLOC does not check FILESTREAM data. FILESTREAM сохраняет в файловой системе большие двоичные объекты.FILESTREAM stores binary large objects (BLOBS) on the file system.

Моментальный снимок внутренней базы данныхInternal Database Snapshot

Инструкция DBCC CHECKALLOC использует внутренний моментальный снимок базы данных, чтобы обеспечить согласованность транзакций, необходимую для проведения этих проверок.DBCC CHECKALLOC uses an internal database snapshot to provide the transactional consistency that it needs to perform these checks. Если нельзя создать моментальный снимок или указан аргумент TABLOCK, то инструкция DBCC CHECKALLOC пытается получить монопольную блокировку (X) базы данных, чтобы обеспечить необходимую согласованность.If a snapshot cannot be created, or TABLOCK is specified, DBCC CHECKALLOC tries to acquire an exclusive (X) lock on the database to obtain the required consistency.

Примечание

Запуск инструкции DBCC CHECKALLOC для базы данных tempdb не приводит к выполнению каких-либо проверок.Running DBCC CHECKALLOC against tempdb does not perform any checks. Это обусловлено тем, что по соображениям, связанным с производительностью, моментальные снимки базы данных недоступны для базы данных tempdb.This is because, for performance reasons, database snapshots are not available on tempdb. Это означает, что нельзя достичь требуемой согласованности транзакций.This means that the required transactional consistency cannot be obtained. Остановите и запустите службу MSSQLSERVER для устранения любых проблем выделения пространства для базы данных tempdb.Stop and start the MSSQLSERVER service to resolve any tempdb allocation issues. Это действие удаляет и повторно создает базу данных tempdb.This action drops and re-creates the tempdb database.

Основные сведения о сообщениях об ошибках DBCCUnderstanding DBCC Error Messages

После завершения команды DBCC CHECKALLOC в журнал ошибок SQL ServerSQL Server будет записано сообщение.After the DBCC CHECKALLOC command finishes, a message is written to the SQL ServerSQL Server error log. При успешном выполнении команды DBCC сообщается об успешном завершении и количестве времени, затраченном на выполнение команды.If the DBCC command successfully executes, the message indicates a successful completion and the amount of time that the command ran. Если выполнение команды DBCC прерывается до завершения проверки по причине ошибки, сообщение указывает на прерывание команды и приводит значение состояния и количество времени, затраченного на выполнение команды.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
00 Возникла ошибка с номером 8930.Error number 8930 was raised. Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC.This indicates a metadata corruption that caused the DBCC command to terminate.
11 Возникла ошибка с номером 8967.Error number 8967 was raised. Внутренняя ошибка DBCC.There was an internal DBCC error.
22 При аварийном восстановлении базы данных произошла ошибка.A failure occurred during emergency mode database repair.
33 Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC.This indicates a metadata corruption that caused the DBCC command to terminate.
44 Обнаружено нарушение доступа или утверждения.An assert or access violation was detected.
55 Возникла неизвестная ошибка, которая привела к прекращению выполнения команды DBCC.An unknown error occurred that terminated the DBCC command.

Отчет об ошибкахError Reporting

При каждом обнаружении командой DBCC CHECKALLOC ошибки повреждения данных в папке LOG SQL ServerSQL Server создается мини-файл дампа (SQLDUMPnnnn.txt).A mini-dump file (SQLDUMPnnnn.txt) is created in the SQL ServerSQL Server LOG directory whenever DBCC CHECKALLOC detects a corruption error. Если для экземпляра SQL ServerSQL Server включены функции сбора данных об использовании компонентов и отчетов об ошибках, этот файл автоматически отправляется в MicrosoftMicrosoft.When the Feature Usage data collection and Error Reporting features are enabled for the instance of SQL ServerSQL Server, the file is automatically forwarded to MicrosoftMicrosoft. Собранные данные используются для улучшения функциональности SQL ServerSQL Server.The collected data is used to improve SQL ServerSQL Server functionality. Файл дампа содержит результаты выполнения команды DBCC CHECKALLOC и дополнительные диагностические сведения.The dump file contains the results of the DBCC CHECKALLOC command and additional diagnostic output. Доступ к этому файлу ограничен списками управления доступом на уровне пользователей.The file has restricted discretionary access-control lists (DACLs). Доступ ограничен учетной записью службы SQL ServerSQL Server и членами роли sysadmin.Access is limited to the SQL ServerSQL Server service account and members of the sysadmin role. По умолчанию роль sysadmin содержит всех членов группы Windows BUILTIN\Administrators и группы локальных администраторов.By default, the sysadmin role contains all members of the Windows BUILTIN\Administrators group and the local administrator's group. В случае ошибки процесса сбора данных команда DBCC не завершается ошибкой.The DBCC command does not fail if the data collection process fails.

Разрешение ошибокResolving Errors

Если инструкция DBCC CHECKALLOC сообщает о каких-нибудь ошибках, рекомендуется восстановить базу данных из резервной копии, а не запускать восстановление.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 does not 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

В следующей таблице описаны данные, возвращаемые инструкцией DBCC CHECKALLOC.The following tables describe the information that DBCC CHECKALLOC returns.

ЭлементItem ОписаниеDescription
FirstIAMFirstIAM Только для внутреннего применения.Internal use only.
RootRoot Только для внутреннего применения.Internal use only.
DpagesDpages Число страниц данных.Data page count.
Pages usedPages used Число выделенных страниц.Allocated pages.
Dedicated extentsDedicated extents Экстенты, выделенные для объекта.Extents allocated to the object.

Если использованы смешанные страницы размещения, то могут существовать страницы, выделенные без экстентов.If mixed allocation pages are used, there might be pages allocated without extents.

Инструкция DBCC CHECKALLOC также формирует сводный отчет о размещении для каждого индекса и секции в каждом файле.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 pagesReserved pages Страницы, выделенные для индекса и неиспользованные страницы в выделенных экстентах.Pages allocated to the index and the unused pages in allocated extents.
Used pagesUsed pages Страницы, выделенные и используемые индексом.Pages allocated and being used by the index.
Partition IDPartition ID Только для внутреннего применения.Internal use only.
Alloc Unit IDAlloc unit ID Только для внутреннего применения.Internal use only.
In-row dataIn-row data Страницы содержат данные индекса или кучи.Pages contain index or heap data.
LOB dataLOB data Страницы содержат данные типа varchar(max) , nvarchar(max) , varbinary(max) , text, ntext, xml и image.Pages contain varchar(max), nvarchar(max), varbinary(max), text, ntext, xml, and image data.
Row-overflow dataRow-overflow data Страницы содержат данные столбцов переменной длины, которые включают внестрочные данные.Pages contain variable-length column data that has been pushed off-row.

Инструкция DBCC CHECKALLOC возвращает следующий результирующий набор (значения могут различаться), за исключением случаев, когда указаны аргументы ESTIMATEONLY или NO_INFOMSGS.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.  

Если указан параметр ESTIMATEONLY, то инструкция DBCC CHECKALLOC возвращает следующий результирующий набор.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

Необходимо быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner.Requires membership in the sysadmin fixed server role or the db_owner fixed database role.

ПримерыExamples

В следующем примере выполняется инструкция DBCC CHECKALLOC для текущей базы данных и для базы данных AdventureWorks2012.The following example executes DBCC CHECKALLOC for the current database and for the AdventureWorks2012 database.

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

См. также:See Also

DBCC (Transact-SQL)DBCC (Transact-SQL)