由不同寫入器管理的元件之間的相依性

在某些情況下,來自某個寫入器的資料相依于另一個寫入器所管理的資料。 在這些情況下,您應該從這兩個寫入器備份或還原資料。

VSS 透過明確寫入器元件相依性和 IVssWMDependency 介面的概念來處理此問題。

寫入器會在使用 IVssCreateWriterMetadata::AddComponentDependency 方法建立寫入器元資料檔案時新增一或多個相依性。 寫入器會傳遞其管理) 之相依元件的名稱和邏輯路徑 (方法,以及名稱與邏輯路徑,以及 寫入器類別 識別碼 (GUID,識別其相依元件) 的類別。

建立之後,此相依性會通知要求者在任何備份或還原作業期間,相依性元件及其相依性的目標都必須參與。

指定的元件可以有多個相依性,這需要它及其所有相依目標一起參與備份和還原。

相依元件和/或目標 (其相依性的) 可以 明確隱含 地包含在備份或還原作業中。

明確寫入器元件相依性機制不應該用來在相同寫入器上的兩個元件之間建立相依性。 選取規則可以更有效率地提供相同的功能,而不會有迴圈相依性的風險。

例如, IVssCreateWriterMetadata::AddComponentDependency 可用來定義元件 writer (Data (與寫入器類別識別碼 X 之寫入器類別識別碼 X 之寫入器 MyWriter 邏輯路徑 「」) 「) 的寫入器相依性。 (雖然有多個具有相同類別識別碼的寫入器可以同時在系統上, 因為 VSS.) 下的系統上,邏輯路徑和元件名稱的組合是唯一的,所以會避免混淆

寫入器只要呼叫 IVssCreateWriterMetadata::AddComponentDependency ,即可將多個相依性新增至指定的元件,並重複來自不同寫入器的不同元件。 檢查VSS_COMPONENTINFO結構的cDependencies成員,即可找到指定元件相依的其他元件數目。

寫入器或要求者會使用IVssWMComponent::GetDependency擷取IVssWMDependency介面的實例。 IVssWMDependency會傳回管理相依性目標群組件的寫入器元件名稱、邏輯路徑和類別識別碼。

相依性機制不會指定相依元件與其相依性目標之間的任何特定喜好設定順序。 如上所述,所有相依性都表示每當指定的元件進行備份或還原時,也必須備份或還原相依的元件或元件。 確切的相依性實作取決於備份應用程式。

例如,在上述案例中,元件寫入器Data (邏輯路徑 「」) 取決於元件 InternetConnector (邏輯路徑 「Connections」) 。 要求者可以使用下列其中一種方式來解譯此專案:

  • 如果選取了相依元件 writerData, (隱含或明確) 進行備份或還原,要求者必須隱含或明確選取 () 其相依性的目標 internetData
  • 如果未選取其相依性 internetData 的目標進行備份,則不應該選取相依元件 writerData。

不過,在開發相依性支援時,要求者開發人員應該注意,寫入器無法判斷其其中一個元件是否為相依性的目標。

宣告遠端相依性

分散式應用程式是一種應用程式,可設定為一次使用一或多部電腦。 應用程式通常會在一或多部應用程式伺服器電腦上執行,並與 (通訊,但可能或可能不會實際在一或多部資料庫伺服器電腦上執行) 。 此設定有時稱為多系統部署。 通常相同的應用程式也可以設定為在執行應用程式伺服器和資料庫伺服器的單一電腦上執行。 這類設定稱為單一系統部署。 在這兩個組態中,應用程式伺服器和資料庫伺服器各有自己的獨立 VSS 寫入器。

在多系統部署中,如果應用程式寫入器所管理的元件相依于資料庫伺服器寫入器所管理的遠端元件,這稱為遠端相依性。 (單一系統部署相反地,只有本機相依性。)

作為多系統部署的範例,請考慮使用SQL Server資料庫伺服器作為資料存放區的應用程式伺服器。 包含網頁元件、Web 內容檔案和 IIS 中繼基底的應用程式特定資料位於一或多部電腦上,稱為前端網頁伺服器。 實際的 SQL 資料存放區,包括 Config 資料庫和多個 Content 資料庫,位於一或多部其他電腦上,稱為後端資料庫伺服器。 每個前端網頁伺服器都包含相同的應用程式特定內容和組態。 每個後端資料庫伺服器都可以裝載任何 Content 資料庫或 Config 資料庫。 應用程式軟體只會在前端網頁伺服器上執行,而不是在資料庫伺服器上執行。 在此設定中,應用程式的 VSS 寫入器與 SQL 寫入器所管理的元件具有遠端相依性。

寫入器可以藉由呼叫 AddComponentDependency 方法宣告遠端相依性,方法是在前面加上 「\\RemoteComputerName\」,其中 RemoteComputerName 是遠端元件所在電腦的名稱,指向 wszOnLogicalPath 參數中的邏輯路徑。 RemoteComputerName的值可以是GETComputerNameEx函式所傳回的 IP 位址或電腦名稱稱。

Windows Server 2003: 在 Windows Server 2003 Service Pack 1 (SP1) 之前,寫入器無法宣告遠端相依性。

若要識別相依性,要求者會呼叫IVssWMDependency介面的GetWriterIdGetLogicalPathGetComponentName方法。 要求者必須檢查 GetComponentNamepbstrComponentName 參數中傳回的元件名稱。 如果元件名稱以 「\\」 開頭,要求者必須假設它指定遠端相依性,且 「\\」 後面的第一個元件是寫入器呼叫AddComponentDependency時所指定的RemoteComputerName。 如果元件名稱不是以 「\\」 開頭,要求者應該假設它指定本機相依性。

如果有遠端相依性,要求者必須在備份本機組件時備份遠端元件。 若要備份遠端元件,要求者應該在遠端電腦上具有代理程式,而且應該在遠端電腦上起始備份。

建構遠端相依性

請務必瞭解相依性不是本身的元件。 必須有元件才能保存相依性。

下列範例示範兩種方式來建構一組相依性。

Example 1:
    Writer 1
        Component A
            File A
            File B
            Dependency (SQL/MSDE Writer, Component X, "\")
            Dependency (SQL/MSDE Writer, Component Y, "\")

Example 2:
    Writer 2
        Component A
            File A
            File B
        Component B
            Dependency (SQL/MSDE Writer, Component X, "\")
            Dependency (SQL/MSDE Writer, Component Y, "\")

在範例 1 中,相依性會由元件 A 保留。因為只能選取元件,而不是個別檔案,因此以這種方式建構元件 A 的相依性,需要一律同時備份和還原整個元件和相依性。 它們無法個別備份或還原。

在範例 2 中,個別元件 (元件 A 和 B) 保存每個相依性。 在此情況下,可以獨立選取這兩個元件,因此可以獨立備份和還原。 以此方式建構相依性,可讓分散式應用程式更有彈性地管理其遠端相依性。

支援遠端相依性

要求者可以提供遠端相依性的完整或部分支援。

若要提供完整支援,要求者應該在備份和還原期間執行下列動作。

在備份時,要求者必須在前端 (本機) 電腦上啟動備份、判斷存在的相依性,以及多工緩衝處理其他備份作業以擷取後端資料庫。 要求者必須等到遠端電腦上的後端備份作業完成之後,才能呼叫 IVssBackupComponents::SetBackupSucceededIVssBackupComponents::BackupComplete 方法。 如果要求者等到後端元件的備份完成,再呼叫 BackupComplete之前,這會為實作其他增強功能的寫入器產生更容易復原的備份,例如在備份期間實作拓撲鎖定。 下列程式概述要求者應該執行的動作:

  1. 在本機電腦上,要求者會呼叫 IVssBackupComponents::InitializeForBackupIVssBackupComponents::GatherWriterMetadataIVssBackupComponents::P repareForBackupIVssBackupComponents::D oSnapshotSet 方法。
  2. 本機陰影複製完成之後,但在備份完成之前,要求者會將要求傳送至遠端電腦上的代理程式,以多工緩衝處理其他備份作業。
  3. 在遠端電腦上,要求者的代理程式會呼叫 InitializeForBackupGatherWriterMetadataPrepareForBackupDoSnapshotSetSetBackupSucceededBackupComplete來執行多工緩衝備份順序。
  4. 當要求者的代理程式已完成遠端電腦上的多工緩衝處理作業時,要求者會呼叫 SetBackupSucceedededBackupComplete 來完成備份順序。

在還原時,要求者必須啟動涉及本機 (本機) 電腦的還原、選取要還原的元件及其相依性,然後呼叫IVssBackupComponents::P restore方法傳送PreRestore事件。 要求者接著應該在遠端電腦上多工緩衝處理後端還原作業,並在後端還原完成時呼叫 IVssBackupComponents::P ostRestore 方法。 這項需求可讓前端寫入器更充分掌控還原體驗,以及整體更好的系統管理員使用者體驗。 由於每個系統的備份不會同時發生于同一時間點,因此前端寫入器必須執行後端資料的一些清除。 在上述「宣告遠端相依性」中所討論的範例應用程式中,寫入器應該在還原其中一個後端資料庫完成之後起始網站重新對應或重新編制索引。 若要這樣做,寫入器必須在前端伺服器上接收事件。 下列程式概述要求者應該執行的動作:

  1. 在本機電腦上,要求者會呼叫 IVssBackupComponents::InitializeForRestoreGatherWriterMetadataIVssBackupComponents::SetSelectedForRestore (或 IVssBackupComponentsEx::SetSelectedForRestoreEx) 和 PreRestore
  2. 在 PreRestore階段完成之後,但在PostRestore階段開始之前,要求者會藉由將要求傳送至遠端電腦上的代理程式,來緩衝處理其他還原作業。
  3. 在遠端電腦上,要求者的代理程式會呼叫 InitializeForRestoreGatherWriterMetadataSetSelectedForRestorePreRestoreSetFileRestoreStatus (或 SetSelectedForRestoreEx) 和 PostRestore來執行多工緩衝還原作業。
  4. 當要求者的代理程式完成遠端電腦上的多工緩衝處理作業時,要求者會呼叫 IVssBackupComponents::SetFileRestoreStatusPostRestore來完成還原順序。

若要提供遠端相依性的部分支援,要求者必須遵循遠端相依性並將它們納入備份中,但前兩個程式中詳述的前端和後端系統上的事件順序則不需要。 對於僅實作部分支援的要求者,要求者應該參考寫入器應用程式的備份/還原檔,以瞭解可支援哪些案例。