Создание набора для восстановления
Набор восстановления — это список всех восстанавливаемых файлов и расположений, в которых они будут восстановлены.
Как и при создании списка файлов резервных копий (см. раздел Создание резервного набора данных), алгоритм определения файлов для восстановления и места их восстановления должен выполняться по экземпляру записи по экземпляру модуля записи, а также по компонентной основе для каждого экземпляра модуля записи.
Необходимо связать каждый файл на носителе резервного копирования с компонентом, который им управлял. Кроме того, необходимо получить метод восстановления управляющего компонента, сведения о целевом объекте восстановления файла и сопоставления его альтернативного расположения (если таковые есть).
Для некоторых файлов также могут потребоваться операции с частичными файлами или целевые объекты для восстановления.
Проверив возможность выбора компонентов для резервного копирования и логических путей (см. раздел Работа с возможностью выбора и логическими путями), инициатор запроса может определить структуру компонентов операции резервного копирования, которую он собирается восстановить.
После установки структуры компонентов резервной копии инициатор запроса может получить сведения о наборе файлов каждого компонента (спецификация файла, путь и флаг рекурсии). Затем инициатор запроса может создать набор для восстановления.
Файлы, для которых требуются частичные файлы или целевые объекты , предоставляют собственные подробные инструкции по восстановлению (см. раздел Расположения резервного копирования и восстановления, отличные от расположения по умолчанию), которые затем можно добавить в набор восстановления.
Типичный механизм создания набора восстановления для файлов, не участвующих в операциях с частичными файлами или целевых объектов , может выполнять следующие действия:
Получите список файлов на носителе резервной копии, включая исходные пути к ним.
Определите класс и компонент модуля записи для каждого файла на носителе резервного копирования, выполнив следующие действия.
Для каждого модуля записи получите сведения о компоненте (IVssWMComponent), вызвав метод IVssExamineWriterMetadata::GetComponent для всех его компонентов.
Для каждого компонента получите сведения о дескрипторове файла (IVssWMFiledesc) для каждого набора файлов, содержащихся в компоненте (в зависимости от типов данных, содержащихся в компоненте, путем вызова IVssWMComponent::GetFile, IVssWMComponent::GetDatabaseFile и IVssWMComponent::GetDatabaseLogFile.
Сравните имя и путь файла со сведениями о пути, содержащимися в дескрипторе файла для каждого набора файлов в компоненте (возвращаемых IVssWMFiledesc::GetPath, IVssWMFiledesc::GetFilespec и IVssWMFiledesc::GetRecursive) со сведениями о пути к сохраненным файлам, чтобы определить, является ли файл частью компонента.
Примечание
Следует игнорировать любые альтернативные сведения о расположении в дескрипторе файла, полученном из компонента, найденного в сохраненном документе метаданных модуля записи (то есть IVssWMFiledesc::GetAlternateLocation не возвращает значение NULL). Это альтернативное расположение является альтернативным путем, который используется только во время резервного копирования.
Получите сведения о альтернативном сопоставлении для каждого файла на носителе резервного копирования:
- Альтернативные сопоставления файлов хранятся на уровне модуля записи, а не компонента, и извлекаются из объекта IVssWMFiledesc , возвращаемого IVssExamineWriterMetadata::GetAlternateLocationMapping.
- Вы можете определить, есть ли у определенного файла альтернативное сопоставление расположения, проверив путь и имя файла в спецификации пути и файла, которые содержатся в сопоставлении альтернативного расположения, возвращаемом IVssExamineWriterMetadata::GetAlternateLocationMapping, с помощью IVssWMFiledesc::GetPath, IVssWMFiledesc::GetFilespec и IVssWMFiledesc::GetRecursive. (Если во время резервного копирования использовался альтернативный путь, эти сведения следует игнорировать во время этого проверка при обработке восстановления.)
- Если дескрипторы файла и альтернативного расположения совпадают, используйте метод IVssWMFiledesc::GetAlternateLocation объекта IVssWMFiledesc , возвращаемого IVssExamineWriterMetadata::GetAlternateLocationMapping , чтобы найти альтернативное расположение, в которое можно восстановить файл.
- Сопоставление альтернативного расположения, полученное таким образом, не обязательно согласуется с сопоставлением, возвращенным из документа компонентов резервного копирования методом IVssComponent::GetAlternateLocationMapping. Значение IVssWMFiledesc::GetAlternateLocation не являетсяпустыми, только если для файла используется альтернативное сопоставление расположения.
С помощью этих сведений о файлах и компонентах можно запросить документ компонентов резервного копирования, чтобы получить сведения о целевых объектах восстановления, параметрах и новых расположениях восстановления для каждого файла. Эти сведения можно объединить со списком файлов, компонентов и альтернативных расположений.
Файлы, не защищенные средствами записи, можно выбирать в соответствии с традиционными операциями восстановления.
На этом этапе инициатор запроса должен иметь список всех файлов, необходимых для восстановления, а также инструкции по их восстановлению и может начать восстановление файлов на основе:
- Будет ли использоваться альтернативное сопоставление расположения или исходное расположение файла в качестве целевого объекта для восстановления, зависит от наличия или отсутствия файла в этом целевом расположении и параметров компонентов VSS_RESTORE_TARGET и VSS_RESTOREMETHOD_ENUM (см. раздел Расположения резервного копирования и восстановления, отличные от расположения резервного копирования и восстановления по умолчанию).
- Успешность попытки восстановления зависит от таких проблем, как разрешения доступа целевого объекта, блокировка целевых файлов и другие обычные проблемы, связанные с восстановлением файлов.
- Успешное или неудачное восстановление заданного компонента для заданного экземпляра модуля записи должно быть сохранено в документе Компонентов резервного копирования путем вызова IVssBackupComponents::SetFileRestoreStatus. Это сделает эту информацию доступной для авторов при обработке события PostRestore.
- Если файл восстанавливается в альтернативное сопоставление расположения, инициатор запроса должен вызвать IVssBackupComponents::AddAlternativeLocationMapping. Это позволит авторам определить, были ли их файлы восстановлены в альтернативных расположениях с помощью IVssComponent::GetAlternateLocationMapping.
- Инициаторам запроса может потребоваться восстановить файлы в совершенно новых расположениях. Это допустимо, но инициатор запроса должен указать это средству записи с помощью метода IVssBackupComponents::AddNewTarget .