準備還原的概觀
在準備還原時,要求者會使用預存的寫入器元資料檔案搭配其本身擷取的備份元件檔,來判斷要還原的內容及方式。 如需詳細資訊,請參閱 在 VSS 下處理還原的概觀。
在選取還原候選元件之後,目前在系統上執行的寫入器會存取要求者的備份元件檔。 寫入器會使用此存取權來指出如何因還原而造成執行服務的最低困難。
完成此動作之後,要求者有足夠的資訊可判斷需要還原哪些檔案,以及還原檔案的位置和方式。 (如需詳細資訊,請參閱 產生還原集。)
下表顯示準備還原作業所需的動作和事件順序。
要求者動作 | 事件 | 寫入器動作 |
---|---|---|
從備份元件檔中擷取有關備份作業 中明確包含 之元件的資訊 (請參閱 IVssBackupComponents::GetWriterComponents) 檢查擷取的寫入器元資料檔案,以取得備份中明確包含之元件的詳細資料,以及任何尋找 隱含的 子元件。 (請參閱 IVssExriterMetadata, IVssWMComponent.) |
無 | 無 |
選取要還原的元件和元件集 (請參閱 IVssBackupComponents::SetSelectedForRestore 和 IVssBackupComponents::AddRestoreSubcomponent.) | 無 | 無 |
要求者可讓寫入器更新備份元件檔,並選擇性地將任何特殊的還原選項傳達給寫入器。 (請參閱 IVssBackupComponents::SetRestoreOptions、 IVssBackupComponents::AddNewTarget和 IVssBackupComponents::P reRestore.) | PreRestore | 寫入器會決定參與還原、準備要還原的檔案,並視需要選擇性地修改備份元件檔。 (請參閱CVssWriter::OnPreRestore、IVssComponent、IVssComponent::IsSelectedForRestore、IVssComponent::GetRestoreOptions、IVssComponent::SetRestoreTarget、IVssComponent::SetRestoreMetadata、IVssComponent::AddDirectedTarget.) |
要求者會等候寫入器以IVssAsync處理PreRestore事件。 它也應該驗證寫入器狀態。 (請參閱 IVssBackupComponents::GatherWriterStatus、 IVssBackupComponents::GetWriterStatus.) | 無 | 無 |
還原準備期間的要求者動作
若要判斷哪些元件是要還原的候選元件,要求者必須執行下列動作:
- 建立用來進行備份的元件和 元件集 結構。
- 檢查元件的 可選取性以進行還原。
- 使用可選取性指導方針 (使用還原和子元件的可選取性) 來選擇要包含的元件。
- 使用元件 檔案集 資訊來判斷備份媒體上的哪些檔案必須還原。
若要這樣做,要求者必須檢查預存備份元件檔中 明確包含 的元件。 此元件資訊會使用 IVssBackupComponents::GetWriterComponents,以逐寫入器方式取得,其會傳回 IVssWriterComponentsExt 介面的實例,可從中擷取 IVssComponent 介面的寫入器資訊和實例。
如要求者 () 使用 元件 的其他位置所述,備份元件檔和 IVssComponent 介面並未包含足夠的資訊來支援備份。 因此,要求者必須使用 IVssEx,WriterMetadata 來檢查對應的儲存寫入器元資料檔案 (請參閱 寫入器識別資訊) 。
每個寫入器管理的元件數目是由 IVssEx,WriterMetadata::GetFileCounts傳回。 然後,要求者可以使用 IVssEx,riterMetadata::GetComponent 來取得寫入器所管理之每個元件的 IVssWMComponent 介面。
藉由檢查元件的備份和邏輯路徑的可選取性, (請參閱使用可選取性和邏輯路徑) ,要求者能夠識別定義備份時間元件集 (明確包含元件) 的元件,以及這些集合的子元件成員 (隱含的元件) 。
要求者使用 IVssBackupComponents::SetSelectedForRestore 或 IVssBackupComponents::AddRestoreSubcomponent,透過備份元件檔指出。 方法的選擇取決於元件最初備份的方式及其 還原的可選取性。 針對還原明確包含的這些元件會指定隱含包含的其他元件 (請參閱 使用還原和子元件的可選取性 以取得詳細資料) 。
要求者可能明確包含目前執行中的寫入器元件,以使用 IVssBackupComponents::SetSelectedForRestore 或 IVssBackupComponents::AddRestoreSubcomponent 進行還原。 在此情況下,該寫入器不會收到還原作業其餘部分的任何 VSS 事件。
明確使用 IVssBackupComponents::SetSelectedForRestore 或 IVssBackupComponents::AddRestoreSubcomponents::AddRestoreSubcomponent 來選取目前未執行的寫入器元件會傳回VSS_E_OBJECT_NOT_FOUND錯誤。 如需還原遺漏寫入器資料的資訊,請參閱 沒有寫入器的還原 。
若要讓寫入器擁有要採取哪些動作的完整資訊,可透過要求者呼叫 IVssBackupComponents::SetRestoreOptions 和IVssBackupComponents::SetAdditionalRestores,分別傳送累加還原的寫入器特定還原選項和指示給寫入器。
此時,要求者已完成其準備,並藉由呼叫IVssBackupComponents::P reRestore來產生PreRestore事件,讓寫入器能夠準備實際還原。
還原準備期間的寫入器動作
使用虛擬方法CVssWriter::OnPreRestore處理PreRestore事件時,會發生還原作業的寫入器準備。 預設實作只會傳回而不採取任何動作。 寫入器可以選擇覆寫預設實作,以透過下列方式執行更多控制:
事件處理常式 CVssWriter::OnPreRestore 會接收 IVssWriterComponents的實例,其可從中取得其元件在備份期間明確包含在備份元件檔中的 IVssComponent 介面。
備份作業中隱含包含之子元件的相關資訊,並使用對應至定義備份元件集之元件的IVssComponent實例,明確包含在還原中。
IVssComponent::IsSelectedForRestore方法可用來判斷是否要還原備份元件的明確包含 。
若要判斷還原中是否明確包含備份子元件,寫入器會使用 IVssComponent::GetRestoreSubcomponent。
寫入器應該檢查每個元件中的 檔案集 ,並判斷是否需要採取動作來支援還原。 寫入器需要評估其目前的檔案是否要覆寫,或是否需要還原到新位置。 動作可以包含下列各項:
- 取得及處理控管還原作業的任何寫入器或要求者特定選項 (,請參閱 IVssComponent::GetRestoreOptions)
- 關閉並讓任何目前開啟的檔案成為可寫入檔案
- 例如,更新還原目標 (,以強制還原至替代位置對應) 。 請參閱 IVssComponent::SetRestoreTarget。
- 透過私人中繼資料與要求者通訊 (請參閱 IVssComponent::SetRestoreMetadata)
- 指示透過重新對應 導向目標 的定義來還原檔案, (請參閱 IVssComponent::AddDirectedTarget)
使用的 IVssComponent 實例,可能是元件在備份期間明確包含在備份元件檔中,或是定義其成員集之元件的實例, (請參閱 使用還原和子元件的可選取性) 。