選択性とコンポーネント プロパティの操作
暗黙的に選択されたコンポーネントを操作するには、バックアップ コンポーネント ドキュメントとライター メタデータ ドキュメントの両方にアクセスする必要があります。
これには、次の 2 つの理由があります。
- バックアップ コンポーネント ドキュメント ( IVssComponent インターフェイスで表される) に格納されているコンポーネント データは、コンポーネント ファイル セット情報 (ファイルの指定、パス、再帰フラグ) にアクセスできない。 ( 「バックアップ コンポーネントの使用」ドキュメントを参照してください)。
- バックアップ中にバックアップ コンポーネント ドキュメント に明示的に含まれる コンポーネントのみが、その情報をバックアップ コンポーネント ドキュメントに直接格納します。 要求者とライターは、 IVssComponent インターフェイスで使用できる情報を、 論理パス 情報とライター メタデータ ドキュメントと組み合わせて使用して、 暗黙的に含まれる コンポーネントに関する情報を取得し、プロパティを設定する必要があります。
「 コンポーネントの論理パス 」で説明されている "MyWriter" ケースを使用して、バックアップの選択性を示すことができます。
コンポーネント名 | 論理パス | バックアップ用に選択可能 | 復元用に選択可能 | 明示的に含まれる |
---|---|---|---|---|
"実行可能ファイル" | "" | × | × | Y |
"ConfigFiles" | "実行可能ファイル" | N | × | Y |
"LicenseInfo" | "" | Y | N | Y |
"Security" | "" | Y | N | Y |
"UserInfo" | "Security" | × | × | × |
"証明書" | "Security" | × | × | × |
"writerData" | "" | Y | Y | Y |
"Set1" | "writerData" | N | Y | N |
"Jan" | "writerData\Set1" | N | × | × |
"Dec" | "writerData\Set1" | N | × | × |
"Set2" | "writerData" | × | Y | N |
"Jan" | "writerData\Set2" | N | × | × |
"Dec" | "writerData\Set2" | N | × | × |
"クエリ" | "writerData\QueryLogs" | N | × | × |
"Usage" | "writerData" | Y | Y | N |
"Jan" | "writerData\Usage" | N | × | × |
"Dec" | "writerData\Usage" | N | × | × |
バックアップ セットに暗黙的に含まれるコンポーネント
バックアップ中にライターのライター メタデータ ドキュメント ( 「IVssBackupComponents::GetWriterMetadata」を参照) を調べるときに、リクエスターは、すべてのコンポーネント、論理 パス、およびファイル セット情報の一覧を格納する必要があります。
(明示的または暗黙的に) 含まれるコンポーネントのファイルの一覧を決定するには、ファイル セットと除外されたファイル情報が必要です。
バックアップの先祖に対して選択できないバックアップ コンポーネントと、 コンポーネント セットを定義しないバックアップ コンポーネントに対して選択可能なバックアップ コンポーネントの場合、これらのコンポーネントはサブコンポーネントを定義していないため、バックアップのすべてのコンポーネントの候補を識別するために、ファイル セットと除外されたファイル情報のみが必要になります。
コンポーネント セットを定義するバックアップ コンポーネントに対して明示的に含める選択可能な場合、ファイル セットと除外ファイル情報は、定義コンポーネントとすべての サブコンポーネント の両方で使用してバックアップ用のファイルを選択する必要があります。
つまり、コンポーネント "Executables"、"ConfigFiles"、および "LicenseInfo" のバックアップ セットは、 IVssWMComponent インターフェイスのインスタンスを使用して、これらのコンポーネントのライター メタデータのみを調べることによってのみ見つかります。
ただし、writerData がバックアップに明示的に含まれている場合は、 IVssWMComponent インターフェイスのインスタンスと "Set1" のインスタンスを調べる必要があります。 "Jan" (論理パス "writerData\Set1")、"Dec" (論理パス "writerData\Set1")、"Set2"、"Jan" (論理パス "writerData\Set2")、"Dec" (論理パス "writerData\Set2")、"Query"、"Usage"、"Jan" (論理パス "writerData\Usage")、および "Dec" (論理パス "writerData\Usage")。
これを行うには、リクエスターはまず、コンポーネント "writerData" (論理パス "") が選択可能であることを識別する必要があります。 その後、ライターによって管理されている他のすべてのコンポーネントをスキャンして、論理パスの最初の要素が "writerData" であるかどうかを判断する必要があります。 論理パスの先頭メンバーとして "writerData" を持つこれらのコンポーネントは、"writerData" のサブコンポーネントとして識別され、明示的に選択されると暗黙的に選択されます。
実際、同様のスキャンを実行して、論理パスの先頭メンバーとして "LicenseInfo" を持つコンポーネントがないため、"LicenseInfo" にサブコンポーネントがないことを確認する必要があります。
VSS ではこのメカニズムが複雑であるため、多くのリクエスター ライターは、明示的に追加されたコンポーネントと暗黙的に追加されたコンポーネントの両方のコンポーネントとバックアップ セット情報を格納するための独自の構造を作成すると便利な場合があります。
暗黙的に含まれるコンポーネントのプロパティ
復元操作とバックアップ操作では、 IVssComponent インターフェイスと IVssBackupComponents インターフェイスのインスタンスを使用して、コンポーネントに関する情報を取得し、コンポーネントのプロパティを設定または変更します。 ただし、明示的に含まれるコンポーネントのみが 、IVssComponent インターフェイスのインスタンスを持つか、 IVssBackupComponents インターフェイスからアクセスできます。
一部のプロパティは、スコープ内のコンポーネント セット全体です。 これらのプロパティには、次のものが含まれます。
- バックアップと復元の状態:
IVssBackupComponents::SetBackupSucceeded
IVssComponent::GetBackupSucceeded
IVssBackupComponents::SetFileRestoreStatus
IVssComponent::GetFileRestoreStatus
- バックアップと復元のオプション:
IVssBackupComponents::SetBackupOptions
IVssComponent::GetBackupOptions
IVssBackupComponents::SetRestoreOptions
IVssComponent::GetRestoreOptions
- エラー メッセージ:
IVssComponent::SetPostRestoreFailureMsg
IVssComponent::SetPreRestoreFailureMsg
IVssComponent::SetPostRestoreFailureMsg
IVssComponent::SetPreRestoreFailureMsg
- ターゲットの復元:
IVssComponent::SetRestoreTarget
IVssComponent::GetRestoreTarget
- バックアップ スタンプ:
IVssComponent::SetBackupStamp
IVssComponent::GetBackupStamp
- その他のメタデータ:
IVssComponent::SetRestoreMetadata
IVssComponent::GetRestoreMetadata
IVssComponent::SetBackupMetadata
IVssComponent::GetBackupMetadata
したがって、コンポーネント セットの定義メンバーの IVssComponent インターフェイスのインスタンスを使用するか、 IVssBackupComponents メソッドを使用して定義メンバーの名前、型、および論理パスを使用して、すべてのコンポーネント セットのメンバーのプロパティを設定または取得します。
このため、コンポーネント セットは単位として扱われます。 たとえば、コンポーネント セットのバックアップは、すべてのコンポーネントのすべてのファイル セットのバックアップが成功した場合にのみ成功します。
前の例では、コンポーネント "Jan" 内の 1 つのファイル (論理パス "writerData\Set2") が、"writerData" で定義されたコンポーネント セットのメンバーであるとします。 "Jan" のファイルの 1 つがバックアップに失敗した場合、要求者は、コンポーネント セットの失敗を示すために、 IVssBackupComponents::SetBackupSucceed を false に設定するときに、引数として "writerData" の情報 ("writerData"、そのパス ""、およびそのコンポーネントの種類) を引数として使用します。
同様に、IVssComponent インターフェイスの "writerData" のインスタンスに対して IVssComponent::GetBackupSucceeded によって返される状態は、"writerData" だけでなく、すべてのサブコンポーネントにも適用されます。
さらに、ライターが IVssComponent の "writerData" のインスタンスの IVssComponent::SetRestoreTarget を使用して復元ターゲットを変更することを選択した 場合、"writerData" のすべてのサブコンポーネントのすべてのファイル セットの復元ターゲットが変更されます。
次のプロパティは、コンポーネント全体ではなく、特定のファイルまたはファイル セットに適用されます。
- 代替の場所マッピング:
IVssBackupComponents::AddAlternativeLocationMapping
IVssComponent::GetAlternateLocationMapping
IVssComponent::GetAlternateLocationMappingCount
- 違うファイル:
IVssComponent::AddDifferencedFilesByLastModifyTime
IVssComponent::GetDifferencedFile
IVssComponent::GetDifferencedFilesCount
- 部分ファイル:
IVssComponent::AddPartialFile
IVssComponent::GetPartialFile
IVssComponent::GetPartialFileCount
- 対象ターゲット:
IVssComponent::AddDirectedTarget
IVssComponent::GetDirectedTarget
IVssComponent::GetDirectedTargetCount
- 新しいターゲット:
IVssBackupComponents::AddNewTarget
IVssComponent::GetNewTarget
IVssComponent::GetNewTargetCount
要求者は、 IVssBackupComponents インターフェイスを使用してサブコンポーネントのこれらの機能にアクセスすると、コンポーネント セットの定義コンポーネントのコンポーネント情報を使用しますが、サブコンポーネントのファイルまたはファイル セット情報を使用します。
同様に、 プロパティに IVssComponent インターフェイスを介してアクセスできる場合は、定義するサブコンポーネントに対応するインスタンスが使用されますが、ファイルまたはファイル セットの引数はサブコンポーネントから取得されます。
たとえば、サブコンポーネント "Jan" (論理パス "writerData\Set2") にパスが "c:\fred" のファイル セットがあり、ファイル指定が "*.dat" であり、再帰フラグ true を別の場所に復元する必要があるとします。
その場合、リクエスターは IVssBackupComponents::AddAlternativeLocationMapping を呼び出し、"writerData" の情報 (コンポーネントの種類、"writeData" のコンポーネント名、論理パス "") と "Jan" のファイル セット情報 (パス "c:\fred"、ファイル仕様 "*.dat"、recursion は true) を使用します。
この場合、ファイル セット情報は 、IVssCreateWriterMetadata::AddFilesToFileGroup、 IVssCreateWriterMetadata::AddDatabaseFiles、または IVssCreateWriterMetadata::AddDatabaseLogFiles によって使用されるファイル セット情報と完全に一致して、1 月にファイルを追加する必要があることに注意してください。
同様に、ライターが "c:\ethel" のパスを持ち、"Jan" によって管理される "lucy.dat" という名前のファイルにダイレクト ターゲットを追加する場合 (論理パスは "writerData\Set2") 、"writerData" に対応する IVssComponent インスタンスを使用しますが、"Jan" のファイル情報が使用されます。
復元セットに暗黙的に含まれるコンポーネント
バックアップに暗黙的に含まれていたコンポーネントは、復元を選択できる場合は、明示的に復元に含めることができます。 「 復元とサブコンポーネントの選択性の操作」で説明したように、このようなコンポーネントは 、IVssBackupComponents::AddRestoreSubcomponent メソッドを使用してバックアップ コンポーネント ドキュメントに追加されます。
ただし、これにより 、IVssComponent インターフェイスの新しいインスタンスは作成されず、 IVssBackupComponents インターフェイスを介してコンポーネントに直接アクセスすることもできません。
代わりに、復元用に明示的に含まれているが、バックアップ用に暗黙的に含まれるコンポーネントは、バックアップ時にメンバーであるコンポーネント セットを定義したコンポーネントに対応する IVssComponent インターフェイスのインスタンスを介してアクセスする必要があります。
たとえば、バックアップ コンポーネント "writerData" の選択可能なサブコンポーネントである復元 "Set1" を明示的に含めるには、IVssComponent インターフェイスの "writerData" インスタンスの IVssComponent::GetRestoreSubcomponent メソッドを呼び出して、それに関する情報 を 取得します。