Поделиться через


DBCC CHECKALLOC (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр 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 ]
        }
    ]
]

Аргументы

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 этого параметра.

ВМЕСТЕ С

Позволяет задавать параметры.

  • 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 сохраняет в файловой системе большие двоичные объекты.

Внутренний моментальный снимок базы данных

DBCC CHECKALLOC использует внутренний моментальный снимок базы данных для обеспечения согласованности транзакций, которую требуется выполнить эти проверки. Если моментальный снимок не может быть создан или TABLOCK указан, DBCC CHECKALLOC пытается получить монопольнуюX () блокировку базы данных, чтобы получить необходимую согласованность.

Примечание.

Выполнение DBCC CHECKALLOC не tempdb выполняет никаких проверок. Это связано с тем, что по соображениям производительности моментальные снимки базы данных недоступны tempdb. Это означает, что нельзя достичь требуемой согласованности транзакций. Остановите и запустите ядро СУБД для устранения проблем tempdb с выделением. Это действие удаляет и повторно создает tempdb базу данных.

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

DBCC CHECKALLOC После завершения команды сообщение записывается в журнал ошибок SQL Server. Если команда DBCC успешно выполняется, сообщение указывает на успешное завершение и время выполнения команды. Если выполнение команды DBCC прерывается до завершения проверки по причине ошибки, сообщение указывает на прерывание команды и приводит значение состояния и количество времени, затраченного на выполнение команды. В следующей таблице перечислены и описаны значения состояний, которые могут быть включены в сообщение.

State Описание:
0 Возникла ошибка с номером 8930. Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC.
1 Возникла ошибка с номером 8967. Внутренняя ошибка DBCC.
2 При аварийном восстановлении базы данных произошла ошибка.
3 Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC.
4 Обнаружено нарушение доступа или утверждения.
5 Возникла неизвестная ошибка, которая привела к прекращению выполнения команды DBCC.

Отчеты об ошибках

Файл мини-дампа (SQLDUMP<nnnn>.txt) создается в каталоге SQL Server LOG при обнаружении DBCC CHECKALLOC ошибки повреждения. Если для экземпляра SQL Server включены сбор данных об использовании компонентов и функции отчетов об ошибках, файл автоматически перенаправляются в корпорацию Майкрософт. Собранные данные используются для улучшения функциональности SQL Server.

Файл дампа содержит результаты DBCC CHECKALLOC команды и дополнительные диагностические выходные данные. Доступ к этому файлу ограничен списками управления доступом на уровне пользователей. Доступ ограничен учетной записью службы SQL Server и членами роли sysadmin. По умолчанию роль sysadmin содержит всех членов группы Windows BUILTIN\Administrators и группы локальных администраторов. Команда DBCC не завершается ошибкой, если процесс сбора данных завершается сбоем.

Устранение ошибок

Если DBCC CHECKALLOC сообщает об ошибках, рекомендуется восстановить базу данных из резервной копии базы данных, а не выполнить восстановление. Если резервная копия не существует, выполнение восстановления может исправить обнаруженные ошибки; однако исправление ошибок может потребовать удаления некоторых страниц и, следовательно, данных.

Устранение ошибок может быть выполнено в ходе пользовательской транзакции. Это позволяет откатить изменения. Если изменения откатываются, база данных по-прежнему будет содержать ошибки и должна быть восстановлена из резервной копии. После того как исправление ошибок будет завершено, следует создать резервную копию базы данных.

Результирующие наборы

В следующих таблицах описываются возвращаемые DBCC CHECKALLOC сведения.

Позиция Description
FirstIAM Только для внутреннего применения.
Root Только для внутреннего применения.
Dpages Число страниц данных.
Используемые страницы Число выделенных страниц.
Выделенные экстенты Экстенты, выделенные для объекта.

Если использованы смешанные страницы размещения, то могут существовать страницы, выделенные без экстентов.

DBCC CHECKALLOC также сообщает сводку по выделению для каждого индекса и секции в каждом файле. В этой сводке описано распределение данных.

Позиция Description
Reserved pages Страницы, выделенные для индекса и неиспользованные страницы в выделенных экстентах.
Used pages Страницы, выделенные и используемые индексом.
ИД раздела Только для внутреннего применения.
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

См. также