Поделиться через


Метод CVssWriter::OnFreeze (vswriter.h)

Метод OnFreeze вызывается модулем записи при получении события Freeze в начале замораживания теневой копии. Модуль записи использует этот метод для выполнения операций, необходимых для участия в заморозке или для применения права вето на замораживание.

OnFreeze — это чистый виртуальный метод. Он не реализуется базовым классом CVssWriter и должен реализовываться производными классами.

Синтаксис

bool OnFreeze();

Возвращаемое значение

Реализация этого метода должна возвращать значение true , за исключением случаев неустранимой ошибки. При возникновении неустранимой ошибки метод должен вызвать метод CVssWriter::SetWriterFailure , чтобы предоставить описание сбоя, прежде чем возвращать значение false. Если возникает некритичная ошибка, метод должен по-прежнему вызывать SetWriterFailure, но возвращатьзначение true. Если ошибка вызвана временной проблемой, метод должен указать VSS_E_WRITERERROR_RETRYABLE в вызове Метода SetWriterFailure.

Во всех случаях, когда происходит сбой, метод должен записывать событие в журнал событий, чтобы сообщить точную причину сбоя.

Комментарии

В этом методе приложение записи должно переводить себя в четко определенное состояние, совместимое с операцией VSS.

В этом методе модуль записи должен завершить окончательную подготовку для поддержки создания теневой копии. После создания теневой копии модуль записи получит событие Thaw и сможет продолжить обычные операции.

По умолчанию время ожидания между событиями заморозки и оттепели составляет 60 секунд. То есть, если событие Thaw не получено с истечением времени ожидания, будет создано событие Abort. Записи могут изменить время ожидания во время инициализации, задав для аргумента dwTimeoutFreeze значение CVssWriter::Initialize.

Способ подготовки модуля записи к теневой копии в значительной степени зависит от приложения, в котором она размещена. Некоторые приложения могут позволить себе хранить все операции записи и сохранять данные в абсолютно согласованном состоянии в течение этого периода. Другие приложения, как и многие базы данных, не могут остановить работу в течение этого периода, но могут выполнять действия, такие как контрольные точки их состояния, что может сократить время восстановления для теневой копии, созданной в этом окне.

Если модуль записи не может поместить себя в четко определенное состояние для параметра Freeze, происходит следующее:

  1. OnFreeze возвращает значение false, наложив вето на теневое копирование.
  2. Модуль записи вызывает CVssWriter::SetWriterFailure , чтобы предоставить описание сбоя.
  3. Событие Abort будет создано при возврате значения OnFreezeсо значением false.
Записи никогда не должны вызывать исключение из этого метода или любого другого метода обратного вызова CVssWriter(Ex)::OnXxx .

Время ожидания для обработки события Freeze обычно относительно короткое по сравнению с периодом ожидания для обработки события PrepareForSnapshot . Поэтому разработчикам следует избегать длительных операций в этом методе. Обычно это может быть приостановка ведения журнала модулем записи.

Рекомендуется, чтобы все трудоемкие операции обрабатывались CVssWriter::OnPrepareSnapshot.

После этого метода будет вызываться CVssWriter::OnThaw или CVssWriter::OnAbort .

Если этот метод вызывает метод CVssWriterEx2::GetSessionId, CVssWriter::SetWriterFailure или CVssWriterEx2::SetWriterFailureEx , он должен делать это в том же потоке, который вызвал этот метод. Дополнительные сведения см. в разделе Обработка событий записи.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header vswriter.h (включая Vss.h, VsWriter.h)
Библиотека VssApi.lib

См. также раздел

CVssWriter

CVssWriter::OnAbort

CVssWriter::OnPreRestore

CVssWriter::OnPrepareBackup

CVssWriter::OnPrepareSnapshot

CVssWriter::OnThaw

CVssWriter::SetWriterFailure