Инструкция dbcc checkdb завершается со сбоем при обработке базы данных



Скачать 103.75 Kb.
Дата13.12.2017
Размер103.75 Kb.
ТипИнструкция

alter database your_db set emergency
go
alter database your_db set single_user
go
dbcc checkdb ('your_db', REPAIR_ALLOW_DATA_LOSS)
go
alter database your_db set multi_user

Проверяет целостность выделения пространства, структурную и логическую целостность всех объектов в указанной базе данных.


Синтаксис





DBCC CHECKDB [( 'database_name' | database_id | 0 [ , NOINDEX | { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ] )] [ WITH { [ ALL_ERRORMSGS ] [ , [ NO_INFOMSGS ] ] [ , [ TABLOCK ] ] [ , [ ESTIMATEONLY ] ] [ , [ PHYSICAL_ONLY ] ] | [ , [ DATA_PURITY ] ] } ]

Аргументы


'database_name' | database_id | 0

Имя или идентификатор базы данных, для которой необходимо выполнить проверку целостности. Если значение не указано или указано значение 0, используется текущая база данных. Имена баз данных должны соответствовать правилам для идентификаторов.



Примечание.

Инструкция DBCC CHECKDB завершается со сбоем при обработке базы данных master, если не удается создать внутренний моментальный снимок базы данных.

NOINDEX

Указывает, что не следует выполнять тщательную проверку некластеризованных индексов пользовательских таблиц. Это уменьшает общее время выполнения. Аргумент NOINDEX не влияет на обработку системных таблиц, поскольку для индексов системных таблиц всегда выполняются проверки целостности.

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD

Указывает, что инструкция DBCC CHECKDB должна исправить обнаруженные ошибки. Для применения описанных ниже параметров исправления указанная база данных должна находиться в однопользовательском режиме.

REPAIR_ALLOW_ DATA_LOSS

Пытается устранить все обнаруженные ошибки. Эти исправления могут привести к частичной потере данных.

REPAIR_FAST

Поддерживается только в целях обратной совместимости.

REPAIR_REBUILD

Выполняет все исправления ошибок, выполняемые параметром REPAIR_FAST, а также операции восстановления, занимающие длительное время, например перестраивает индексы. Этот вид исправления ошибок не приводит к потере данных при выполнении.



Примечание.

Используйте параметры REPAIR только как последнее средство. Для устранения ошибок рекомендуется восстановление из резервной копии. Операции устранения игнорируют все ограничения, существующие в таблицах или между ними. Если заданная таблица включена в одно или несколько ограничений, рекомендуется выполнить инструкцию DBCC CHECKCONSTRAINTS после операции устранения ошибок. Если необходимо использовать параметр REPAIR, выполните инструкцию DBCC CHECKDB, чтобы узнать требуемый уровень устранения ошибок. При необходимости применения уровня исправления ошибок REPAIR_ALLOW_DATA_LOSS перед выполнением инструкции DBCC CHECKDB рекомендуется создать резервную копию базы данных.

WITH

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

ALL_ERRORMSGS

Отображает неограниченное число ошибок для каждого объекта. Если аргумент ALL_ERRORMSGS не указан, то будут отображаться лишь первые 200 сообщений об ошибках для каждого объекта. Сообщения об ошибках, кроме сообщений, создаваемых базой данных tempdb, сортируются по идентификатору объекта.

NO_INFOMSGS

Подавляет все информационные сообщения.

TABLOCK

Указание значения аргумента приводит к получению инструкцией DBCC CHECKDB блокировок вместо использования внутреннего моментального снимка базы данных. Это включает краткосрочное использование монопольной блокировки на всю базу данных. Аргумент TABLOCK позволит инструкции DBCC CHECKDB быстрее выполняться на базе данных, находящейся под интенсивной нагрузкой, однако уменьшит возможности одновременной работы пользователей с базой данных во время выполнения инструкции DBCC CHECKDB.

ESTIMATEONLY

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

PHYSICAL_ONLY

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



  • Выполняются более полные и исчерпывающие логические проверки.

  • Некоторые базовые структуры, подлежащие проверке, более сложные, чем в предыдущих версиях.

  • Многие новые проверки добавлены для поддержки новых возможностей SQL Server 2005.

Таким образом, применение параметра PHYSICAL_ONLY может значительно сократить время выполнения инструкции DBCC CHECKDB для больших баз данных, поэтому рекомендуется использовать его для частых проверок баз данных на производственных системах. Рекомендуется также регулярно выполнять полную проверку инструкции DBCC CHECKDB. Периодичность запуска зависит от факторов, индивидуальных для каждого предприятия и каждой производственной среды. Параметр PHYSICAL_ONLY всегда неявно включает параметр NO_INFOMSGS и не должен указываться вместе с параметрами исправления ошибок.

DATA_PURITY

Указание значения аргумента приводит к выполнению инструкцией DBCC CHECKDB проверки таблицы на недействительность или выход из допустимого диапазона значений столбцов. Например инструкция DBCC CHECKDB будет обнаруживать столбцы со значениями даты и времени, выходящими из допустимого диапазона значений типа данных datetime; столбцы десятичных или приблизительных числовых типов данных с неверными значениями масштаба или точности.

Для баз данных, созданных в SQL Server 2005, проверка значений данных в столбцах на целостность включена по умолчанию и не требует указания параметра DATA_PURITY. Для баз данных, обновленных с предыдущих версий SQL Server, проверка значений данных в столбцах по умолчанию не будет включена, пока на базе данных не будет выполнена без ошибок инструкция DBCC CHECKDB с параметром DATA_PURITY. После этого инструкция DBCC CHECKDB проверяет целостность данных в столбцах по умолчанию. Дополнительные сведения о том, как на выполнение инструкции CHECKDB влияет использование баз данных, обновленных с предыдущих версий SQL Server см. в разделе "Примечания".

Если указан аргумент PHYSICAL_ONLY, проверка целостности значений в столбцах не выполняется.

Замечания


В предыдущих версиях SQL Server, счетчики строк и страниц по таблицам и по индексам могли принимать неверные значения. В некоторых обстоятельствах одно или несколько значений могли даже становиться отрицательными. Инструкция DBCC CHECKDB не обнаруживает эту проблему. Это не является повреждением каких-либо данных, хранимых в базе данных, а ситуация обычно разрешается выполнением инструкции DBCC UPDATEUSAGE.

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



Примечание.

Эта проблема не встречается в базах данных, созданных в SQL Server 2005.

Инструкция DBCC CHECKDB не анализирует отключенные индексы. Дополнительные сведения об отключенных индексах см. в разделе Отключение индексов.

Полезная сводка внутренних операций, выполняемых инструкцией DBCC CHECKDB.



  • Выполнение инструкции DBCC CHECKALLOC для базы данных.

  • Выполнение инструкции DBCC CHECKTABLE для каждой таблицы и каждого представления в базе данных.

  • Проверка данных компонента Service Broker в базе данных.

  • Выполнение инструкции DBCC CHECKCATALOG для базы данных.

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

Из этого следует, что не требуется дополнительно вызывать инструкции DBCC CHECKALLOC, DBCC CHECKTABLE и DBCC CHECKCATALOG при использовании инструкции DBCC CHECKDB. Обратитесь к описаниям перечисленных инструкций для получения дополнительных сведений о том, как выполняются проверки.

Поскольку база данных Resource доступна только в однопользовательском режиме, выполнить инструкцию DBCC CHECKDB непосредственно для нее невозможно. Однако при выполнении инструкции DBCC CHECKDB для базы данных master происходит автоматический повторный запуск инструкций CHECKDB для базы данных Resource. Поэтому инструкция DBCC CHECKDB может вернуть дополнительные результаты. Инструкция возвращает дополнительные результирующие наборы, когда не установлены параметры или когда установлены параметры PHYSICAL ONLY или ESTIMATE ONLY. Дополнительные сведения о базе данных Resource см. в разделе База данных Resource.

Инструкция DBCC CHECKDB использует внутренний моментальный снимок базы данных для обеспечения транзакционной согласованности, требуемой для выполнения проверок. Дополнительные сведения см. в разделе Основные сведения о размере разреженных файлов и в разделе "Использование внутренних моментальных снимков базы данных инструкцией DBCC" в DBCC (Transact-SQL). При невозможности создать моментальный снимок или при указании аргумента TABLOCK инструкция DBCC CHECKDB получает блокировки для обеспечения требуемой согласованности данных. В этом случае необходима монопольная блокировка базы данных для выполнения проверок выделения пространства, а для проверки таблиц требуются совместные блокировки таблиц.


Примечание.

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

Если инструкция DBCC CHECKDB сообщает об ошибках, вместо выполнения REPAIR с каким-либо из параметров REPAIR рекомендуется восстановить базу данных из резервной копии. Если резервной копии базы данных не существует, выполнение параметра REPAIR приведет к исправлению обнаруженных ошибок. Параметр REPAIR, который нужно использовать, указывается в конце списка ошибок. Однако исправление ошибок с использованием параметра REPAIR_ALLOW_DATA_LOSS может потребовать удаления некоторых страниц и содержащихся в них данных.

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

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

По умолчанию инструкция DBCC CHECKDB выполняет параллельную проверку объектов. Уровень параллелизма автоматически определяется обработчиком запросов. Максимальная степень параллелизма настраивается так же, как и для параллельных запросов. Для указания максимального числа процессоров, применяемых при выполнении проверок инструкцией DBCC, используйте хранимую процедуру sp_configure. Дополнительные сведения см. в разделе Параметр max degree of parallelism.

Параллельная проверка может быть отключена с помощью флага трассировки 2528. Дополнительные сведения см. в разделе Флаги трассировки (Transact-SQL).

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


Инструкция DBCC CHECKDB возвращает следующий результирующий набор. Значения могут различаться, кроме случаев, когда указаны параметры ESTIMATEONLY, PHYSICAL_ONLY или NO_INFOMSGS:




Копировать код

DBCC results for 'model'.

Service Broker Msg 9675, Level 10, State 1: Message Types analyzed: 13.

Service Broker Msg 9676, Level 10, State 1: Service Contracts analyzed: 5.

Service Broker Msg 9667, Level 10, State 1: Services analyzed: 3.

Service Broker Msg 9668, Level 10, State 1: Service Queues analyzed: 3.

Service Broker Msg 9669, Level 10, State 1: Conversation Endpoints analyzed: 0.

Service Broker Msg 9674, Level 10, State 1: Conversation Groups analyzed: 0.

Service Broker Msg 9670, Level 10, State 1: Remote Service Bindings analyzed: 0.

DBCC results for 'sys.sysrowsetcolumns'.

There are 630 rows in 7 pages for object 'sys.sysrowsetcolumns'.

DBCC results for 'sys.sysrowsets'.

There are 97 rows in 1 pages for object 'sys.sysrowsets'.

DBCC results for 'sysallocunits'.

There are 195 rows in 3 pages for object 'sysallocunits'.

There are 0 rows in 0 pages for object "sys.sysasymkeys".

DBCC results for 'sys.syssqlguides'.

There are 0 rows in 0 pages for object "sys.syssqlguides".

DBCC results for 'sys.queue_messages_1977058079'.

There are 0 rows in 0 pages for object "sys.queue_messages_1977058079".

DBCC results for 'sys.queue_messages_2009058193'.

There are 0 rows in 0 pages for object "sys.queue_messages_2009058193".

DBCC results for 'sys.queue_messages_2041058307'.

There are 0 rows in 0 pages for object "sys.queue_messages_2041058307".

CHECKDB found 0 allocation errors and 0 consistency errors in database 'model'.

DBCC execution completed. If DBCC printed error messages, contact your system administrator.


Инструкция DBCC CHECKDB возвращает следующий результирующий набор (сообщение) при указании атрибута NO_INFOMSGS:




Копировать код

The command(s) completed successfully.

Инструкция DBCC CHECKDB возвращает следующий результирующий набор при указании атрибута PHYSICAL_ONLY:




Копировать код

DBCC results for 'model'.

CHECKDB found 0 allocation errors and 0 consistency errors in database 'master'.

DBCC execution completed. If DBCC printed error messages, contact your system administrator.


Инструкция DBCC CHECKDB возвращает следующий результирующий набор при указании атрибута ESTIMATEONLY:




Копировать код

Estimated TEMPDB space needed for CHECKALLOC (KB)

-------------------------------------------------

13
(1 row(s) affected)
Estimated TEMPDB space needed for CHECKTABLES (KB)

--------------------------------------------------

57
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Разрешения


Требуется членство в фиксированной серверной роли sysadmin или в фиксированной роли базы данных db_owner.

Примеры

А. Проверка текущей базы данных и базы данных AdventureWorks


Следующий пример выполняет инструкцию DBCC CHECKDB для текущей базы данных и для базы данных AdventureWorks.




Копировать код

-- Check the current database.

DBCC CHECKDB;

GO

-- Check the AdventureWorks database without nonclustered indexes.



DBCC CHECKDB ('AdventureWorks', NOINDEX);

GO

Б. Проверка текущей базы данных с подавлением информационных сообщений


Следующий пример проверяет текущую базу данных и подавляет все информационные сообщения.




Копировать код

DBCC CHECKDB WITH NO_INFOMSGS;

GO










Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©vossta.ru 2019
обратиться к администрации

    Главная страница