依寫入器定義元件

元件是由寫入器元資料檔案中的寫入器定義並具現化,以回應備份作業開始時的 識別事件 , (請參閱寫入器元資料檔案時備份 初始化 概觀) 概觀。

在寫入器元資料檔案中建立元件時,使用 IVssCreateWriterMetadataIVssCreateWriterMetadata::AddComponent時,寫入器必須指定:

  • 元件是否 可選取以進行備份
  • 元件類型
  • 元件名稱 (不僅在指定的 寫入器實例 內,而且在所有寫入器實例中都必須是唯一的)
  • 元件是否有任何與其相關聯的寫入器特定中繼資料
  • 寫入器是否需要在成功備份後通知

寫入器可以選擇性地指定:

  • 元件的 邏輯路徑 (不僅在指定的寫入器實例內,還必須在所有寫入器實例之間是唯一的)
  • 元件描述 (或標題)
  • 要與 GUI 搭配使用的圖示,以指出元件

元件不需要實際包含任何檔案。 這種空白或「虛擬」元件在組織元件時很有用。 這類元件可用來定義 元件集 和寫入器的元件 (請參閱 元件邏輯路徑) 。

設定元件組織

設定元件的可選取性 (備份的可選取性,以及還原) 和其邏輯路徑的可選取性,可讓寫入器強制或選擇性地將某些元件包含在備份或還原作業中,以及將元件分組為元件集,並將元件分組成元件,其中一個可選取的元件會作為整個群組的進入點。

這些群組的成員資格會決定備份和還原作業期間將使用哪些元件。 使用「可選取」來表示備份作業的可選取,而且可選取用於還原作業的還原作業,開發人員應該瞭解:

  • 如果備份指定的寫入器所管理的任何元件,則要求者必須 明確包含 所有不可選取的 元件 ,而不需要在其 邏輯路徑 中選取的上階到備份元件檔,並將這些元件還原為群組。
  • 要求者可以選擇在備份和還原作業期間明確將可選取的元件新增至備份元件檔;新增之後,必須備份或還原元件。
  • 如果元件是可選取的,元件及其所有 子元件 (由邏輯路徑所定義,) 形成元件集,這可視為可選擇性參與備份和還原作業的單一單位。
  • 要求者永遠不會在備份和還原作業期間明確將具有可選取上階的不可選取元件、元件集中的子元件新增至其備份元件檔。 如果明確新增了可選取的上階,則必須 隱含包含 這些元件,在此情況下,這些元件必須備份或還原 (請參閱 要求者) 使用元件
  • 具有可選取上階的可選取元件仍為 子元件 , (元件集的成員) ,而且如果作業中明確包含可選取的上階,則可能會隱含包含該元件。 在此情況下,其資訊不會新增至備份元件檔。 如果作業中未包含其可選取的上階,則可以明確選取元件以包含在作業中,在此情況下,其資訊會包含在備份元件檔中。
  • 不論任何可選取的上階狀態為何,備份中隱含包含子群組件都可以明確包含在還原作業中。 還原作業期間所包含的任何可選取還原子元件,都必須將其資訊新增至備份元件檔。
  • 產生 PrepareForBackupPreRestore 事件之前,未明確將任何元件新增至備份元件檔的寫入器,將不會收到任何進一步的 VSS 事件。

如需詳細資訊,請參閱 使用可選取性和邏輯路徑

將檔案新增至元件

元件包含檔案資訊,其格式為包含:

  • 元件中檔案的根目錄。
  • 元件中檔案的檔案規格。
  • 旗標,指出元件的規格是否遞迴。

視元件類型而定, 這可以是資料庫或檔案群組,而且在資料庫元件的情況下 (,) 要載入的檔案是資料或記錄檔,寫入器會呼叫 IVssCreateWriterMetadata::AddFilesToFileGroupIVssCreateWriterMetadata::AddDatabaseFilesIVssCreateWriterMetadata::AddDatabaseLogFiles 來新增檔案集。

使用這些函式時,您應該指定要新增至檔案集的檔案,如下所示:

  • wszPath:這是目錄的路徑,其中包含要新增至檔案集的檔案。 如果 bRecursive 參數設定為 truewszPath 參數會指定要以遞迴方式周遊的目錄階層,而且應該重新建立所有目錄,包括空白目錄。
  • wszFilespec:此字串會指定要新增至檔案集的每個目錄中的檔案。

例如,假設下列目錄結構存在:

C:\\Directory1\\File1.txt C:\\Directory1\\File2.txt C:\\Directory1\\Directory2\\File1.txt C:\\Directory1\\Directory2\\File2.txt C:\\Directory1\\Directory3\\

如果寫入器為 wszPath指定 「C:\Directory1」、 wszFilespec的 「 File1.*」 和 bRecursive則要求者應包含下列檔案:

C:\\Directory1\\File1.txt C:\\Directory1\\Directory2\\File1.txt

如果寫入器改為為 wszPath指定 「C:\Directory1」、 wszFilespec為 「*」 ,而bRecursive則要求者應包含下列檔案:

C:\\Directory1\\File1.txt C:\\Directory1\\File2.txt C:\\Directory1\\Directory2\\File1.txt C:\\Directory1\\Directory2\\File2.txt

如果寫入器針對 wszPath指定 「C:\Directory1」、 wszFilespec為 「 *」 ,而 bRecursive則要求者應包含下列檔案:

C:\\Directory1\\File1.txt C:\\Directory1\\File2.txt

在上述所有範例中,每當寫入器針對bRecursive指定true時,應該重新建立空白目錄 C:\Directory1\Directory3\ 。

針對新增至檔案群組元件的檔案集,如果目前磁片上的檔案不在寫入器考慮適當或預設位置的情況下,寫入器可以選擇新增替代路徑。 在這些情況下,檔案集的路徑定義包含檔案的一般位置,以及應該還原檔案的位置,而替代路徑則包含要備份的檔案目前位置。

在備份時,檔案集中的所有檔案都必須存在。 要求者必須假設備份組中列出的所有檔案都是備份的必要檔案,而且如果遺漏任何檔案,備份將會失敗。 請注意,當 為 wszFilespec 參數指定 「*」 時,它可以比對零個或多個檔案。

請注意,這類寫入器元資料檔案屬性做為替代位置對應、明確包含和排除的檔案,以及還原方法是在寫入器層級設定,而不是元件層級。 (如需詳細資訊,請參閱 使用寫入器元資料檔案.)

備份和還原作業的元件定義

還原和備份作業一定會產生 識別事件,而且備份和還原都會由相同的 CVssWriter::OnIdentify 方法處理。

在備份作業期間,要求者會使用寫入器 CVssWriter::OnIdentify 方法傳回的資訊,來判斷系統上有哪些寫入器存在,然後判斷要備份哪些檔案。

在還原作業期間,寫入器的 CVssWriter::OnIdentify 事件所傳回的資訊只會用來建立系統上目前存在的寫入器身分識別和狀態;不會使用還原期間產生的檔案規格資訊。 相反地,儲存在備份時間的寫入器元資料檔案會用來取得此資料。

在備份作業期間產生之後,寫入器元件資訊以及其餘寫入器資訊都會儲存為可擷取以支援還原作業。 要求者通常會負責儲存此資訊。