ライター エラーと拒否権
ライターは、さまざまなプログラム上の理由で失敗する可能性があります。 この場合、進行中のバックアップ、復元、またはシャドウ コピー操作を拒否するには、ハンドラー メソッドの 1 つで CVssWriter::SetWriterFailure メソッド (CSVsWriter::OnFreeze、CVssWriter::OnPreRestore など) を呼び出し、TRUE を返します。 また、IVssComponentEx::SetPrepareForBackupFailureMsg、IVssComponentEx::SetPostSnapshotFailureMsg、IVssComponent::SetPreRestoreFailureMsg、IVssComponent::SetPostRestoreFailureMsg メソッドを使用して、特定のハンドラー メソッドのエラー状態に応じてエラー メッセージ文字列を設定することもできます。 要求者は拒否権を受け入れるか、または拒否権を無視してバックアップを続行できます。
要求者は、生成する各イベントの後にライターの状態 (IVssBackupComponents::GatherWriterStatus と IVssBackupComponents::GetWriterStatus を使用) をチェックする必要があります。
場合によっては、これらのエラーからエラー メッセージを取得できます ( IVssComponentEx::GetPrepareForBackupFailureMsg を使用して、 IVssComponent::GetPreRestoreFailureMsg、 IVssComponentEx::GetPostSnapshotFailureMsg、および IVssComponent::GetPostRestoreFailureMsg メソッド)、またはライターがメタデータを設定することを選択できます (エラー状態情報を含む IVssComponent::SetRestoreMetadata および IVssComponent::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 デスクトップ エンジン (MSDE) ライターです。
VSS_E_WRITER_STATUS_NOT_AVAILABLEは、ライターが使用可能なバックアップセッションと復元セッションの最大数に達している可能性があり、システムのビジー状態が少ない場合に再試行が機能する可能性があることを示します。
VSS_E_WRITERERROR_OUTOFRESOURCES または VSS_E_WRITERERROR_TIMEOUT では、再試行する前にシステムの負荷を減らすことが推奨される場合があります
VSS_E_WRITERERROR_NONRETRYABLE または VSS_E_WRITER_NOT_RESPONDING は、VSS を使用してデータをバックアップしようとするのを妨げるほど、ライター エラーが非常に深刻であることを示している可能性があります。
どのライターと、どのコンポーネントによって生成されるかに応じて、バックアップ アプリケーションが拒否またはエラーの後に中止する必要はありません。
たとえば、要求者は、シャドウ コピーの意図がアプリケーション A をバックアップすることであり、バックアップ アプリケーション B のライターから拒否権を受け取ったと判断する場合があります。この場合、拒否権を無視しながらアプリケーション A をバックアップし続けるのは完全に受け入れられます。
ライター拒否権の例を次に示します。
- シャドウ コピーの作成中にアクティビティを中断できなかった場合、ライターはシャドウ コピー作成プロセスを拒否します。 これは、書き込み操作が Freeze 状態の間に発生したため、シャドウ コピーが無効になる可能性が高くなることを示します。
- バックアップ アプリケーションはボリューム C: のみのシャドウ コピーを要求しました。ライターは、C: と D: のシャドウ コピーがデータをバックアップすることを決定します。 この場合、ライターは拒否します。 バックアップ アプリケーションはメタデータを調べて、ライターが無視されるか、シャドウ コピー作成プロセスが中止され、後で再起動されるかを判断できます。