Для проверки целостности логической и физической структуры диска

Обновлено: 21.11.2024

Инструкции по использованию утилиты Windows chkdsk для устранения повреждения диска хранилища. Утилита Windows DISKPART также частично обсуждается здесь.

Acronis Сyber Protect Домашний офис

Вы только что приобрели образ Acronis True Image. Вы решили создать резервную копию диска с операционной системой Windows. Вы настраиваете задачу резервного копирования и запускаете ее. а то беда!

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

В чем причина такого поведения? Эти симптомы типичны, когда на выбранном диске-источнике резервных копий существует повреждение либо в самой файловой системе, либо в так называемом «плохом секторе» (физическом повреждении) на диске. То же самое относится к исходным и целевым дискам во время операций восстановления. Как вы устраняете такое повреждение?

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

Что именно делает chkdsk? Хороший вопрос. Основная функция chkdsk — сканирование файловой системы на диске (NTFS, FAT32) и проверка целостности файловой системы, включая метаданные файловой системы, а также исправление любых обнаруженных логических ошибок файловой системы. Эти ошибки могут включать в себя поврежденные записи в главной таблице файлов тома (MFT), неверные дескрипторы безопасности, связанные с файлами, или неверную отметку времени или информацию о размере файла для отдельных файлов.

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

Как повреждается жесткий диск? Еще один хороший вопрос. Каждый раз, когда Windows аварийно закрывается или происходит системный сбой, это может привести к повреждению. Со временем вы можете ожидать, что вы столкнетесь с такой коррупцией. Запуск chkdsk в рамках обычной процедуры обслуживания является хорошей практикой, если вы хотите это сделать.

Достаточно технических вещей, давайте посмотрим, что мы можем сделать с помощью утилиты chkdsk.

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

Описание

Указывает букву диска (после двоеточия), точку подключения или имя тома.

Используйте только с таблицей размещения файлов (FAT) и FAT32. Указывает расположение и имя файла или набора файлов, которые программа chkdsk должна проверять на фрагментацию. Вы можете использовать? и * символы подстановки для указания нескольких файлов.

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

Отображает имя каждого файла в каждом каталоге при проверке диска.

Обнаруживает поврежденные сектора и восстанавливает читаемую информацию. Диск должен быть заблокирован. /r включает функциональность /f с дополнительным анализом ошибок физического диска.

При необходимости принудительно отключает том. Все открытые дескрипторы диска становятся недействительными. /x также включает в себя функции /f.

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

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

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

Только для NTFS: очищает список поврежденных кластеров на томе и повторно сканирует все выделенные и свободные кластеры на наличие ошибок. /b включает функциональность /r. Используйте этот параметр после создания образа тома на новом жестком диске.

Отображает справку в командной строке.

Как видите, в инструменте chkdsk разрешено множество параметров, которые могут выполнять некоторые дополнительные операции.

Примечание. Где X: буква раздела диска, на котором должна быть запущена программа chkdsk.

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

На приведенном выше снимке экрана показан результат выполнения команды chkdsk с параметром /f для раздела C:. Как видите, команда не запустилась из-за того, что диск используется другим процессом. При желании он предлагает запуститься при следующем перезапуске, ввод y позволяет выполнить сканирование. Это обычное дело при запуске chkdsk при загрузке Windows.

Еще одно замечание: параметр /r команды chkdsk приводит к такому же сообщению, как показано ниже:

Что произойдет, если мы запустим chkdsk на разделе C: без каких-либо параметров? Ниже представлен один из результатов.

Если chkdsk запускается без параметров, он работает в режиме "Только для чтения" и сообщает об общем состоянии файловой системы в указанном разделе. Это хорошее сканирование для выполнения на разделах вашего диска в качестве планового обслуживания ваших дисков. Если проверка сканирования приводит к обнаружению проблемы с файловой системой, запуск или планирование запуска chkdsk /f затем попытаются исправить найденные ошибки.

Какая разница в использовании параметра /r в chkdsk? Chkdsk, используемый с параметром /r, запускает сканирование раздела «Этап 4:» и ищет плохие кластеры в данных пользовательского файла. По завершении утилита отобразит, сколько файлов было обработано, и статус этого сканирования.

После сканирования на этапе 4 утилита запускает сканирование раздела на этапе 5 и ищет на диске поврежденные свободные кластеры. После завершения сканирования утилита отображает количество обработанных свободных кластеров и состояние сканирования.

Ниже приведены скриншоты каждого этапа сканирования chkdsk /r после его завершения.

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

Теперь, когда мы рассмотрели основное использование утилиты chkdsk, пришло время углубиться в использование этой утилиты на диске операционной системы Windows. Мы уже обнаружили, что chkdsk не будет работать на загруженном разделе/томе Windows System C: до тех пор, пока не произойдет перезагрузка компьютера. Вы могли заметить, что chkdsk работает с отдельными разделами на диске. Диск операционной системы Windows, отформатированный как диск GPT, как и большинство современных установок Windows, может иметь несколько разделов на диске. Дело в том, что повреждение диска может существовать на любом разделе диска. Повреждение может существовать более чем в одном разделе на одном диске. Кроме того, системные диски Windows будут иметь разделы на диске, которым не назначены буквы дисков, что делает использование на них утилиты chkdsk более сложной задачей.

Итак, как вы решаете проблемы, поднятые выше? Хороший вопрос! Давайте посмотрим, как решить эти проблемы.

Для начала давайте рассмотрим типичную установку Windows 10 на диск в формате GPT с помощью управления дисками Windows.

Как видно на снимке экрана выше, этот диск имеет четыре раздела. Это Recovery (450 МБ), EFI (99 МБ), Windows 10 PRO (237,08 ГБ) и OEM (861 МБ). Обратите внимание, что только одному разделу назначена буква диска, то есть разделу Windows 10, которому назначена буква (C :), как и следовало ожидать. Остальные три раздела не имеют буквенного обозначения. Чтобы использовать утилиту chkdsk для поиска и исправления ошибок диска, эту утилиту необходимо запускать на каждом разделе диска по одной за раз. Затем необходимо временно назначить буквы дисков разделам, для которых не назначены буквы, чтобы выполнить на них сканирование chkdsk.

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

После выбора раздела, оставив курсор мыши внутри выбранного раздела, нажмите правую кнопку мыши, появится новое меню, которое позволит вам назначить букву для раздела. Выберите «Изменить буквы и пути к дискам», как показано ниже.

Управление дисками автоматически выберет следующую по порядку доступную букву для этого назначения, как показано ниже. Нажмите OK, чтобы назначить букву.

Снимки экрана здесь и ниже показывают, что разделу присвоена буква F:, что теперь позволяет запускать сканирование этого раздела с помощью chkdsk.

Вы можете обнаружить, что «Управление дисками» не может выполнить назначение буквы диска. Когда вы выбираете раздел, как указано выше, и щелкаете его правой кнопкой мыши, вы можете просто увидеть маленькое поле с отображаемым словом «Справка». Другая возникающая проблема заключается в том, что параметр «Изменить буквы дисков и пути» отображается серым цветом и поэтому не может быть выбран. Для этого может быть ряд причин. Одна из наиболее распространенных причин заключается в том, что формат раздела не NTFS или FAT32. В этом случае единственный способ решить проблему — удалить том и переформатировать его. Эта ситуация обычно является результатом того, что сам диск ранее использовался в MAC.

Еще одна проблема, которая может возникнуть, заключается в том, что для раздела установлен атрибут "Только для чтения". Удаление атрибута «Только для чтения» решит эту проблему

В других случаях потребуется использовать другую утилиту Windows, чтобы назначить букву выбранному разделу. Для этого мы будем использовать утилиту diskpart, которую необходимо запускать из командной строки администратора. Чтобы узнать, как использовать командную строку, нажмите ЗДЕСЬ.

Ниже приведены шаги, необходимые для назначения букв дисков разделам системного диска Windows, для которых не назначено назначение с помощью утилиты diskpart. В этом примере мы назначим букву диска X: разделу восстановления на нашем тестовом диске.

Откройте командную строку Windows от имени администратора и введите diskpart, чтобы запустить утилиту, как показано ниже.

Обратите внимание, что командная строка меняется на DISKPART.

После того, как утилита запущена, введите том списка подсказок DISKPART, как показано ниже.

Обратите внимание, что с помощью этой команды отображаются все тома, установленные на компьютере, включая тома на других дисках. Здесь вы должны отметить, что нам нужно назначать буквы только тем разделам, которые не имеют существующих назначений букв, чтобы на них можно было запустить chkdsk. На снимке экрана выше эти разделы/тома — тома 1, 3 и 4.

В нашем примере мы собираемся назначить букву диска X: Тому 1, разделу восстановления. Для этого мы сначала должны сосредоточиться на Томе 1.

  • В командной строке DISKPART введите select volume 1, чтобы выделить том 1.
  • В командной строке введите assign letter=X, чтобы назначить букву X тому/разделу.
  • В командной строке введите list volume, чтобы отобразить список томов, и подтвердите, что буква X назначена нужному тому/разделу.

Примечание. Звездочка слева от Тома 1 ниже. Это указывает на то, что том 1 является «в фокусе»/выбранным объектом, и проблема с командами повлияет на этот объект.

Обратите внимание, что diskpart отображает ответ, подтверждающий, что Volume 1 теперь является выбранным или «в фокусе» объектом. Теперь, когда Том 1 «в фокусе», вы можете выполнить свою задачу по присвоению ему буквы. (ПРИМЕЧАНИЕ. Знак = в предыдущей команде не выделен жирным шрифтом. Это означает, что аргумент = не является обязательным для работы команды, хотя вы найдете его как часть команды во многих источниках).

После запуска команды assign letter X обратите внимание, что diskpart отвечает сообщением о том, что требуемое назначение выполнено.

Особое примечание: я должен отметить, что при назначении буквы разделу EFI в формате GPT использование команды тома diskpart list не будет работать. Причина этого в том, что раздел EFI фактически является частью раздела «Система». Чтобы присвоить букву этому разделу, вы должны заменить команду списка разделов командой listvolume. Пожалуйста, просмотрите скриншот ниже для обзора этих замен.

Теперь для запуска команды chkdsk необходимо выйти из утилиты diskpart. В командной строке введите exit. Это завершит работу утилиты, которая вернет вашу командную строку для чтения C:\WINDOWS\system32>. В этом приглашении теперь вы можете запустить желаемое сканирование утилитой chkdsk. Взгляните на приведенный ниже снимок экрана для иллюстрации выполнения команды chkdsk x:/f.

Ширина

Обратите внимание, что выполняется три «этапа» сканирования параметра /f команды chkdsk.

При подозрении на повреждение диска рекомендуется отказаться от использования параметра /f команды chkdsk и вместо этого использовать параметр /r. Использование параметра /r включает параметр /f в сканирование, поэтому вы будете выполнять оба действия с использованием параметра /r.

После завершения сканирования chkdsk вы можете снова использовать утилиту diskpart, чтобы удалить букву диска, назначенную для тома/раздела, чтобы все вернулось в нормальное состояние. В командной строке Windows введите

  • diskpart для запуска утилиты.
  • По запросу DISKPART введите list volume, чтобы отобразить все тома/разделы.
  • По запросу введите select volume 1, чтобы выбрать нужный раздел.
  • По запросу введите remove letter x, чтобы удалить ранее назначенную букву диска.
  • По запросу введите list volume, чтобы отобразить список томов и подтвердить удаление письма.

Снимок экрана ниже иллюстрирует приведенные выше последовательности команд.

Примечание. В приведенном выше примере замените список дисков / список разделов на разделы EFI.

На снимке экрана ниже показано подтверждение успешного удаления буквы диска.

Примечание. Звездочка слева от тома 1 указывает на "в фокусе"/выбранный том/раздел.

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

На этом мы завершаем наше руководство по борьбе с повреждением диска хранилища с помощью встроенных в Windows служебных инструментов chkdsk и diskpart. С помощью этой инструкции вы сможете эффективно бороться с повреждением диска, что, в свою очередь, позволит выполнять резервное копирование и восстановление вашей системы.

Проверяет файловую систему и метаданные файловой системы тома на наличие логических и физических ошибок. При использовании без параметров chkdsk отображает только состояние тома и не исправляет никаких ошибок. При использовании с параметрами /f, /r, /x или /b он исправляет ошибки тома.

Членство в локальной группе администраторов или аналогичной группе является минимальным требованием для запуска chkdsk. Чтобы открыть окно командной строки от имени администратора, щелкните правой кнопкой мыши командную строку в меню "Пуск" и выберите "Запуск от имени администратора".

Не рекомендуется прерывать работу chkdsk. Однако отмена или прерывание chkdsk не должны оставлять том более поврежденным, чем он был до запуска chkdsk. Повторный запуск chkdsk проверяет и устраняет все оставшиеся повреждения на томе.

Chkdsk можно использовать только для локальных дисков. Команду нельзя использовать с буквой локального диска, которая была перенаправлена ​​по сети.

Синтаксис

Параметры

Параметр Описание
Указывает букву диска (после двоеточия), точку монтирования, или имя тома.
[ [

Примечания

Переключатель /i или /c сокращает время, необходимое для запуска chkdsk, пропуская определенные проверки тома.

Если вы хотите, чтобы chkdsk исправлял ошибки диска, у вас не должно быть открытых файлов на диске. Если файлы открыты, появляется следующее сообщение об ошибке:

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

Вы также можете использовать команду chkntfs /c, чтобы запланировать проверку тома при следующем перезапуске компьютера. Используйте команду fsutil dirty set, чтобы установить грязный бит тома (указывающий на повреждение), чтобы Windows запускала chkdsk при перезагрузке компьютера.

Вы должны время от времени использовать chkdsk в файловых системах FAT и NTFS для проверки ошибок диска. Chkdsk проверяет дисковое пространство и использование диска и предоставляет отчет о состоянии для каждой файловой системы. Отчет о состоянии показывает ошибки, обнаруженные в файловой системе. Если вы запустите chkdsk без параметра /f в активном разделе, он может сообщить о ложных ошибках, поскольку не может заблокировать диск.

Chkdsk исправляет ошибки логического диска, только если вы укажете параметр /f. Chkdsk должен иметь возможность заблокировать диск для исправления ошибок.

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

Если нажать N, Windows исправит диск, но не сохранит содержимое потерянных единиц размещения.

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

Если вы используете chkdsk /f* на очень большом диске или диске с очень большим количеством файлов (например, миллионы файлов), выполнение chkdsk /f может занять много времени.

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

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

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

Команда chkdsk с другими параметрами доступна в консоли восстановления.

На серверах, которые редко перезагружаются, вы можете использовать команды chkntfs или fsutil dirty query, чтобы определить, установлен ли грязный бит тома перед запуском chkdsk.

Коды выхода

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

Код выхода Описание
0 Ошибок не обнаружено.
1 Ошибки найдены и исправлены.
2< /td> Выполнена очистка диска (например, сборка мусора) или не выполнена очистка, так как параметр /f не указан.
3 Может не проверял диск, ошибки не могли быть исправлены, или ошибки не были исправлены, потому что /f не был указан.

Примеры

Чтобы проверить диск на диске D и исправить ошибки Windows, введите:

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

Чтобы проверить все файлы на FAT-диске в текущем каталоге на несмежные блоки, введите:

Chkdsk отображает отчет о состоянии, а затем перечисляет файлы, соответствующие спецификациям файлов, которые имеют несмежные блоки.

В этой главе описывается природа логических структур хранения и отношения между ними. Эти структуры создаются и распознаются Oracle Database и неизвестны операционной системе.

Эта глава состоит из следующих разделов:

Введение в логические структуры хранения

База данных Oracle выделяет логическое пространство для всех данных в базе данных. Логическими единицами распределения пространства базы данных являются блоки данных, экстенты, сегменты и табличные пространства. На физическом уровне данные хранятся в файлах данных на диске (см. главу 11, «Физические структуры хранения»). Данные в файлах данных хранятся в блоках операционной системы.

Рисунок 12-1 представляет собой диаграмму отношения объект-связь для физического и логического хранилища. Обозначение «гусиная лапка» представляет отношение «один ко многим».

Рис. 12-1. Логическое и физическое хранилище

Логическая иерархия хранения

На рис. 12-2 показаны отношения между блоками данных, экстентами и сегментами в табличном пространстве. В этом примере сегмент имеет два экстента, хранящихся в разных файлах данных.

Рис. 12-2. Сегменты, экстенты и блоки данных в табличном пространстве

С высочайшим уровнем детализации Oracle Database хранит данные в блоках данных. Один логический блок данных соответствует определенному количеству байтов физического дискового пространства, например, 2 КБ. Блоки данных — это наименьшие единицы хранения, которые может использовать или выделять база данных Oracle.

Экстент — это набор логически смежных блоков данных, выделенных для хранения определенного типа информации. На рис. 12-2 экстент размером 24 КБ содержит 12 блоков данных, а экстент размером 72 КБ — 36 блоков данных.

Сегмент — это набор экстентов, выделенных для определенного объекта базы данных, например таблицы. Например, данные для таблицы сотрудников хранятся в отдельном сегменте данных, тогда как каждый индекс для сотрудников хранится в своем собственном сегменте индекса. Каждый объект базы данных, занимающий место в хранилище, состоит из одного сегмента.

Каждый сегмент принадлежит одному и только одному табличному пространству. Таким образом, все экстенты сегмента хранятся в одном и том же табличном пространстве. Внутри табличного пространства сегмент может включать экстенты из нескольких файлов данных, как показано на рис. 12-2. Например, один экстент сегмента может храниться в файле users01.dbf, а другой — в файле users02.dbf. Один экстент никогда не может охватывать файлы данных.

Логическое управление пространством

База данных Oracle должна использовать логическое управление пространством для отслеживания и распределения экстентов в табличном пространстве. Когда объекту базы данных требуется экстент, база данных должна иметь метод его поиска и предоставления. Точно так же, когда объекту больше не требуется экстент, в базе данных должен быть способ сделать этот свободный экстент доступным.

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

Локально управляемые табличные пространства (по умолчанию)

База данных использует растровые изображения в самих табличных пространствах для управления экстентами. Таким образом, в локально управляемых табличных пространствах часть табличного пространства отведена для растрового изображения. В пределах табличного пространства база данных может управлять сегментами с помощью автоматического управления пространством сегментов (ASSM) или ручного управления пространством сегментов (MSSM).

На рис. 12-3 показаны варианты управления логическим пространством в табличном пространстве.

Рис. 12-3 Управление логическим пространством

Локально управляемые табличные пространства

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

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

Локально управляемое табличное пространство имеет следующие преимущества:

Не использовать словарь данных для управления экстентами

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

Автоматически отслеживает соседнее свободное пространство

Таким образом, база данных избавляет от необходимости объединять свободные экстенты.

Автоматически определяет размер локально управляемых экстентов

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

Oracle настоятельно рекомендует использовать локально управляемые табличные пространства с автоматическим управлением пространством сегментов.

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

Автоматическое управление пространством сегмента

Метод ASSM использует растровые изображения для управления пространством. Растровые изображения имеют следующие преимущества:

ASSM избавляет от необходимости вручную определять правильные настройки для многих параметров хранения. Только один важный параметр SQL управляет распределением пространства: PCTFREE. Этот параметр указывает процент пространства, которое должно быть зарезервировано в блоке для будущих обновлений (см. «Процент свободного места в блоках данных»).

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

Динамическое соответствие пространства экземплярам в среде Oracle Real Application Clusters (Oracle RAC)

ASSM более эффективен и используется по умолчанию для постоянных табличных пространств с локальным управлением.

В этой главе предполагается использование ASSM во всех обсуждениях логического пространства хранения.

Ручное управление пространством сегмента

Устаревший метод MSSM использует связанный список, называемый свободным списком, для управления свободным пространством в сегменте. Для объекта базы данных со свободным пространством в списке свободных блоков отслеживаются блоки под верхней отметкой (HWM), которая является разделительной линией между используемым и еще не использованным пространством сегмента. По мере использования блоков база данных добавляет блоки или удаляет блоки из списка свободных по мере необходимости.

В дополнение к PCTFREE, MSSM требует, чтобы вы управляли выделением пространства с помощью параметров SQL, таких как PCTUSED, FREELISTS и FREELIST GROUPS. PCTUSED устанавливает процент свободного места, который должен существовать в используемом в данный момент блоке, чтобы база данных поместила его в список свободных. Например, если вы установите для параметра PCTUSED значение 40 в операторе CREATE TABLE, вы не сможете вставлять строки в блок сегмента до тех пор, пока не будет использовано менее 40 % пространства блока.

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

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

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

Рисунок 12-4 Свободные группы списка

Управлять пространством сегмента вручную может быть сложно. Вы должны настроить PCTFREE и PCTUSED, чтобы уменьшить миграцию строк (см. «Сцепленные и перенесенные строки») и избежать лишнего пространства. Например, если каждый используемый блок в сегменте заполнен наполовину, а значение PCTUSED равно 40, то база данных не разрешает вставки ни в один из этих блоков. Из-за сложности точной настройки параметров распределения пространства Oracle настоятельно рекомендует ASSM. В ASSM PCTFREE определяет, можно ли вставить новую строку в блок, но не использует списки свободных мест и игнорирует PCTUSED .

Руководство администратора базы данных Oracle для изучения локально управляемых табличных пространств

Oracle Database 2 Day DBA и Oracle Database Administrator’s Guide, чтобы узнать больше об автоматическом управлении пространством сегментов

Справочник по языку Oracle Database SQL, чтобы узнать о параметрах хранения, таких как PCTFREE и PCTUSED

Табличные пространства, управляемые словарем

Табличное пространство, управляемое словарем, использует словарь данных для управления своими экстентами. База данных Oracle обновляет таблицы в словаре данных всякий раз, когда экстент выделяется или освобождается для повторного использования. Например, когда таблице требуется экстент, база данных запрашивает таблицы словаря данных и ищет свободные экстенты. Если база данных находит место, она модифицирует одну таблицу словаря данных и вставляет строку в другую. Таким образом, база данных управляет пространством, изменяя и перемещая данные.

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

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

Обзор блоков данных

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

Блоки данных и блоки операционной системы

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

На рис. 12-5 показано, что блоки операционной системы могут отличаться по размеру от блоков данных. База данных запрашивает данные кратными блокам данных, а не блокам операционной системы.

Рис. 12-5 Блоки данных и блоки операционной системы

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

Приложениям не нужно определять физические адреса данных на диске.

Данные базы данных можно чередовать или зеркально отображать на нескольких физических дисках.

Размер блока базы данных

Каждая база данных имеет размер блока базы данных. Параметр инициализации DB_BLOCK_SIZE задает размер блока данных для базы данных при ее создании. Размер устанавливается для табличных пространств SYSTEM и SYSAUX и является значением по умолчанию для всех остальных табличных пространств. Размер блока базы данных нельзя изменить, кроме как путем повторного создания базы данных.

Если DB_BLOCK_SIZE не задан, размер блока данных по умолчанию зависит от операционной системы. Стандартный размер блока данных для базы данных составляет 4 КБ или 8 КБ. Если размер блоков данных и блоков операционной системы различается, то размер блока данных должен быть кратен размеру блока операционной системы.

Справочник по базе данных Oracle, чтобы узнать о параметре инициализации DB_BLOCK_SIZE

Размер блока табличного пространства

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

Руководство администратора базы данных Oracle, чтобы узнать, как указать нестандартный размер блока для табличного пространства

Формат блока данных

Каждый блок данных имеет формат или внутреннюю структуру, которая позволяет базе данных отслеживать данные и свободное пространство в блоке. Этот формат одинаков, если блок данных содержит данные таблицы, индекса или кластера таблиц. На рис. 12-6 показан формат несжатого блока данных (см. «Сжатие блока данных», чтобы узнать о сжатых блоках).

Рисунок 12-6 Формат блока данных

Заголовок блока данных

База данных Oracle использует служебные данные блока для управления самим блоком. Заголовок блока недоступен для хранения пользовательских данных. Как показано на рис. 12-6, заголовок блока включает следующие части:

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

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

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

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

После выделения места в каталоге строк база данных не освобождает это пространство после удаления строки. Таким образом, блок, который в настоящее время пуст, но ранее имел до 50 строк, по-прежнему имеет 100 байтов, выделенных для каталога строк. База данных повторно использует это пространство только тогда, когда в блок вставляются новые строки.

Некоторые части заголовка блока имеют фиксированный размер, но общий размер может меняться. В среднем служебные данные блока составляют от 84 до 107 байт.

Формат строки

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

База данных Oracle хранит строки в виде записей переменной длины. Строка состоит из одной или нескольких частей строки. Каждая часть строки имеет заголовок строки и данные столбца .

На рис. 12-7 показан формат строки.

Рис. 12-7. Формат фрагмента строки

Заголовок строки

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

Столбцы в части строки

Части строки, расположенные в других блоках данных

Если целую строку можно вставить в один блок данных, Oracle Database сохранит эту строку как одну часть строки. Однако, если все данные строки не могут быть вставлены в один блок или обновление приводит к тому, что существующая строка перерастает свой блок, тогда база данных сохраняет строку в виде нескольких частей строки (см. «Сцепленные и перенесенные строки»). Блок данных обычно содержит только одну часть строки на строку.

Строка, полностью содержащаяся в одном блоке, имеет не менее 3 байтов заголовка строки.

Данные столбца

После заголовка строки в разделе данных столбца хранятся фактические данные в строке.Часть строки обычно хранит столбцы в порядке, указанном в операторе CREATE TABLE, но этот порядок не гарантируется. Например, столбцы типа LONG создаются последними.

Как показано на рис. 12-7, для каждого столбца в строке Oracle Database хранит длину столбца и данные отдельно. Необходимое пространство зависит от типа данных. Если тип данных столбца имеет переменную длину, то пространство, необходимое для хранения значения, может увеличиваться и уменьшаться при обновлении данных.

Каждая строка имеет слот в каталоге строк заголовка блока данных. Слот указывает на начало строки.

Формат строки

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

Расширенный идентификатор строки включает номер объекта данных. Этот тип rowid использует кодировку base 64 физического адреса для каждой строки. Символы кодировки: A-Z , a-z , 0-9 , + и / .

Пример 12-1 запрашивает псевдостолбец ROWID, чтобы показать расширенный идентификатор строки в таблице сотрудников для сотрудника 100.

Пример 12-1. Псевдостолбец ROWID

На рис. 12.8 показан формат расширенного идентификатора строки.

Рис. 12-8. Формат ROWID

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

Номер объекта данных идентифицирует сегмент (объект данных AAAPec в примере 12-1). Каждому сегменту базы данных присваивается номер объекта данных. Объекты схемы в одном сегменте, например кластер таблицы, имеют одинаковый номер объекта данных.

Номер файла данных относительно табличного пространства идентифицирует файл данных, содержащий строку (файл AAF в примере 12-1).

Номер блока данных идентифицирует блок, содержащий строку (блок AAAABS в примере 12-1). Номера блоков относятся к их файлу данных, а не к их табличному пространству. Таким образом, две строки с одинаковыми номерами блоков могут находиться в разных файлах данных одного и того же табличного пространства.

Номер строки идентифицирует строку в блоке (строка AAA в примере 12-1).

После того, как элементу строки назначен идентификатор строки, в особых случаях он может измениться. Например, если включено перемещение строк, идентификатор строки может измениться из-за обновлений ключа секции, операций Flashback Table, операций сжатия таблиц и т. д. Если перемещение строк отключено, идентификатор строки может измениться, если строка экспортируется и импортируется с помощью утилит базы данных Oracle.

Внутренне база данных выполняет перемещение строк, как если бы строка была физически удалена и вставлена ​​повторно. Однако перемещение строк считается обновлением, которое влияет на триггеры.

Сжатие блоков данных

База данных может использовать сжатие таблиц для устранения повторяющихся значений в блоке данных (см. «Сжатие таблиц»). В этом разделе описывается формат блоков данных, использующих сжатие.

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

Предположим, что строки в примере 12-2 хранятся в блоке данных для таблицы продаж из семи столбцов.

Пример 12-2 Строки в таблице продаж

Когда к этой таблице применяется базовое или расширенное сжатие строк, база данных заменяет повторяющиеся значения ссылкой на символ. Пример 12-3 представляет собой концептуальное представление сжатия, в котором символ * заменяет 29-NOV-00, а % заменяет 9999.

Пример 12-3. Сжатые строки OLTP в таблице продаж

Таблица 12-1 концептуально представляет таблицу символов, которая сопоставляет символы со значениями.

Повреждение базы данных SQL Server может стать проблемой и нанести серьезный ущерб базе данных. Если вы опытный администратор баз данных, то у вас, вероятно, есть средства защиты для обнаружения этого, но за многие годы я видел сотни серверов SQL без каких-либо методов обнаружения, и это проблема. Существует несколько способов обнаружения повреждения базы данных, но в этом совете основное внимание будет уделено DBCC CHECKDB.

Решение

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

Что такое SQL Server DBCC CHECKDB

DBCC CHECKDB из библиотеки Microsoft MSDN проверяет логическую и физическую целостность всех объектов в указанной базе данных, выполняя следующие операции:

  • Выполняет команду DBCC CHECKALLOC для базы данных — проверяет согласованность структур распределения дискового пространства для указанной базы данных.
  • Выполняет команду DBCC CHECKTABLE для каждой таблицы и представления в базе данных. Проверяет целостность всех страниц и структур, составляющих таблицу или индексированное представление.
  • Запускает команду DBCC CHECKCATALOG в базе данных — проверяет целостность каталога в базе данных.
  • Проверяет содержимое каждого проиндексированного представления в базе данных.
  • Проверяет согласованность на уровне ссылок между метаданными таблицы и каталогами и файлами файловой системы при сохранении данных varbinary(max) в файловой системе с помощью FILESTREAM.
  • Проверяет данные Service Broker в базе данных

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

Как мне может помочь SQL Server DBCC CHECKDB?

Повреждение данных — это плохо. Это может вызвать всевозможные проблемы в базе данных, которые могут включать неправильные результаты данных, неудачные операторы SQL, а в некоторых случаях могут вывести из строя весь экземпляр SQL. DBCC CHECKDB предупреждает вас о повреждении, чтобы вы могли исправить его, прежде чем (надеюсь) оно станет слишком серьезным.

Как использовать SQL Server DBCC CHECKDB?

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

Автоматизировать SQL Server DBCC CHECKDB

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

  • Планы обслуживания SQL Server. Планы обслуживания являются частью SQL Server по умолчанию (если вы не используете Express Edition). По большей части мне не нравится использовать планы обслуживания, но я не возражаю против их использования для задач такого типа. В наборе инструментов плана обслуживания вам нужно будет использовать задачу «Проверить целостность базы данных». Единственный настраиваемый параметр — включить индексы, что не очень удобно для пользователя, но в некоторых случаях это все, что вам нужно. Опять же, мы поговорим о других вариантах в следующем разделе.

Параметры SQL Server DBCC CHECKDB

  • NOINDEX — указывает, что интенсивные проверки некластеризованных индексов для пользовательских таблиц выполняться не должны. Это уменьшает общее время выполнения. NOINDEX не влияет на системные таблицы, поскольку проверки целостности всегда выполняются для индексов системных таблиц.
  • NO_INFOMSGS — подавляет все информационные сообщения.
  • PHYSICAL_ONLY — проверка ограничивается целостностью физической структуры страниц и заголовков записей, а также непротиворечивостью распределения базы данных. Эта проверка предназначена для небольшой дополнительной проверки физической согласованности базы данных, но также может обнаруживать разрывы страниц, ошибки контрольной суммы и распространенные аппаратные сбои, которые могут поставить под угрозу данные пользователя.
  • TABLOCK — заставляет DBCC CHECKDB получать блокировки вместо использования моментального снимка внутренней базы данных. Это включает в себя кратковременную монопольную (X) блокировку базы данных. TABLOCK заставит DBCC CHECKDB работать быстрее в базе данных при большой нагрузке, но уменьшит параллелизм, доступный в базе данных, пока выполняется DBCC CHECKDB.
  • DATA_PURITY — заставляет команду DBCC CHECKDB проверять базу данных на наличие недопустимых или выходящих за пределы допустимого диапазона значений столбцов. Например, DBCC CHECKDB обнаруживает столбцы со значениями даты и времени, которые больше или меньше допустимого диапазона для типа данных datetime; или столбцы с десятичным или приближенно-числовым типом данных с недопустимыми значениями масштаба или точности.

Мы рассмотрим некоторые варианты РЕМОНТА в другом разделе ниже.

Как часто следует проверять SQL Server на наличие повреждений?

Каждую минуту каждого дня. Шучу.

Если у вас есть ежедневное окно обслуживания, было бы неплохо ежедневно проверять данные на наличие повреждений. Чем быстрее вы сможете его поймать, тем меньше вреда он может причинить. Я заметил, что многие люди запускают это по выходным, особенно с большими базами данных. В этом нет правильного или неправильного, просто периодически планируйте это.

Нужно ли запускать команду DBCC CHECKDB в производственной среде?

Нет, ну да. Типа.

Чтобы проверить наличие повреждения данных, бесполезно запускать команду DBCC CHECKDB в тестовой среде. ЕСЛИ вы не восстановите копию рабочей среды для тестирования, а затем запустите ее. ВЕЛИКОЛЕПНО!

Вы можете задаться вопросом, подходят ли некоторые варианты высокой доступности, такие как AlwaysOn, Log Shipping и т. д.? Нет, вам нужно проверить рабочую *живую* среду.

Теперь, когда DBCC CHECKDB настроен и запущен, что мне нужно?

Поздравляем!У вас есть автоматизированная и работающая команда DBCC CHECKDB, но что теперь? Если у вас есть настройка задания агента SQL Server, убедитесь, что вы настроили Database Mail, оператора и уведомление о задании. Если работа удалась, продолжайте свой прекрасный день. Если задание провалится, значит, нам есть над чем поработать.

Вы можете увидеть такую ​​ошибку:

Счетчик страниц USED данных в строке для объекта "tablename", идентификатор индекса 2, идентификатор раздела 608313809829888, идентификатор единицы распределения 608313809829888 (тип Данные в строке) неверен. Запустите команду DBCC UPDATEUSAGE. [SQLSTATE 42000] (Ошибка 2508) Количество страниц RSVD данных в строке для объекта "tablename", идентификатор индекса 2, пар. Шаг не выполнен.

Идентификатор объекта 2088535921, идентификатор индекса 0, идентификатор раздела 72345201021503994, идентификатор единицы распределения 72345201051571606 (тип данных в строке): страница (1:94299) не может быть обработана. Дополнительные сведения см. в разделе Другие ошибки. Сообщение 8939, уровень 16, состояние 98, строка 1. Ошибка таблицы: идентификатор объекта 2088535921, идентификатор индекса 0, идентификатор раздела 72345201021503994, идентификатор блока распределения 72345201051571606 (тип In-row data), страница (1:94299). Тест (IS_OFF (BUF_IOERR, pBUF->bstat)) не пройден. CHECKDB обнаружил 0 ошибок распределения и 2 ошибки согласованности в таблице tablename (идентификатор объекта 2088535921). CHECKDB обнаружил 0 ошибок распределения и 2 ошибки согласованности в базе данных "имя_таблицы". repair_allow_data_loss — это минимальный уровень исправления ошибок, обнаруженных командой DBCC CHECKDB (база данных).

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

Для первой ошибки команда DBCC UPDATEUSAGE исправит неточности в количестве страниц и строк в представлениях каталога. Довольно безобидно.

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

Как восстановить базу данных SQL Server

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

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

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

Меня это вполне устраивает, но что еще я могу использовать для защиты своих экземпляров SQL?

Проверку DBCC CHECKDB следует запускать на каждом имеющемся у вас экземпляре SQL, но есть несколько других способов, которые могут помочь обнаружить/предотвратить повреждение данных.

DatabaseIntegrityCheck — это хранимая процедура SQL Server Maintenance Solution для проверки целостности баз данных. DatabaseIntegrityCheck поддерживается в SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017, SQL Server 2019, базе данных SQL Azure и управляемом экземпляре базы данных SQL Azure.

Скачать

Загрузить MaintenanceSolution.sql. Этот скрипт создает все объекты и задания, которые вам нужны. Вы также можете скачать объекты как отдельные скрипты. Решение для обслуживания SQL Server доступно на GitHub.

Лицензия

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

Параметры

Базы данных

Выберите базы данных. Поддерживаются ключевые слова SYSTEM_DATABASES, USER_DATABASES, ALL_DATABASES и AVAILABILITY_GROUP_DATABASES. Символ дефиса (-) используется для исключения баз данных, а символ процента (%) используется для выбора подстановочных знаков. Все эти операции можно объединить с помощью запятой (,).

Значение Описание
SYSTEM_DATABASES Все системные базы данных (master, msdb и модель)
USER_DATABASES Все пользовательские базы данных
ALL_DATABASES Все базы данных
AVAILABILITY_GROUP_DATABASES Все базы данных в группах доступности
USER_DATABASES, -AVAILABILITY_GROUP_DATABASES Все пользовательские базы данных, не входящие в группы доступности
Db1 База данных Db1
Db1, Db2 Базы данных Db1 и Db2
USER_DATABASES, -Db1 Все пользовательские базы данных, кроме Db1< /td>
%Db% Все базы данных, в имени которых есть «Db»
%Db% , -Db1 Все базы данных, имеющие в имени «Db», кроме Db1
ВСЕ_БАЗЫ ДАННЫХ, -%Db% Все базы данных, в имени которых нет «Db»

ПроверитьКоманды

Укажите команды проверки целостности, которые необходимо выполнить.

Значение Описание
CHECKDB Проверить базу данных. Это значение по умолчанию.
CHECKFILEGROUP Проверить файловые группы.
CHECKTABLE Проверьте таблицы и индексированные представления.
CHECKALLOC Проверьте структуры распределения дискового пространства.
CHECKCATALOG Проверить согласованность каталога.
CHECKALLOC,CHECKCATALOG Проверить структуру распределения дискового пространства и каталог согласованность.
CHECKFILEGROUP,CHECKCATALOG Проверить файловые группы и согласованность каталога.
CHECKALLOC, CHECKTABLE,CHECKCATALOG Проверьте структуры распределения дискового пространства, таблицы и индексированные представления, а также целостность каталога.

DatabaseIntegrityCheck использует следующие команды DBCC SQL Server: DBCC CHECKDB для проверки базы данных, DBCC CHECKFILEGROUP для проверки файловых групп, DBCC CHECKTABLE для проверки таблиц и индексированных представлений, DBCC CHECKALLOC для проверки структур распределения дискового пространства и DBCC CHECKCATALOG для проверьте согласованность каталога.

Только физические

Ограничьте проверки физическими структурами базы данных.

Значение Описание
Y Ограничьте проверки физическими структурами базы данных.
N Не ограничивайте проверки физическими структурами базы данных. Это значение по умолчанию.

Параметр PhysicalOnly в DatabaseIntegrityCheck использует параметр PHYSICAL_ONLY в командах SQL Server DBCC CHECKDB, DBCC CHECKFILEGROUP и DBCC CHECKTABLE.

Чистота данных

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

Значение Описание
Y Проверить значения столбца на наличие недопустимых или недопустимых значений. of-range.
N Нет, не проверять значения столбца, которые недействительны или выходят за пределы допустимого диапазона. Это значение по умолчанию.

Параметр DataPurity в DatabaseIntegrityCheck использует параметр DATA_PURITY в командах SQL Server DBCC CHECKDB и DBCC CHECKTABLE.

Без индекса

Не проверять некластеризованные индексы.

< /tr>
Значение Описание
Y Не проверять некластеризованные индексы.
N Проверить некластеризованные индексы. Это значение по умолчанию.

Параметр NoIndex в DatabaseIntegrityCheck использует параметр NOINDEX в командах SQL Server DBCC CHECKDB, DBCC CHECKFILEGROUP, DBCC CHECKTABLE и DBCC CHECKALLOC.

Расширенные логические проверки

Выполнять расширенные логические проверки.

Значение Описание
Y Выполнять расширенные логические проверки.
N Не выполнять расширенные логические проверки. Это значение по умолчанию.

Параметр ExtendedLogicalChecks в DatabaseIntegrityCheck использует параметр EXTENDED_LOGICAL_CHECKS в команде SQL Server DBCC CHECKDB.

Вы не можете комбинировать параметры PhysicalOnly и ExtendedLogicalChecks.

Блокировка вкладок

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

Значение Описание
Y Использовать блокировки для проверки согласованности.
N Используйте моментальный снимок внутренней базы данных для проверки согласованности. Это значение по умолчанию.

Параметр TabLock в DatabaseIntegrityCheck использует параметр TABLOCK в командах SQL Server DBCC CHECKDB, DBCC CHECKFILEGROUP, DBCC CHECKTABLE и DBCC CHECKALLOC.

Группы файлов

Выберите файловые группы. Ключевое слово ALL_FILEGROUPS поддерживается. Символ дефиса (-) используется для исключения файловых групп, а символ процента (%) используется для выбора подстановочного знака.Все эти операции можно объединить с помощью запятой (,).

< /tr>

Этот параметр можно использовать только в том случае, если в параметре CheckCommands указано значение CHECKFILEGROUPS.

Объекты

Выберите объекты. Ключевое слово ALL_OBJECTS поддерживается. Символ дефиса (-) используется для исключения объектов, а символ процента (%) используется для выбора подстановочного знака. Все эти операции можно объединить с помощью запятой (,).

Значение Описание
ALL_FILEGROUPS Все файловые группы
Db1.FileGroup1 Файловая группа FileGroup1 в базе данных Db1
Db1.FileGroup1, Db2.FileGroup2 Файловая группа FileGroup1 в базе данных Db1 и файловая группа FileGroup2 в базе данных Db2
ALL_FILEGROUPS, -Db1.FileGroup1 Все файловые группы, кроме файловая группа FileGroup1 в базе данных Db1
Db1.%FileGroup% Все файловые группы в базе данных Db1, имеющие «FileGroup» в имени
< /tr>
Значение Описание
ALL_OBJECTS Все объекты
Db1.Schema1.Tbl1 Объект Schema1.Tbl1 в базе данных Db1
Db1.Schema1.Object1, Db2.Schema2.Object2 Объект Schema1.Tbl1 в базе данных Db1 и объект Schema2.Tbl2 в базе данных Db2
ALL_OBJECTS, -Db1. Schema1.Object1 Все объекты, кроме объекта Schema1.Object1 в базе данных Db1
Db1.Schema1.% Все объекты в схеме Schema1 в базе данных Db1

Этот параметр можно использовать, только если в параметре CheckCommands указан параметр CHECKTABLE.

МаксДОП

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

Параметр MaxDOP в DatabaseIntegrityCheck использует параметр MAXDOP в командах SQL Server DBCC CHECKDB, DBCC CHECKFILEGROUP и DBCC CHECKTABLE.

Группы доступности

Выберите группы доступности. Ключевое слово ALL_AVAILABILITY_GROUPS поддерживается. Символ дефиса (-) используется для исключения групп доступности, а символ процента (%) используется для выбора подстановочных знаков. Все эти операции можно объединить с помощью запятой (,).

Значение Описание
ALL_AVAILABILITY_GROUPS Все группы доступности
AG1 Группа доступности AG1
AG1, AG2 Группы доступности AG1 и AG1
ALL_AVAILABILITY_GROUPS, -AG1 Все группы доступности, кроме AG1
%AG% Все группы доступности, имеющие в имени «AG»
%AG%, -AG1 Все группы доступности, имеющие «AG» в имени, кроме AG1
ALL_AVAILABILITY_GROUPS, -%AG% Все группы доступности, в имени которых нет «AG»< /td>

Реплики группы доступности

Укажите, какие реплики в группах доступности следует проверять.

Возможность обновления

Выберите READ_ONLY/READ_WRITE — базы данных.

Значение Описание
ВСЕ Выполнить проверки на всех репликах. Это значение по умолчанию.
ПЕРВИЧНАЯ Выполнить проверки первичной реплики.
ВТОРИЧНАЯ Выполните проверки вторичных реплик.
PREFERRED_BACKUP_REPLICA Выполните проверки предпочтительной резервной копии.
< td>READ_WRITE — базы данных
Значение Описание
ВСЕ READ_ONLY и READ_WRITE - базы данных. Это значение по умолчанию.
READ_ONLY READ_ONLY — базы данных
READ_WRITE

is_read_only в sys.databases используется для проверки того, находится ли база данных в состоянии READ_ONLY или READ_WRITE.

Ограничение по времени

Установите время в секундах, после которого никакие команды не выполняются. По умолчанию время не ограничено.

Время ожидания блокировки

Установите время в секундах, в течение которого команда ожидает снятия блокировки. По умолчанию время не ограничено.

Параметр LockTimeout в IndexOptimize использует оператор установки SET LOCK_TIMEOUT в SQL Server.

Серьезность сообщения блокировки

Установите серьезность тайм-аутов блокировки и взаимоблокировок.

Значение Описание
10 Это информационное сообщение.< /td>
16 Это сообщение об ошибке. Это значение по умолчанию.

Разделитель строк

Укажите разделитель строк. По умолчанию разделителем строк является запятая.

Порядок базы данных

Укажите порядок базы данных.

Параллельные базы данных

Обрабатывать базы данных параллельно.

Значение Описание
Y Обработка баз данных параллельно.
N Обрабатывать базы данных по одной. Это значение по умолчанию.

Вы можете обрабатывать базы данных параллельно, создав несколько заданий с одинаковыми параметрами и добавив параметр @DatabasesInParallel = 'Y'.

Запись в таблицу

Значение Описание
Y Записывать команды в таблицу.< /td>
N Не записывать команды в таблицу. Это значение по умолчанию.

Выполнить

Выполнение команд. По умолчанию команды выполняются нормально. Если для этого параметра задано значение N, то команды печатаются только.

Значение Описание
Y Выполнить команды. Это значение по умолчанию.
N Только команды печати.

Примеры

А. Проверить целостность всех пользовательских баз данных

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKDB'

Б. Проверить физическую целостность всех пользовательских баз данных

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKDB',
@PhysicalOnly = 'Y'

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

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKDB',
@NoIndex = 'Y'

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

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKDB',
@ExtendedLogicalChecks = 'Y'

Е. Проверить целостность файловой группы PRIMARY в базе данных AdventureWorks

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'AdventureWorks',
@CheckCommands = 'CHECKFILEGROUP',
@FileGroups = 'AdventureWorks.PRIMARY'

Ф. Проверьте целостность всех файловых групп, кроме файловой группы PRIMARY в базе данных AdventureWorks

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKFILEGROUP',
@FileGroups = 'ALL_FILEGROUPS, -AdventureWorks.PRIMARY'

Г. Проверить целостность таблицы Production.Product в базе AdventureWorks

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'AdventureWorks',
@CheckCommands = 'CHECKTABLE',
@Objects = 'AdventureWorks.Production.Product'

Х. Проверить целостность всех таблиц кроме таблицы Production.Product в базе данных AdventureWorks

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKTABLE',
@Objects = 'ALL_OBJECTS, -AdventureWorks.Production.Product'

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

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKALLOC'

Дж. Проверить непротиворечивость каталога всех пользовательских баз данных

ВЫПОЛНИТЬ dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKCATALOG'

Выполнение

Хранимые процедуры можно выполнять из шагов задания T-SQL или из шагов задания CmdExec с помощью sqlcmd и параметра -b.

Версия SQL Server Тип задания
SQL Server 2008 и 2008 R2 в Windows Этапы задания CmdExec с sqlcmd и параметром -b
SQL Server 2012, 2014, 2016 и 2017 в Windows Задание T-SQL шаги или шаги задания CmdExec с sqlcmd и параметром -b
SQL Server 2017 в Linux шаги задания T-SQL
Управляемый экземпляр базы данных Azure SQL Этапы задания T-SQL

В SQL Server 2005, 2008 и 2008 R2 существует проблема, заключающаяся в том, что шаг задания T-SQL перестает выполняться после первой ошибки. Используйте шаги задания CmdExec с sqlcmd и параметром -b в этих версиях.

Читайте также: