Выявление и устранение ошибок носителей во время резервного копирования и восстановления

Microsoft SQL Server 2005 и более поздние версии предоставляют возможность восстановить базу данных по журналу, несмотря на обнаруженные ошибки. Новый важный механизм обнаружения ошибок состоит в возможном создании контрольной суммы резервной копии, которую можно создать операцией резервного копирования и проверить операцией восстановления. Можно управлять тем, будет ли операция проверять наличие ошибок и будет ли она останавливаться или продолжаться при обнаружении ошибки. Если резервная копия содержит контрольную сумму, инструкции RESTORE и RESTORE VERIFYONLY могут выполнять проверку на наличие ошибок.

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

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

Контрольные суммы при операции BACKUP

В SQL Server существует три типа контрольных сумм: контрольная сумма страны, контрольная сумма блока журнала и контрольная сумма резервной копии. При создании контрольной суммы резервной копии инструкция BACKUP проверяет согласованность данных, считанных из базы данных, со всеми контрольными суммами или признаками обрыва страниц в этой базе.

Инструкция BACKUP может также вычислять контрольную сумму резервной копии для потока резервирования. Если на данной странице есть контрольная сумма или данные о разрыве страниц, то при резервном копировании инструкция BACKUP также проверяет для страницы контрольную сумму, идентификатор и состояние разрыва страницы. При создании контрольной суммы резервной копии операция резервного копирования не добавляет никаких контрольных сумм к страницам. Страницы копируются так, как они существуют в базе данных, они не изменяются операцией резервного копирования. Из-за дополнительной нагрузки при проверке и создании контрольных сумм резервных копий их использование может ухудшить производительность. Может пострадать как рабочая нагрузка, так и пропускная способность резервного копирования. Поэтому использование контрольных сумм резервных копий необязательно. При принятии решения о создании контрольных сумм резервных копий необходимо тщательно проконтролировать соответствующую дополнительную загрузку ЦП и влияние на остальную рабочую нагрузку системы.

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

Инструкция BACKUP никогда не изменяет исходную страницу на диске и ее содержимое.

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

  • CHECKSUM

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

    Если запрошена проверка контрольной суммы при операции резервного копирования.

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

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

      Дополнительные сведения о контрольной сумме страниц и обнаружении разрывов страниц см. в описании параметра PAGE_VERIFY инструкции ALTER DATABASE. Дополнительные сведения см. в разделе ALTER DATABASE (Transact-SQL).

    • Для возможного использования во время восстановления операция резервного копирования создает отдельную контрольную сумму резервной копии (контрольная сумма резервной копии) и записывает ее на резервный носитель вне зависимости от наличия контрольных сумм страниц.

    • Резервный набор данных помечен как содержащий контрольные суммы резервных копий (в столбце has_backup_checksums таблицы msdb..backupset). Дополнительные сведения см. в разделе backupset (Transact-SQL).

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

    Для резервных копий журнала транзакций создаются и проверяются контрольные суммы резервных копий.

  • NO_CHECKSUM

    Явно отключает проверку страниц и создание контрольных сумм резервных копий. (Это характер действия по умолчанию.)

Управление реакцией на ошибки

Если задан параметр CHECKSUMS и инструкция BACKUP обнаруживает при проверке ошибку страницы, резервное копирование приводит к ошибке. Данное поведение управляется следующими параметрами инструкции BACKUP.

  • CONTINUE_AFTER_ERROR

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

    Помечает резервный набор данных на резервном носителе как содержащий ошибки и отслеживает эту страницу в таблице suspect_pages в базе данных msdb. Дополнительные сведения см. в разделе suspect_pages (Transact-SQL).

    • Записывает эту ошибку в журнал ошибок SQL Server.

    • Помечает резервный набор данных как содержащий данный тип ошибок (в столбце is_damaged таблицы msdb.backupset). Дополнительные сведения см. в разделе backupset (Transact-SQL).

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

  • STOP_ON_ERROR

    Указывает на неудачное выполнение инструкции BACKUP, если проверка контрольной суммы выдает отрицательный результат. (Это характер действия по умолчанию.)

Контрольные суммы при операциях RESTORE и RESTORE VERIFYONLY

Если на резервном носителе есть контрольные суммы, то по умолчанию и операция RESTORE, и операция RESTORE VERIFYONLY проверяют контрольные суммы резервных копий и страниц. Если у резервной копии нет контрольной суммы, все операции восстановления продолжаются без проверок. Данное поведение объясняется тем, что без контрольной суммы резервной копии операция восстановления не может достоверно проверять контрольные суммы страниц.

Два параметра, CHECKSUM и NO_CHECKSUM, позволяют изменить поведение операций RESTORE и RESTORE VERIFYONLY при проверке контрольных сумм.

  • CHECKSUM

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

  • NO_CHECKSUM

    Явно отменяет стандартную проверку всех контрольных сумм операцией восстановления.

Управление реакцией на ошибки

Чтобы указать поведение операции восстановления при возникновении ошибки, используются следующие параметры инструкций RESTORE и RESTORE VERIFYONLY:

  • CONTINUE_AFTER_ERROR

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

  • STOP_ON_ERROR

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