復元セットの生成
復元セットは、復元するすべてのファイルと復元先の場所の一覧です。
バックアップ ファイルの一覧を生成する場合と同様に ( 「バックアップ セットの生成」を参照)、復元するファイルと復元する場所を決定するためのアルゴリズムは、 ライター インスタンスごとにライター インスタンス を続行し、各ライター インスタンスのコンポーネントごとに続行する必要があります。
バックアップ メディア上の各ファイルを、それを管理するコンポーネントに関連付ける必要があります。 また、管理コンポーネントの 復元方法、ファイルの 復元ターゲット 情報、およびその 代替の場所マッピング (存在する場合) を取得する必要もあります。
一部のファイルでは、復元のために 部分的なファイル 操作や 転送先が 必要になる場合もあります。
バックアップパスと論理パスに対するコンポーネントの選択性を調べることで (「選択性と論理パスの操作」を参照)、リクエスターは復元するバックアップ操作のコンポーネント構造を決定できます。
バックアップのコンポーネント構造が確立されると、リクエスターは各コンポーネントの ファイル セット 情報 (ファイルの指定、パス、再帰フラグ) を取得できます。 その後、リクエスターは復元セットを生成できます。
部分ファイルまたは転送先を必要とするファイルには、独自の詳細な復元手順が用意されています (「既定以外のバックアップと復元の場所」を参照)、復元セットに追加できます。
部分的なファイル操作に関係しないファイルまたは 転送先のターゲット に対して復元セットを生成するための一般的なメカニズムは、次の手順を実行して進める場合があります。
元のパスを含むバックアップ メディア上のファイルの一覧を取得します。
次の手順を実行して、バックアップ メディア上の各ファイルの ライター クラス とコンポーネントを特定します。
ライターごとに、すべてのコンポーネントで IVssExamineWriterMetadata::GetComponent を呼び出して、コンポーネント情報 (IVssWMComponent) を取得します。
コンポーネントごとに、コンポーネントに含まれるすべてのファイル セットのファイル記述子 (IVssWMFiledesc) 情報を取得します (コンポーネントに含まれるデータの種類に応じて、 IVssWMComponent::GetFile、 IVssWMComponent::GetDatabaseFile、 および IVssWMComponent::GetDatabaseLogFile を呼び出します)。
ファイルの名前とパス情報を、コンポーネント内のファイルの各セット (IVssWMFiledesc::GetPath、IVssWMFiledesc::GetFilespec、および IVssWMFiledesc::GetRecursive によって返される) のファイル記述子に含まれるパス情報と比較して、ファイルがコンポーネントの一部であるかどうかを判断するために、格納されているファイル パス情報と比較します。
注意
格納されているライター メタデータ ドキュメント内のコンポーネントから取得されたファイル記述子内の代替の場所情報は無視する必要があります (つまり、 IVssWMFiledesc::GetAlternateLocation は NULL を返しません)。 この代替の場所は 代替パスであり、バックアップ中にのみ使用されます。
バックアップ メディア上の各ファイルの代替マッピング情報を取得します。
- 代替ファイル マッピングは、コンポーネント レベルではなくライターに格納され、IVssExamineWriterMetadata::GetAlternateLocationMapping によって返されるオブジェクト IVssWMFiledesc から取得されます。
- IVssWMFiledesc::GetPath、IVssWMFiledesc::GetFilespec、および IVssWMFiledesc::GetRecursive を使用して、IVssExamineWriterMetadata::GetAlternateLocationMapping によって返される代替の場所マッピングに含まれるパスとファイル仕様に対してファイルのパスと名前を調べて、特定のファイルに代替の場所マッピングがあるかどうかを判断できます。 (バックアップ中に代替パスが使用された場合は、復元の処理中にこのチェック中にその情報を無視する必要があります)。
- ファイルと別の場所マッピングのファイル記述子が一致する場合は、IVssExamineWriterMetadata::GetAlternateLocationMapping によって返される IVssWMFiledesc オブジェクトの IVssWMFiledesc::GetAlternateLocation メソッドを使用して、ファイルを復元できる代替の場所を見つけます。
- この方法で取得された代替の場所マッピングは、 IVssComponent::GetAlternateLocationMapping によってバックアップ コンポーネント ドキュメントから返された場所マッピングと必ずしも一致するとは限りません。 IVssWMFiledesc::GetAlternateLocation 値は、代替の場所マッピングがファイルに使用されている場合にのみ、空白以外です。
このファイルとコンポーネント情報を使用すると、バックアップ コンポーネント ドキュメントに対してクエリを実行して、各ファイルの復元ターゲット、オプション、および新しい復元場所に関する情報を取得できます。 この情報は、ファイル、コンポーネント、および別の場所の一覧と組み合わせることができます。
ライターによって保護されていないファイルは、従来の復元操作と一致する方法で選択できます。
この時点で、リクエスターには、復元する必要があるすべてのファイルの一覧と、復元方法に関する手順が必要であり、次に基づいてファイルの復元を開始できます。
- 代替の場所マッピングか、元のファイルの場所を復元のターゲットとして使用するかは、そのターゲットの場所にあるファイルの有無と、 VSS_RESTORE_TARGET と VSS_RESTOREMETHOD_ENUM のコンポーネント設定によって異なります ( 「既定以外のバックアップと復元の場所」を参照)。
- 復元の試行が成功するかどうかは、ターゲットのアクセス許可、ターゲット ファイルがロックされている場合、ファイルの復元に関するその他の従来の問題などの問題によって異なります。
- 特定のライター インスタンスの特定のコンポーネントの復元の成功または失敗は、 IVssBackupComponents::SetFileRestoreStatus を呼び出して、バックアップ コンポーネント ドキュメントに保持する必要があります。 これにより、PostRestore イベントを処理するときに、ライターが情報にアクセスできるようになります。
- ファイルが別の場所のマッピングに復元された場合、要求元は IVssBackupComponents::AddAlternativeLocationMapping を呼び出す必要があります。 これにより、ライターは、 IVssComponent::GetAlternateLocationMapping を使用してファイルが別の場所に復元されたかどうかを判断できます。
- 要求者は、ファイルを完全に新しい場所に復元することが望ましい場合があります。 これは許容されますが、要求元は IVssBackupComponents::AddNewTarget メソッドを使用してライターにこれを示す必要があります。