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


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

См. также