寫入器錯誤和 Vetoes

寫入器可能會因為許多程式設計原因而失敗。 發生這種情況時,應該在其中一個處理常式 (方法中呼叫 CVssWriter::SetWriterFailure 方法,以執行進行中的備份、還原或陰影複製作業,例如 CVssWriter::OnFreezeCVssWriter::OnPreRestore) 並傳回 TRUE。 它也可以選擇性地使用 IVssComponentEx::SetPrepareForBackupFailureMsgIVssComponentEx::SetPostSnapshotFailureMsgIVssComponent::SetPreRestoreFailureMsgIVssComponent::SetPostRestoreFailureMsg 方法來回應失敗狀況的錯誤訊息字串。 要求者可以接受 veto 或繼續備份,忽略 veto。

要求者應該使用 IVssBackupComponents::GatherWriterStatusIVssBackupComponents::GetWriterStatus 來檢查寫入器狀態 (,) 它所產生的每個事件。

在某些情況下,您可以使用 IVssComponentEx::GetPrepareForBackupFailureMsgIVssComponent::GetPreRestoreFailureMsg從這些失敗 (擷取錯誤訊息, IVssComponentEx::GetPostSnapshotFailureMsgIVssComponent::GetPostRestoreFailureMsg 方法) ,或寫入器可以選擇使用 IVssComponent::SetRestoreMetadataIVssComponent::SetBackupMetadata 來設定 (中繼資料) 。 如需示範如何檢視這類錯誤訊息的範例程式碼,請參閱 IVssComponentEx::GetPrepareForBackupFailureMsg

根據錯誤狀態,要求者或其操作員可以重新開機備份和陰影複製,並修改備份作業或系統的狀態。

例如,假設 GetWriterStatus 傳回下列專案:

  • VSS_E_WRITERERROR_INCONSISTENTSNAPSHOT 建議要求者可能會將其他磁片區新增至陰影複製

  • VSS_E_WRITERERROR_RETRYABLE 表示重試而不重新設定可能會運作。 如果寫入器在重試數次之後繼續傳回錯誤,請嘗試重新開機裝載寫入器的服務。 下列寫入器裝載于 VSS 服務中:登錄寫入器、COM+ 類別註冊資料庫寫入器、陰影複製優化寫入器,以及自動化系統復原 (ASR) 寫入器。 如果寫入器屬於在其本身進程中裝載寫入器的應用程式,請嘗試重新開機應用程式。

    Windows Server 2003 和 Windows XP:下列寫入器裝載于 VSS 服務中:登錄寫入器、COM+ 類別註冊資料庫寫入器、應用程式事件記錄寫入器,以及 Microsoft SQL Server 2000 Desktop Engine (MSDE) 寫入器。

  • VSS_E_WRITER_STATUS_NOT_AVAILABLE表示寫入器可能已達到可用備份和還原會話的數目上限,而且當系統較不忙碌時,重試可能會正常運作。

  • VSS_E_WRITERERROR_OUTOFRESOURCESVSS_E_WRITERERROR_TIMEOUT 可能會建議在重試之前減少系統負載

  • VSS_E_WRITERERROR_NONRETRYABLEVSS_E_WRITER_NOT_RESPONDING 可能表示寫入器錯誤嚴重,以免嘗試使用 VSS 備份其資料。

視哪個寫入器及哪些元件產生它們而定,備份應用程式不一定需要在 Veto 或錯誤之後中止。

例如,要求者可能會決定陰影複製的意圖是備份應用程式 A,而且已從寫入器收到備份應用程式 B 的 veto。在此情況下,完全可以接受繼續備份應用程式 A,同時忽略 veto。

以下是寫入器 veto 的範例:

  • 寫入器在建立陰影複製期間無法暫停其活動時,會暫止陰影複製建立程式。 這表示陰影複製在凍結狀態期間發生寫入作業,所以陰影複製不正確機率很高。
  • 備份應用程式只要求磁片區 C: 的陰影複製,而寫入器會判斷 C: 和 D: 的陰影複製是要備份其資料。 在此情況下,寫入器將會 veto。 備份應用程式可能會檢查中繼資料,並判斷是否會忽略寫入器,或中止陰影複製建立程式,稍後重新開機。