可選取性和使用元件屬性
使用隱含選取的元件需要存取備份元件檔和寫入器元資料檔案。
不這麼做的原因有兩個:
- 儲存在備份元件檔中的元件資料 (由 IVssComponent 介面表示,) 缺少元件檔案集資訊的存取權—檔案規格、路徑和遞迴旗標。 (請參閱 使用備份元件 Document.)
- 只有備份期間明確 包含在 備份元件檔中的元件,才會直接將其資訊儲存在備份元件檔中。 要求者和寫入器必須使用 可透過 IVssComponent 介面取得的資訊,以及 邏輯路徑 資訊和寫入器元資料檔案,以取得隱 含內含 元件的相關資訊和設定屬性。
元件 邏輯路徑 中所討論的「MyWriter」 案例可用來說明備份的可選取性。
元件名稱 | 邏輯路徑 | 可選取進行備份 | 可選取以進行還原 | 明確包含 |
---|---|---|---|---|
「可執行檔」 | "" | N | N | Y |
「ConfigFiles」 | 「可執行檔」 | N | N | Y |
「LicenseInfo」 | "" | Y | N | Y |
"Security" | "" | Y | N | Y |
「UserInfo」 | "Security" | N | N | N |
「Certificates」 | "Security" | N | N | N |
「writerData」 | "" | Y | Y | Y |
「Set1」 | 「writerData」 | N | Y | N |
「Jan」 | 「writerData\Set1」 | N | N | N |
「Dec」 | 「writerData\Set1」 | N | N | N |
「Set2」 | 「writerData」 | N | Y | N |
「Jan」 | 「writerData\Set2」 | N | N | N |
「Dec」 | 「writerData\Set2」 | N | N | N |
「Query」 | 「writerData\QueryLogs」 | N | N | N |
「Usage」 | 「writerData」 | Y | Y | N |
「Jan」 | 「writerData\Usage」 | N | N | N |
「Dec」 | 「writerData\Usage」 | N | N | N |
備份組中隱含包含的元件
當檢查寫入器的寫入器元資料檔案 (在備份期間看到 IVssBackupComponents::GetWriterMetadata) 時,要求者應該儲存所有元件、其 邏輯路徑及其檔案集資訊的清單。
需要檔案集和排除的檔案資訊,才能明確或隱含地判斷任何 (或隱含) 包含元件的檔案清單。
對於沒有可選取備份上階的備份元件不可選取,而且對於未定義 元件集的備份元件,則只有檔案集和排除的檔案資訊才能識別所有元件的備份候選項目,因為這些元件不會定義子元件。
針對定義元件集的備份元件明確包含可選取的,檔案集和排除定義元件和所有 子元件的 檔案資訊都必須用來選取要備份的檔案。
這表示只有使用 IVssWMComponent 介面實例檢查寫入器中繼資料,才能找到元件 「可執行檔」、「ConfigFiles」 和 「LicenseInfo」 的備份組。
不過,如果寫入器Data 明確包含在備份中,您必須檢查其 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」 中的一個檔案 (邏輯路徑 「writerData\Set2」) 是 「writerData」 所定義的元件集成員。 如果其中一個 「Jan」 的檔案無法備份,則要求者會使用 「writerData」 的資訊 (其名稱 「writerData」、其路徑 「」,以及其元件類型) 當做引數設定 IVssBackupComponents::SetBackupSucceeded, 以 false 表示元件集失敗。
同樣地, IVssComponent::GetBackupSucceededed 針對 IVssComponent 介面的 IVssComponent 介面實例所傳回的狀態,不僅適用于 「writerData」,也適用于其所有子元件。
此外,如果寫入器選擇使用 「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」 和遞迴等於 true) 。
請注意,在此情況下,檔案集資訊必須完全符合 IVssCreateWriterMetadata::AddFilesToFileGroup、 IVssCreateWriterMetadata::AddDatabaseFiles或 IVssCreateWriterMetadata::AddDatabaseLogFiles 用來將檔案新增至 Jan 的檔案集資訊。
同樣地,如果寫入器想要將導向目標新增至路徑為 「c:\ethel」 的檔案,並將 「lucy.dat」 命名為 「Jan」 (,且邏輯路徑 「writerData\Set2」) ,它會使用對應至 「writerData」 但 「Jan」 檔案資訊的 IVssComponent 實例。
還原集中隱含包含的元件
如果元件可以選取進行還原,則隱含包含在備份中的元件可以明確包含在還原中。 如使用 還原和子元件的可選取性中所述,這類元件會使用 IVssBackupComponents::AddRestoreSubcomponent 方法新增至備份元件檔。
不過,這不會建立 IVssComponent 介面的新實例,也無法直接透過 IVssBackupComponents 介面存取元件。
相反地,明確包含用於還原但隱含用於備份的元件,必須透過對應至定義元件集之元件集的 IVssComponent 介面實例進行存取。
例如,若要明確包含還原 「Set1」,這是備份元件 「writerData」 的可選取子元件,您可以呼叫 「writerData」實例的IVssComponent::GetRestoreSubcomponent方法,以取得它的相關資訊。