DBCC CHECKALLOC (Transact-SQL)

Проверяет согласованность структур выделения места на диске для указанной базы данных.

Значок ссылки на разделСоглашение о синтаксисе в 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 с этим параметром.

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

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

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

ПримечаниеПримечание

В SQL Server 2005 и более поздних версиях запуск инструкции DBCC CHECKALLOC для базы данных tempdb не приводит к выполнению никаких проверок. Это обусловлено тем, что по соображениям производительности моментальные снимки базы данных недоступны для базы данных tempdb. Это означает, что нельзя достичь требуемой согласованности транзакций. Остановите и запустите службу MSSQLSERVER для устранения любых проблем выделения пространства для базы данных tempdb. Это действие удаляет и повторно создает базу данных tempdb.

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

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

Состояние

Описание

0

Возникла ошибка с номером 8930. Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC.

1

Возникла ошибка с номером 8967. Внутренняя ошибка DBCC.

2

При аварийном восстановлении базы данных произошла ошибка.

3

Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC.

4

Обнаружено нарушение доступа или утверждения.

5

Возникла неизвестная ошибка, которая привела к прекращению выполнения команды DBCC.

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

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

Файл дампа содержит результаты выполнения команды DBCC CHECKALLOC и дополнительные диагностические сведения. Доступ к этому файлу ограничен списками управления доступом на уровне пользователей. Доступ ограничен учетной записью службы SQL Server и членами роли sysadmin. По умолчанию роль sysadmin содержит всех членов группы Windows BUILTIN\Администраторы и группы локальных администраторов. В случае ошибки процесса сбора данных команда 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 для текущей базы данных и для базы данных База данных AdventureWorks2008R2.

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