バックアップ初期化の概要
バックアップのこの段階では、ライターとリクエスターの両方が初期化され、内部データ構造が入力され、バックアップが指定され、 IVssBackupComponents::GatherWriterMetadata への必要な呼び出しを介してライター/リクエスター通信が確立されます。 詳細については、「 VSS でのバックアップ処理の概要」を参照してください。
次の表は、バックアップの初期化に必要なアクションとイベントのシーケンスを示しています。
Requester アクション | イベント | ライター アクション |
---|---|---|
IVssBackupComponents インターフェイスを作成し、それを初期化してバックアップを管理します (「CreateVssBackupComponents、IVssBackupComponents::InitializeForBackup」を参照)、必要に応じてシステムのライターを有効または無効にします。 | なし | なし |
必要に応じて、シャドウ コピー操作のコンテキストを設定し、必要に応じて、サポートされているプロバイダーとシャドウ コピーについてシステムにクエリを実行します ( IVssBackupComponents::SetContext、 IVssBackupComponents::Query を参照)。 | なし | なし |
リクエスターは、バックアップ操作と復元操作の処理に関する追加情報を提供できます ( 「IVssBackupComponents::SetBackupState」を参照してください) | なし | なし |
ライターとの非同期連絡先を開始します ( IVssBackupComponents::GatherWriterMetadata を参照) | 識別 | ライター メタデータ ドキュメントを作成します (「 ライター メタデータ ドキュメントの操作」、 CVssWriter::OnIdentify、 IVssCreateWriterMetadata を参照) |
バックアップ初期化中のリクエスター アクション
IVssBackupComponents オブジェクトは、1 つのバックアップにのみ使用できます。 したがって、リクエスターは、 IVssBackupComponents インターフェイスの解放を含め、バックアップの最後まで続行する必要があります。 バックアップを途中で終了する必要がある場合、リクエスターは IVssBackupComponents::AbortBackup を呼び出してから 、IVssBackupComponents オブジェクトを解放する必要があります (詳細については、「 VSS 操作の中止 」を参照してください)。 IVssBackupComponents インターフェイスを再開しないでください。
通常、リクエスターのバックアップ コンポーネント ドキュメントは空として初期化されます。 格納されているバックアップ コンポーネント ドキュメントは、 IVssBackupComponents::InitializeForBackup が呼び出されたときに読み込むことができます。通常は、転送可能なシャドウ コピー ボリュームをサポートしています。 この場合、ライターとリクエスターの通信は、以下で説明する通信とは若干異なります。 (詳細については、「 トランスポート可能なシャドウ コピーボリュームのインポート 」を参照してください)。
シャドウ コピー セットにボリュームを追加するには、最初に IVssBackupComponents::SetContext を呼び出して、シャドウ コピー操作のコンテキストを設定する必要があります。 このメソッドが呼び出されない場合は、シャドウ コピーの既定のコンテキスト (VSS_CTX_BACKUP) が使用されます。 シャドウ コピー コンテキストの設定の詳細については、「 シャドウ コピー コンテキストの構成」を参照してください。
バックアップ前にセットアップの完了を開始するには、リクエスターが IVssBackupComponents::SetBackupState を呼び出す必要があります。 これを行うことで、リクエスターはライターに次のことを示します。
- バックアップの種類 ( VSS_BACKUP_TYPE で定義)
- バックアップに起動可能なシステム状態が含まれているかどうか
- リクエスターが個々のコンポーネントの選択をサポートするか、ボリューム全体をバックアップするか。
バックアップと復元の操作に参加するすべての要求者は、常に IVssBackupComponents::GatherWriterMetadata を呼び出す必要があります。 このメソッドは、ライターがメタデータ ドキュメントを作成する応答として、VSS Identify イベントを生成することによってライターとリクエスターの通信を開始します。
IVssBackupComponents::GatherWriterMetadata を呼び出す前に、リクエスターには、IVssBackupComponents::EnableWriterClasses、IVssBackupComponents::D isableWriterInstances、IVssBackupComponents::D isableWriterClasses を使用して、特定の特定のライターおよびライター クラスを明示的に有効または無効にする機会があります (既定では、すべてのクラスが有効になっています)。 IVssBackupComponents::GatherWriterMetadata が呼び出されると、これらの呼び出しは無効になります。
IVssBackupComponents::GatherWriterMetadata を呼び出す前に、システム上のライターのリストを取得する方法がないため、要求者は IVssBackupComponents の 2 つ目のインスタンスを作成して削除してリストを取得することを検討できます。
IVssBackupComponents::GatherWriterMetadata の完了後、IVssBackupComponents::GatherWriterStatus を呼び出す必要はありません。 呼び出しによって生成された Identify イベントの処理に失敗したライターは、 IVssBackupComponents::GetWriterMetadataCount および IVssBackupComponents::GetWriterMetadata によって検出されたメタデータを提供するライターの一覧には含まれません (ライター の状態の決定に関するページを参照)。
バックアップの初期化中のライター アクション
Identify イベントに応答して、VSS は各ライターの仮想ハンドラー メソッド CVssWriter::OnIdentify を呼び出します。 ライターは、 CVssWriter::OnIdentify の既定の実装をオーバーライドし、 IVssCreateWriterMetadata インターフェイスを使用して、ライター メタデータ ドキュメントを作成します。
現在のリクエスター以外のアプリケーション (たとえば、システム アプリケーション) では、ライターで処理する必要がある Identify イベントを生成できることに注意してください。 さらに、ライターが、Identify イベントを生成したアプリケーション を CSVsWriter::OnIdentify 内から決定する方法はありません。
これは、ライターがバックアップ操作の処理中に複数の Identify イベントを受信する可能性があるため、ライターが CVssWriter::OnIdentify ハンドラーに状態情報を設定しないでください。
代わりに、 CVssWriter::OnIdentify は、ライターのライター メタデータ ドキュメントを作成するために一貫したアルゴリズムを実行する必要があります。特に、ライターがドキュメントを作成した後、リクエスターもライターも変更できないためです。 この時点から、これは読み取り専用のドキュメントです。
つまり、ライターに関連付けられているコンポーネントの数と種類 (各 コンポーネント の一部であるファイル)、およびライターが Identify イベントの処理から戻った後にバックアップ操作または復元操作からのファイルの明示的な除外を変更することはできません。
VSS に参加しているすべてのライターは、次の操作を行う必要があります。
- IVssCreateWriterMetadata::SetRestoreMethod を使用してライターによって管理されるすべてのコンポーネントの復元方法を示します。
- IVssCreateWriterMetadata::AddComponent を使用して、少なくとも 1 つのコンポーネントを追加します (コンポーネントの仕様の詳細については、「ライターによるコンポーネントの定義」を参照してください)。
ライターは、IVssCreateWriterMetadata::AddFilesToFileGroup、IVssCreateWriterMetadata::AddDatabaseFiles、IVssCreateWriterMetadata::AddDatabaseFiles、または IVssCreateWriterMetadata::AddDatabaseLogFiles を使用して、ファイル セット (パス、ファイル指定、再帰フラグの組み合わせ) を特定のコンポーネントに追加することによって、バックアップまたは復元操作に参加するファイルを示します (「コンポーネントへのファイルの追加」を参照)。
ライターには、ファイルが追加されていないコンポーネントである 1 つ以上の空のコンポーネントを含めることもできます。 これらは、ライターのコンポーネントを整理する場合に非常に便利です。 ( 「コンポーネントの論理パス」を参照してください)。
ライターは IVssCreateWriterMetadata::AddExcludeFiles を使用して、ファイルがバックアップに含まれるのを明示的に防ぎます。 この明示的な除外は、ワイルドカード文字を使用して含めるファイルを指定できるため便利です (「 ファイル リストの指定を除外する」を参照してください)。 除外ファイル リストは、コンポーネント ファイル リストよりも優先されることに注意してください。
IVssCreateWriterMetadata::AddAlternateLocationMapping は、ライターのコンポーネントのいずれかに追加された指定されたファイル セットの 代替の場所マッピング を作成するために使用されます。 これらのマッピングは、ファイルの元の場所への復元が不可能または望ましくない場合に、ファイルの復元中に使用されます。 (「実際のファイルの復元と既定以外のバックアップと復元の場所の概要」を参照してください)。
バックアップ ファイル セットはライター メタデータ ドキュメントで指定されているため、後で変更することはできません。 したがって、ファイル セットの定義に、名前またはワイルドカード文字を使用してバックアップに必要なすべてのファイルが含まれるように、ライターをコーディングする必要があります。 これは、Identify イベントの後に作成される可能性のあるファイルを含む場合があります。