DBCC CHECKALLOC (Transact-SQL)
Применимо к:База данныхSQL Server Azure SQL Управляемый экземпляр SQL Azure
Проверяет согласованность структур выделения места на диске для указанной базы данных.
Соглашения о синтаксисе 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 ]
}
]
]
Примечание
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
database_name | database_id | 0
Имя или идентификатор базы данных, для которой выполняется проверка выделения и использования страниц.
Если значение не указано или указано значение 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
Отображает предполагаемый объем пространства, необходимого
tempdb
для выполненияDBCC CHECKALLOC
при указании всех остальных параметров.
Комментарии
DBCC CHECKALLOC
проверяет выделение всех страниц в базе данных независимо от типа страницы или типа объекта, к которому они принадлежат. Также проверяются различные внутренние структуры, используемые для отслеживания этих страниц и связей между ними.
Если NO_INFOMSGS
параметр не указан, DBCC CHECKALLOC
собирает сведения об использовании пространства для всех объектов в базе данных. Впоследствии эти сведения отображаются вместе со всеми обнаруженными ошибками.
Примечание
Эти DBCC CHECKALLOC
функции включены в DBCC CHECKDB и DBCC CHECKFILEGROUP. Это означает, что вам не нужно выполнять DBCC CHECKALLOC
отдельно от этих инструкций. DBCC CHECKALLOC
не проверка данные FILESTREAM. FILESTREAM сохраняет в файловой системе большие двоичные объекты.
Внутренняя snapshot базы данных
DBCC CHECKALLOC
использует внутреннюю snapshot базы данных для обеспечения согласованности транзакций, необходимой для выполнения этих проверок. Если snapshot не удается создать или TABLOCK
указать, DBCC CHECKALLOC
пытается получить монопольную блокировку (X
) для базы данных, чтобы получить необходимую согласованность.
Примечание
При выполнении DBCC CHECKALLOC
для tempdb
не выполняется никаких проверок. Это связано с тем, что из соображений производительности моментальные снимки базы данных недоступны в tempdb
. Это означает, что нельзя достичь требуемой согласованности транзакций. Остановите и запустите ядро СУБД, чтобы устранить проблемы tempdb
с выделением. Это действие удаляет и повторно создает tempdb
базу данных.
Общие сведения о сообщениях об ошибках DBCC
DBCC CHECKALLOC
После завершения выполнения команды в журнал ошибок SQL Server записывается сообщение. Если команда DBCC успешно выполняется, сообщение указывает на успешное завершение и время выполнения команды. Если выполнение команды DBCC прерывается до завершения проверки по причине ошибки, сообщение указывает на прерывание команды и приводит значение состояния и количество времени, затраченного на выполнение команды. В следующей таблице перечислены и описаны значения состояний, которые могут быть включены в сообщение.
Состояние | Описание |
---|---|
0 | Возникла ошибка с номером 8930. Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC. |
1 | Возникла ошибка с номером 8967. Внутренняя ошибка DBCC. |
2 | При аварийном восстановлении базы данных произошла ошибка. |
3 | Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC. |
4 | Обнаружено нарушение доступа или утверждения. |
5 | Возникла неизвестная ошибка, которая привела к прекращению выполнения команды DBCC. |
Отчеты об ошибках
Файл мини-дампа (SQLDUMP<nnnn>.txt
) создается в каталоге SQL Server LOG
при каждом DBCC CHECKALLOC
обнаружении ошибки повреждения. Если для экземпляра SQL Server включены функции сбора данных об использовании компонентов и отчетов об ошибках, этот файл автоматически отправляется в Microsoft. Собранные данные используются для улучшения функциональности SQL Server.
Файл дампа содержит результаты команды и дополнительные выходные DBCC CHECKALLOC
данные диагностики. Доступ к этому файлу ограничен списками управления доступом на уровне пользователей. Доступ ограничен учетной записью службы SQL Server и членами роли sysadmin. По умолчанию роль sysadmin содержит всех участников группы Windows BUILTIN\Administrators и группы локальных администраторов. Команда DBCC не завершается ошибкой, если процесс сбора данных завершается сбоем.
Устранение ошибок
Если DBCC CHECKALLOC
возникают ошибки, рекомендуется восстановить базу данных из резервной копии базы данных, а не выполнять восстановление. Если резервная копия не существует, выполнение исправления может исправить обнаруженные ошибки. Однако для исправления ошибок может потребоваться удалить некоторые страницы и, следовательно, данные.
Устранение ошибок может быть выполнено в ходе пользовательской транзакции. Это позволяет откатить изменения. При откате изменений база данных по-прежнему будет содержать ошибки и должна быть восстановлена из резервной копии. После того как исправление ошибок будет завершено, следует создать резервную копию базы данных.
Наборы результатов
В следующих таблицах описываются возвращаемые DBCC CHECKALLOC
сведения.
Элемент | Описание |
---|---|
FirstIAM | Только для внутреннего использования. |
Root | Только для внутреннего использования. |
Dpages | Число страниц данных. |
Pages used | Число выделенных страниц. |
Dedicated extents | Экстенты, выделенные для объекта. Если использованы смешанные страницы размещения, то могут существовать страницы, выделенные без экстентов. |
DBCC CHECKALLOC
также сообщает сводку о выделении для каждого индекса и секции в каждом файле. В этой сводке описано распределение данных.
Элемент | Описание |
---|---|
Reserved pages | Страницы, выделенные для индекса и неиспользованные страницы в выделенных экстентах. |
Used pages | Страницы, выделенные и используемые индексом. |
Partition ID | Только для внутреннего применения. |
Alloc Unit ID | Только для внутреннего применения. |
In-row data | Страницы содержат данные индекса или кучи. |
LOB data | Страницы содержат данные типа varchar(max), nvarchar(max), varbinary(max), text, ntext, xml и image. |
Row-overflow data | Страницы содержат данные столбцов переменной длины, которые включают внестрочные данные. |
DBCC CHECKALLOC
возвращает следующий результирующий набор (значения могут отличаться), за исключением случаев, когда ESTIMATEONLY
задано значение или NO_INFOMSGS
.
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