Поделись сейчас:
Содержание скрывать
10. Вопросы и ответы

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

1. Важность SQL Server Здоровье базы данных

1.1 Что такое повреждение базы данных Costs Бизнес

Сегодня, мost Предприятия хранят свои критически важные данные в базах данных. Когда происходит повреждение базы данных, последствия катастрофичны:

  • Финансовые потери В среднем 2.3 млн долларов США ежегодно из-за потери данных, основными причинами которой являются сбои оборудования и повреждение данных (корпорация EMC)
  • Показатели закрытия предприятий показывают, что 50% малых предприятий, столкнувшихся с потерей данных из-за сбоев оборудования, прекращают свою деятельность в течение двух лет, в то время как 94% предприятий с катастрофической потерей данных вообще не выживают
  • Частота повреждения данных Ежегодно затрагивает 20% критически важных приложений, вызывая сбои в работе бизнеса (исследование Gartner)
  • Повреждения, связанные с оборудованием На их долю приходится 67% всех случаев потери данных из-за сбоев жесткого диска и системных сбоев, причем 40% потерь данных напрямую связаны с неисправностями оборудования.
  • Повреждение программного обеспечения costs Убытки составляют от тысяч до миллионов долларов в зависимости от серьезности и масштаба, при этом 82% предприятий сталкиваются с незапланированными простоями, основной причиной которых является коррупция.

1.2 Почему регулярные проверки здоровья имеют решающее значение

Людям нужны регулярные проверки здоровья, чтобы обнаружить потенциальные заболевания на ранней стадии. Аналогично, базы данных также нуждаются в регулярных проверках здоровья:

  1. Выявляйте потенциальные факты коррупции на ранней стадии и оперативно их устраняйте, не допуская, чтобы проблемы стали серьезными и широко распространенными, что может привести к катастрофическим последствиям для бизнеса.
  2. Обеспечьте оптимальную производительность базы данных.
  3. Сost Процент проактивных проверок работоспособности базы данных намного ниже, чем процент реактивного восстановления данных после сбоя базы данных.

1.3 Введение в команды обеспечения целостности базы данных

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

2. Что такое DBCCCHECKDB

DBCC CHECKDB is SQL ServerОсновной инструмент для проверки целостности базы данных и выявления проблем с повреждением.

  • Это оператор T-SQL, а не инструмент с графическим интерфейсом.
  • Вы можете выполнить его с помощью обычных методов, таких как SQL Server Студия управления (SSMS), SQL Server Агент, SQLCMD и т.д.

2.1 Что на самом деле проверяет CHECKDB в вашей базе данных

При запуске DBCC CHECKDB команда выполняет несколько уровней проверки в структуре вашей базы данных:

  • Проверка контрольных сумм страниц для обнаружения физических повреждений и проблем, связанных с оборудованием
  • Проверка согласованности индекса для обеспечения надлежащего извлечения данных и производительности запросов
  • Проверки структуры распределения для подтверждения точного использования пространства и распределения страниц
  • Проверка ссылочной целостности между связанными таблицами и внешними ключевыми связями
  • Проверка согласованности системной таблицы для обеспечения SQL Serverвнутренние метаданные остаются надежными
  • Проверка связи со страницей данных для подтверждения правильной целостности цепочки страниц
  • Согласованность схемы базы данных для проверки определений объектов и зависимостей

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

3. Запуск DBCC CHECKDB: пошаговое руководство

Предпосылки 3.1

Ниже приведен контрольный список перед выполнением любой операции DBCC CHECKDB:

  • Полное резервное копирование базы данных – Создайте полную резервную копию перед запуском проверки целостности в качестве подстраховки на случай обнаружения повреждений или необходимости проведения операций по восстановлению.
  • Соответствующие разрешения – Для выполнения команд DBCC CHECKDB вам потребуются права sysadmin или db_owner.
  • Достаточные системные ресурсы:
    • Память: 25% от размера базы данных
    • Место в tempdb: 10-15% от размера базы данных
    • ЦП: 50–70% доступности во время обслуживания
    • Ввод-вывод: ожидаются интенсивные операции чтения
  • Доступность базы данных – Убедитесь, что ваша база данных доступна и не находится в ограниченном состоянии, так как CHECKDB требует доступа на чтение ко всем страницам базы данных.

3.2 Основная команда

Мost Базовая команда DBCC CHECKDB включает три распространенных варианта:

(1) Проверить текущую базу данных (без параметров):

DBCC CHECKDB

(2) Проверить базу данных по имени:

DBCC CHECKDB ('YourDatabaseName')

(3) Проверить базу данных по идентификатору:

DBCC CHECKDB(5)  -- Replace 5 with your database ID

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

Ниже представлен снимок экрана запуска DBCC CHECKDB в SQL Server Студия управления (SSMS):

Скриншот запуска DBCC CHECKDB в SQL Server Management Studio (SSMS), включая выходные результаты.

3.3 Полные опции

Ниже приведены полные параметры для DBCC CHECKDB:

Категория Опция Описание Пример DBCC CHECKDB
Варианты ремонта REPAIR_REBUILD Ремонт без потери данных (например, перестроение индекса) DBCC CHECKDB ('MyDB', REPAIR_REBUILD)
REPAIR_FAST Ремонт невозможен. Только обратная совместимость. DBCC CHECKDB ('MyDB', REPAIR_FAST)
REPAIR_ALLOW_DATA_LOSS Исправление всех ошибок (может привести к потере данных) DBCC CHECKDB ('CorruptDB', REPAIR_ALLOW_DATA_LOSS)
Контроль объема NOINDEX Пропускает проверки некластеризованного индекса DBCC CHECKDB ('LargeDB', NOINDEX)
PHYSICAL_ONLY Проверяет только физическую целостность хранилища (страницы/записи) DBCC CHECKDB ('ProdDB', PHYSICAL_ONLY)
DATA_PURITY Проверяет наличие логических ошибок в значениях столбцов (например, недопустимые даты) DBCC CHECKDB ('OldDB', DATA_PURITY)
EXTENDED_LOGICAL_CHECKS Глубокие логические проверки (индексированные представления, XML/пространственные индексы) DBCC CHECKDB ('ComplexDB', EXTENDED_LOGICAL_CHECKS)
Выходной контроль ALL_ERRORMSGS Показывает все ошибки (по умолчанию: 200 на объект) DBCC CHECKDB ('MyDB', ALL_ERRORMSGS)
NO_INFOMSGS Скрывает информационные сообщения DBCC CHECKDB ('MyDB', NO_INFOMSGS)
Эффективности TABLOCK Использует блокировки таблиц (уменьшает использование TempDB, но блокирует запись) DBCC CHECKDB ('BigDB', TABLOCK)
MAXDOP = number Переопределяет настройки параллелизма DBCC CHECKDB ('MyDB', MAXDOP = 2)
утилита ESTIMATEONLY Оценивает необходимое пространство TempDB. (фактическая проверка не производится) DBCC CHECKDB ('MyDB', ESTIMATEONLY)

4. Понимание ваших результатов

DBCC CHECKDB выдаст разные результаты в зависимости от того, завершится ли его выполнение успешно или нет. Давайте объясним их подробно.

4.1 Выполнение CHECKDB завершено успешно

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

4.1.1 Проблем не обнаружено

Если DBCC CHECKDB не обнаружит никаких проблем, вы увидите вывод, похожий на:

CHECKDB found 0 allocation errors and 0 consistency errors in database 'YourDatabase'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

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

4.1.2 Найденные ошибки повреждения

Всякий раз, когда DBCC CHECKDB обнаруживает ошибку повреждения, он выдает сообщение об ошибке со следующей структурой:
Подробное объяснение структуры сообщения об ошибке DBCC CHECKDB, включая значение каждой части.Руководство по уровню серьезности:

  • Уровень 16-19: Ошибки, которые можно исправить пользователем, часто незначительные повреждения
  • Уровень 20-24: Системные ошибки, серьезные повреждения, требующие немедленного внимания
  • Уровень 25: Фатальные ошибки, база данных может быть недоступна

К частым ошибкам относятся:

  • Ошибки контрольной суммы страницы (сообщение 824)
  • Ошибки распределения (сообщение 8928)
  • Проблемы с согласованностью индекса (сообщение 8964)

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

4.1.3 Общие информационные и предупреждающие сообщения

Не все выходные данные DBCC CHECKDB указывают на серьезные проблемы. Он также может выводить некоторые информационные и предупреждающие сообщения, включая:

  • Ремонтные отчеты – Сообщения, предлагающие команды для исправления незначительных проблем
  • Предупреждения о распределении – Предупреждения о распределении пространства, не влияющие на доступ к данным
  • Рекомендации по производительности – Предложения по обслуживанию и оптимизации индекса
  • Информационные уведомления – Общие сообщения о состоянии, не требующие немедленных действий

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

Пример предупреждающего сообщения:

DBCC results for 'InventoryDatabase'.
Msg 2570, Level 16, State 3, Line 1
Page (2:8452), slot 17 in object ID 485577333, index ID 0, partition ID 72057594038845456, 
alloc unit ID 72057594042515968 (type "In-row data").
Column "ProductPrice" value is out of range for data type "decimal". Update column to a legal value.
There are 45892 rows in 1247 pages for object "Products".
CHECKDB found 0 allocation errors and 1 consistency errors in table 'Products' (object ID 485577333).
CHECKDB found 0 allocation errors and 1 consistency errors in database 'InventoryDatabase'.

4.2 Прерывание выполнения CHECKDB

Если по каким-либо причинам во время выполнения CHECKDB произойдет сбой, будет выдано сообщение об ошибке и добавлен журнал ошибок с кодом состояния ниже:

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

Пример сообщения об ошибке:

Failed:(-1073548784) Executing the query "DBCC CHECKDB('InventoryDB') WITH NO_INFOMSGS" failed with the following error: "There is insufficient system memory to run this query.Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

или

2024-11-18 09:52:41.38 spid35 I/O error (bad page ID) detected during read at offset 0x00000024886000 in file 'C:\Data\MSSQL\DATA\SalesDatabase.mdf'.

Пример журнала ошибок:

11/15/2024 09:23:17,spid52,Unknown,DBCC CHECKDB (SalesDatabase) WITH all_errormsgs no_infomsgs executed by CORP\dbadmin terminated abnormally due to error state 3. Elapsed time: 1 hours 32 minutes 18 seconds.

В таком случае вы можете попробовать альтернативные расширенные варианты, такие как DataNumen SQL Recovery для исправления повреждений в вашей базе данных.

5. Исправление ошибок, связанных с коррупцией

5.1 Резервное копирование и восстановление: самое безопасное решение

Когда DBCC CHECKDB обнаруживает ошибки повреждения, восстановление из чистой резервной копии является наиболее безопасным иost надежное решение. Этот подход гарантирует целостность данных, устраняя при этом основные причины повреждения. Перед восстановлением проверьте целостность резервной копии с помощью ВОССТАНОВИТЬ ТОЛЬКО ПРОВЕРИТЬ команды и рассмотрите варианты восстановления на определенный момент времени, чтобы минимизировать потерю данных. Документируйте детали повреждения для анализа первопричины, поскольку проблемы с оборудованием или программные ошибки могут потребовать дополнительного внимания для предотвращения повторения.

5.2 Решения по устранению повреждений на уровне страниц

Для изолированного повреждения страницы, затрагивающего небольшие фрагменты данных, SQL Server Enterprise Edition предлагает возможности восстановления страниц, которые восстанавливают определенные поврежденные страницы без полного восстановления базы данных. Эта передовая техника требует полной модели восстановления и текущих резервных копий журналов.

Пошаговый процесс восстановления страницы:

  1. Определите поврежденную страницу из сообщения об ошибке CHECKDB (например, страница 1:256)
  2. Сделайте текущую резервную копию журнала. для захвата последних транзакций:
BACKUP LOG YourDatabase TO DISK = 'C:\Backups\YourDB_Log.trn'
  1. Восстановить поврежденную страницу от мost недавнее полное резервное копирование:
RESTORE DATABASE YourDatabase PAGE = '1:256' 
FROM DISK = 'C:\Backups\YourDB_Full.bak'
  1. Применить дифференциальное резервное копирование (если доступно):
RESTORE DATABASE YourDatabase PAGE = '1:256' 
FROM DISK = 'C:\Backups\YourDB_Diff.bak'
  1. Применить все резервные копии журналов по порядку, включая только что созданный:
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log1.trn'
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log2.trn'
-- Continue for all log backups in order
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log.trn'
  1. Сделайте последнюю резервную копию журнала и восстановите ее. чтобы сделать страницу актуальной:
BACKUP LOG YourDatabase TO DISK = 'C:\Backups\YourDB_Final.trn'
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Final.trn'

Альтернатива для некритических данных: Если повреждение затрагивает некритические данные, вы можете экспортировать неповрежденные строки в новые таблицы перед восстановлением поврежденных структур:

-- Export good data to a new table
SELECT * INTO YourTable_Backup 
FROM YourTable 
WHERE NOT EXISTS (SELECT 1 FROM corrupt_page_list WHERE page_id = target_page)

-- Drop and recreate the corrupted table
DROP TABLE YourTable
-- Recreate table structure and reload clean data

5.3 Быстрые исправления повреждения индекса

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

ALTER INDEX ALL ON YourTable REBUILD

Этот подход особенно эффективен при повреждении некластеризованного индекса, поскольку при перестройке страницы индекса восстанавливаются из данных исходной таблицы, что эффективно устраняет повреждения и сохраняет всю исходную информацию.

6. Используйте REPAIR_REBUILD и REPAIR_ALLOW_DATA_LOSS

Если предыдущие методы не дали результата или невозможны, можно использовать параметры REPAIR_REBUILD и REPAIR_ALLOW_DATA_LOSS для восстановления базы данных.

6.1 REPAIR_REBUILD (более безопасный вариант):

  • Использовать для: Повреждение индекса и незначительные ошибки распределения
  • Безопасность данных: Попытки исправления повреждений без удаления данных
  • Уровень риска: Низкий – потери данных не ожидается
  • Типичные сценарии: Повреждение некластеризованного индекса, незначительные проблемы с метаданными
  • Пример команды: DBCC CHECKDB('YourDB', REPAIR_REBUILD)

6.2 REPAIR_ALLOW_DATA_LOSS (последнее средство):

  • Использовать для: Серьезные повреждения при отсутствии резервных копий
  • Безопасность данных: Может удалять поврежденные данные для восстановления функциональности базы данных.
  • Уровень риска: Высокая – возможна безвозвратная потеря данных
  • Типичные сценарии: Повреждение страницы, повреждение системной таблицы, ошибки цепочки распределения
  • Пример команды: DBCC CHECKDB('YourDB', REPAIR_ALLOW_DATA_LOSS)

6.3 Лучшие практики для этих вариантов:

  • Всегда проверяй по возможности восстанавливайте копии баз данных
  • Всегда делайте резервную копию перед запуском этих опций
  • Документируйте все изменения для целей соответствия и устранения неполадок
  • Установить базу данных в однопользовательский режим перед выполнением ремонтных работ

Обычно мы должны попытаться РЕМОНТ_ПЕРЕЗАГРУЗКА вариант первый. Если не получается, то попробуйте REPAIR_ALLOW_DATA_LOSS опцию.

6.4 Результаты REPAIR_ALLOW_DATA_LOSS

6.4.1 Успешное восстановление с потерей данных

Иногда REPAIR_ALLOW_DATA_LOSS вариант будет успешным, но некоторые данные lost после ремонта.

Ниже приведены некоторые примеры сообщений:

CHECKDB found 0 allocation errors and 103 consistency errors in database ‘SalesDatabase’.
CHECKDB fixed 0 allocation errors and 103 consistency errors in database ‘SalesDatabase’.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Msg 8909, Level 16, State 1, Line 8
Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 45035996309880832 (type Unknown), page ID (1:553) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).
The error has been repaired.
Msg 8939, Level 16, State 98, Line 8
Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 111464090777419776 (type Unknown), page (0:0). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 2057 and -1.
Could not repair this error.

Это происходит потому, что DBCC CHECKDB исправляет базу данных, удаляя некоторые поврежденные записи, но на самом деле, most из них все еще можно восстановить через DataNumen SQL Recovery.

Примеры файлов:

SQL Server версия Поврежденный MDF-файл Файл MDF исправлен DataNumen SQL Recovery
SQL Server 2014 Ошибка10_1.mdf (Сообщение 8909, за которым следует сообщение 8939) (600 записей lost с REPAIR_ALLOW_DATA_LOSS) Ошибка10_1_fixed.mdf (Нет записи lost)
SQL Server 2014 Ошибка10_2.mdf (Сообщение 8909, за которым следует сообщение 8939) (6000 записей(50%) lost с REPAIR_ALLOW_DATA_LOSS) Ошибка10_2_fixed.mdf (Всего 100 записей lost)
SQL Server 2014 Error7.мдф (100 записей лost с REPAIR_ALLOW_DATA_LOSS) Ошибка7_fixed.mdf (Только одна запись lost)

6.4.2 Ремонт не удался — рассмотрите профессиональное решение

If REPAIR_ALLOW_DATA_LOSS в случае сбоя выводится одно или несколько сообщений об ошибках.

Вот несколько примеров:

DBCC results for ‘MyDatabase’.
CHECKDB found 0 allocation errors and 0 consistency errors in database ‘MyDatabase’.
Msg 824, Level 24, State 2, Line 8
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xea8a9a2f; actual: 0x37adbff8). It occurred during a read of page (1:28) in database ID 39 at offset 0x00000000038000 in file ‘MyDatabase.mdf’. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
Msg 7909, Level 20, State 1, Line 8
The emergency-mode repair failed.You must restore from backup.
Msg 8992, Level 16, State 1, Line 8
Check Catalog Msg 3852, State 1: Row (object_id=69) in sys.objects (type=S ) does not have a matching row (object_id=69,column_id=1) in sys.columns.
Msg 8945, Level 16, State 1, Line 8
Table error: Object ID 41, index ID 1 will be rebuilt.
Could not repair this error.
Msg 2510, Level 16, State 17, Line 8
DBCC checkdb error: This system table index cannot be recreated.
Repair: The Nonclustered index successfully rebuilt for the object “sysidxstats” in database “MyDatabase”.
Msg 8921, Level 16, State 1, Line 8
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Msg 8998, Level 16, State 2, Line 8
Page errors on the GAM, SGAM, or PFS pages prevent allocation integrity checks in database ID 39 pages from (1:0) to (1:8087). See other errors for cause.
CHECKDB found 1 allocation errors and 0 consistency errors not associated with any single object.
Msg 2575, Level 16, State 1, Line 8
The Index Allocation Map (IAM) page (1:157) is pointed to by the next pointer of IAM page (0:0) in object ID 3, index ID 1, partition ID 196608, alloc unit ID 196608 (type In-row data), but it was not detected in the scan.
Could not repair this error.
CHECKDB found 1 allocation errors and 0 consistency errors in table ‘sys.sysrscols’ (object ID 3).
Msg 8948, Level 16, State 3, Line 8
Database error: Page (1:295) is marked with the wrong type in PFS page (1:1). PFS status 0x70 expected 0x60.
The error has been repaired.
Msg 8905, Level 16, State 1, Line 8
Extent (1:296) in database ID 39 is marked allocated in the GAM, but no SGAM or IAM has allocated it.
The error has been repaired.
Msg 5028, Level 16, State 4, Line 4
The system could not activate enough of the database to rebuild the log.
Msg 5125, Level 24, State 2, Line 2
File ‘C:Program FilesMicrosoft SQL ServerMSSQL12.SQL2014MSSQLDATASalesDatabase.mdf’ appears to have been truncated by the operating system. Expected size is 5120 KB but actual size is 5112 KB.
Msg 3414, Level 21, State 1, Line 2
An error occurred during recovery, preventing the database ‘SalesDatabase’ (39:0) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support.
Msg 3313, Level 21, State 1, Line 2
During redoing of a logged operation in database ‘SalesDatabase’, an error occurred at log record ID (135:752:2). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.

В таких случаях вам необходимо использовать профессиональное решение, например: DataNumen SQL Recovery для исправления вашей базы данных.

Образцы файлов

SQL Server версия Поврежденный MDF-файл Файл MDF исправлен DataNumen SQL Recovery
SQL Server 2014 Ошибка1_3.mdf (Одиночное сообщение 824) Ошибка1_3_fixed.mdf
SQL Server 2014 Ошибка1_1.mdf (Постоянные ошибки Msg 824) Ошибка1_1_fixed.mdf
SQL Server 2014 Ошибка1_2.mdf ((Сообщение 824, за которым следует сообщение 7909) Ошибка1_2_fixed.mdf
SQL Server 2014 Ошибка4_1.mdf (Сообщение 8992, за которым следует сообщение 3852) Ошибка4_1_fixed.mdf
SQL Server 2014 Ошибка4_2.mdf (Сообщение 8992, за которым следует сообщение 3852) Ошибка4_2_fixed.mdf
SQL Server 2014 Ошибка5.mdf (Сообщение 8945) Ошибка5_fixed.mdf
SQL Server 2014 Ошибка6.mdf (Сообщение 2510) Ошибка6_fixed.mdf
SQL Server 2014 Ошибка2.mdf (Сообщение 2575) Ошибка2_fixed.mdf
SQL Server 2014 Ошибка11.mdf (Сообщение 8905) Ошибка11_fixed.mdf
SQL Server 2014 Ошибка3.mdf (Сообщение 5028) Ошибка3_fixed.mdf
SQL Server 2014 Error8.мдф (Сообщение 5125) Error8_fixed.mdf
SQL Server 2014 Ошибка9.mdf (Сообщение 3313) Ошибка9_fixed.mdf

7. Передовой опыт

7.1 Планирование регулярных операций CHECKDB

Реализуйте еженедельное выполнение DBCC CHECKDB для критически важных производственных баз данных с ежедневными проверками для систем с высокой транзакцией. Планируйте операции в периоды низкого использования, чтобы минимизировать влияние на производительность, и рассмотрите чередование между полными проверками и опциями PHYSICAL_ONLY на основе размера базы данных и окон обслуживания. Автоматизированное планирование через SQL Server Агент обеспечивает согласованное выполнение, предоставляя возможности централизованного мониторинга и оповещения.

7.2 Управление влиянием на производительность

Операции DBCC CHECKDB потребляют значительные системные ресурсы, что может повлиять на одновременную активность пользователей. Контролируйте использование ЦП, потребление памяти и дисковый ввод-вывод во время проверок, чтобы понять закономерности влияния на производительность. Рассмотрите возможность использования параметров NOINDEX для плановых проверок, резервируя полную проверку для ежемесячных периодов обслуживания. Внедрите расширения времени ожидания запросов и стратегии взаимодействия с пользователями для управления ожиданиями во время периодов проверки целостности.

7.3 Планирование периода технического обслуживания

Координируйте планирование DBCC CHECKDB с другими действиями по обслуживанию, такими как операции резервного копирования, перестроение индекса и обновление статистики. Избегайте перекрывающихся ресурсоемких операций, которые могут привести к снижению производительности или проблемам с тайм-аутом. Планируйте окна обслуживания на основе прогнозов роста размера базы данных, обеспечивая достаточное время для полной проверки целостности по мере увеличения объемов данных.

7.4 Автоматизированный мониторинг и оповещение

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

8. DBCC CHECKTABLE: облегченная альтернатива

8.1 Когда следует использовать CHECKTABLE вместо CHECKDB

DBCC CHECKTABLE обеспечивает целенаправленную проверку целостности отдельных таблиц, что делает его идеальным для targeted устранение неполадок и обслуживание определенных объектов базы данных. Используйте CHECKTABLE при исследовании проблем производительности с определенными таблицами, проверке критических бизнес-таблиц между полными проверками базы данных или когда ограничения по времени не позволяют выполнить полную проверку базы данных. Этот подход оказывается особенно ценным в больших базах данных, где полные операции CHECKDB превышают доступные окна обслуживания.

8.2 Синтаксис и примеры DBCC CHECKTABLE

Основная команда CHECKTABLE tarполучает определенные таблицы:

DBCC CHECKTABLE('YourTable')

Как и CHECKDB, CHECKTABLE поддерживает различные параметры, включая NOINDEX для оптимизации производительности и параметры восстановления для устранения повреждений. Вы также можете указать имена схем для точной идентификации таблиц:

DBCC CHECKTABLE('SchemaName.TableName', NOINDEX)

Эти tarПодход geted обеспечивает детальную проверку целостности, сохраняя производительность системы в рабочее время.

8.3 Преимущества производительности для больших баз данных

Операции CHECKTABLE завершаются значительно быстрее, чем полные проверки базы данных, что позволяет чаще проверять целостность критических таблиц. Такой подход позволяет проводить ежедневную проверку важных бизнес-таблиц, резервируя при этом комплексные операции CHECKDB для еженедельных или ежемесячных расписаний. Сокращенное потребление ресурсов делает CHECKTABLE подходящим для выполнения в производственной среде с минимальным влиянием на пользователя.

9. Когда CHECKDB дает сбой

DBCC CHECKDB завершится ошибкой в ​​различных сценариях, включая:

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

9.1 Введение в DataNumen SQL Recovery

DataNumen SQL Recovery предоставляет более продвинутые возможности:

  • Лучший показатель восстановления в этой отрасли.
  • Восстановление сильно поврежденных файлов базы данных.
  • Восстановите все объекты базы данных, включая таблицы, индексы, представления, триггеры, правила и значения по умолчанию.
  • Восстановление хранимых процедур, скалярных функций, встроенных функций с табличным значением и функций с несколькими операторами с табличным значением.
  • Восстановление окончательно удаленных записей.
  • Расшифровать зашифрованные объекты в SQL Server базы данных.
  • Пакетное восстановление файлов MDF.
  • Комплексные варианты ремонта.
  • Расширенное ведение журнала и создание отчетов.
  • Поддержка для всех SQL Server версий.
  • Наличие технической поддержки
  • Регулярные обновления и улучшения

9.2 Сравнение показателей успешности

Показатели успешности восстановления существенно различаются:

  • DBCC CHECKDB и CHECKTABLE: 1.27% средняя скорость восстановления
  • DataNumen: 92.6% скорость восстановления

Ниже приведено полное конкурентное сравнение:

Сравнительная таблица показателей восстановления между DataNumen SQL Recovery и другие конкуренты, включая DBCC CHECKDB и CHECKTABLE.

9.3 Восстановление после серьезной коррупции

Расширенные возможности для тяжелых случаев:

  • Восстановление физически поврежденного хранилища
  • Восстановление с отформатированных дисков или поврежденных систем
  • Восстановление из образов дисков, файлов резервных копий, файлов дисков виртуальных машин, темпаrary файлы и т.д.

9.4 Когда следует рассматривать профессиональные решения

  • Нет недавних резервных копий
  • DBCC CHECKDB не пройден
  • Серьезные сценарии коррупции
  • Работа с критически важными бизнес-данными
  • Когда время имеет решающее значение
  • Когда максимальное восстановление необходимо

10. Вопросы и ответы

10.1 Основные вопросы использования

В: Как часто следует запускать DBCC CHECKDB?

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

В: Могу ли я запустить DBCC CHECKDB в работающей производственной базе данных?

A: Да, DBCC CHECKDB может работать в онлайн-базах данных, не блокируя пользователей. Однако он потребляет значительные ресурсы, поэтому планируйте его на периоды низкой активности и следите за производительностью системы.

В: В чем разница между CHECKDB и CHECKTABLE?

A: CHECKDB проверяет всю базу данных, а CHECKTABLE фокусируется на отдельных таблицах. Используйте CHECKTABLE для tarпри устранении неполадок или когда вам нужно проверить определенные таблицы, не сканируя всю базу данных.

10.2 Вопросы производительности и ресурсов

В: Почему DBCC CHECKDB так долго работает с моей большой базой данных?

A: Продолжительность CHECKDB зависит от размера базы данных, производительности оборудования и используемых опций. Используйте PHYSICAL_ONLY для более быстрой проверки или NOINDEX для пропуска некластеризованных индексов. Рассмотрите возможность запуска во время периодов обслуживания с выделенными ресурсами.

В: Сколько места в базе данных tempdb нужно CHECKDB?

A: Обычно выделяйте 10-15% от размера вашей базы данных для tempdb во время операций CHECKDB. Используйте опцию ESTIMATEONLY для получения точных оценок: DBCC CHECKDB('YourDB') WITH ESTIMATEONLY

В: Могу ли я отменить запущенную операцию CHECKDB?

A: Да, вы можете отменить CHECKDB, используя команду KILL на идентификаторе сеанса. Однако отмена не предоставляет никакой информации о целостности базы данных, и вам нужно будет запустить ее снова позже.

10.3 Вопросы по обработке ошибок

В: CHECKDB обнаружил ошибки — стоит ли мне паниковать?

A: Не паникуйте, но действуйте быстро. Сначала определите, успешно ли завершилась CHECKDB, но обнаружила повреждение, или же CHECKDB сама не запустилась. Проверьте, затрагивают ли ошибки только некластеризованные индексы (менее критично) или данные таблиц (более серьезно).

В: Когда следует использовать REPAIR_ALLOW_DATA_LOSS?

A: Только в качестве абсолютного последнего средства, когда у вас нет пригодных для использования резервных копий и потеря данных приемлема по сравнению с полной потерей базы данных. Всегда пытайтесь сначала восстановить данные из резервной копии, так как операции по восстановлению могут привести к постоянной потере данных.

В: Что означают «ошибки согласованности в базе данных» и «ошибки распределения»?

A: Ошибки распределения влияют на то, как SQL Server отслеживает использование дискового пространства, а ошибки согласованности указывают на проблемы с данными или структурами индексов. Оба требуют внимания, но ошибки согласованности обычно влияют на доступность данных более непосредственно.

10.4 Вопросы по резервному копированию и восстановлению

В: Стоит ли мне запускать CHECKDB для моих резервных копий?

A: Конечно! Запустите CHECKDB после восстановления резервных копий на тестовых серверах. Это проверит целостность резервных копий и гарантирует, что вы действительно сможете восстановиться после повреждения. Автоматизируйте этот процесс, если это возможно.

В: Моя резервная копия тоже повреждена — что теперь?

A: Попробуйте старые резервные копии, пока не найдете чистую. Если чистых резервных копий нет, рассмотрите профессиональные решения по восстановлению, такие как DataNumen SQL Recovery. Документируйте хронологию случаев коррупции, чтобы предотвратить их возникновение в будущем.

В: Можно ли восстановить страницу, исправив повреждение без полного восстановления базы данных?

A: Да, но только в SQL Server Enterprise Edition с полной моделью восстановления и текущими резервными копиями журналов. Восстановление страниц работает при изолированном повреждении страниц, но требует аккуратного выполнения с соблюдением соответствующих процедур.

10.5 Вопросы по устранению неполадок

В: CHECKDB завершается с ошибкой «недостаточно места» — что делать?

A: Освободите место в tempdb, переместите tempdb в более быстрое хранилище или используйте опцию TABLOCK, чтобы сократить использование tempdb. Рассмотрите возможность запуска CHECKDB с NOINDEX или PHYSICAL_ONLY, чтобы сократить требования к ресурсам.

В: Как определить, какая таблица повреждена, по выходным данным CHECKDB?

A: Найдите номера «идентификатора объекта» в сообщениях об ошибках, затем используйте: SELECT OBJECT_NAME(object_id) для поиска названий таблиц. Сообщения об ошибках также включают номера страниц и слотов для точной идентификации местоположения.

В: Могут ли проблемы с оборудованием привести к ложным срабатываниям CHECKDB?

A: Да, неисправное оборудование (особенно хранилище) может вызывать периодические повреждения, которые появляются и исчезают между запусками CHECKDB. Если ошибки непоследовательны, исследуйте подсистему ввода-вывода и выполните несколько проверок для подтверждения закономерностей.

10.6 Вопросы расширенной конфигурации

В: Какие флаги трассировки могут улучшить производительность CHECKDB?

A: Флаг трассировки 2562 может улучшить производительность, запустив CHECKDB как единый пакет. Флаг трассировки 2549 помогает, когда файлы базы данных находятся на отдельных дисках. Используйте их осторожно и сначала протестируйте в непроизводственной среде.

В: Как автоматизировать мониторинг и оповещения CHECKDB?

A: Используйте SQL Server Оповещения агента об ошибках с номерами 8930, 8939 и других. Реализуйте анализ журнала для извлечения результатов CHECKDB и создайте уведомления для любых обнаружений повреждений. Рассмотрите возможность использования фреймворков для обслуживания, таких как скрипты Олы Халленгрена.

В: Стоит ли использовать опцию EXTENDED_LOGICAL_CHECKS?

A: Только если вы подозреваете сложное логическое повреждение и имеете адекватные накладные расходы на производительность. Этот параметр выполняет дополнительные проверки индексированных представлений, XML-индексов и пространственных индексов, но значительно увеличивает время выполнения.

11. Заключение

11.1 Краткое изложение ключевых моментов

11.1.1 Обзор основных команд DBCC CHECKDB

Освойте базовый синтаксис DBCC CHECKDB для комплексной проверки базы данных, используйте опции NOINDEX и PHYSICAL_ONLY для оптимизации производительности и изучите CHECKTABLE для tarПроверка таблицы geted. Эти основные команды формируют основу проактивного обслуживания базы данных, позволяя обнаруживать ранние повреждения и систематически контролировать целостность.

11.1.2 Напоминание о критически важных передовых практиках

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

11.2 Когда использовать DBCC CHECKDB вместо расширенных решений

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

12. Рекомендации

  1. Microsoft Learn. «DBCC CHECKDB (Transact-SQL)». SQL Server Документация. Корпорация Microsoft.
    https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver17
  2. Microsoft Learn. «Устранение ошибок согласованности базы данных, обнаруженных DBCC CHECKDB». SQL Server Документация. Корпорация Microsoft.
    https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/database-file-operations/troubleshoot-dbcc-checkdb-errors
Поделись сейчас: