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


Функция JetExternalRestore

Применимо к: Windows | Windows Server

Функция JetExternalRestore

Функция JetExternalRestore восстанавливает внешнюю резервную копию, созданную с помощью ИНТЕРФЕЙСов API внешних резервных копий, и задает диапазон номеров файлов журнала для воспроизведения в процессе восстановления. Это называется жестким восстановлением, которое похоже на обратимое восстановление, выполняемое функцией JetInit , но отличается от этого.

JET_ERR JET_API JetExternalRestore(
  __in          JET_PSTR szCheckpointFilePath,
  __in          JET_PSTR szLogPath,
  __in_opt      JET_RSTMAP* rgrstmap,
  __in          long crstfilemap,
  __in          JET_PSTR szBackupLogPath,
  __in          long genLow,
  __in          long genHigh,
  __in          JET_PFNSTATUS pfn
);

Параметры

szCheckpointFilePath

Путь к файлу контрольной точки, используемому во время восстановления, если szTargetInstanceCheckpointPath не указан или уже имеет активный или запущенный экземпляр.

szLogPath

Путь или каталог для журналов для заключительного этапа (отмены) восстановления и, возможно, для журналов наката. Этот путь может совпадать с szBackupLogPath.

rgrstmap

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

crstfilemap

Количество записей в параметре массива rgrstmap .

szBackupLogPath

Путь к каталогу, в котором восстанавливаются файлы журнала. Это журналы, которые были считаны во время внешней последовательности резервного копирования. Этот путь может совпадать с szLogPath.

genLow

Наименьший номер файла журнала, который необходимо воспроизвести из szBackupLogPath. Должна сохраняться полная точность неподписанного длинного номера, но в текущих версиях подсистемы это шестнадцатеричное число в диапазоне от 0x00000 до 0xFFFFF. В будущих версиях это может измениться.

genHigh

Самый высокий номер файла журнала, который необходимо воспроизвести из szBackupLogPath. Должна сохраняться полная точность длинного без знака, но в текущих версиях подсистемы это шестнадцатеричное число в диапазоне от 0x00000 до 0xFFFFF. В будущих версиях это может измениться.

Pfn

Обратный вызов состояния для отчета о ходе восстановления.

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

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errOutOfMemory

Операция завершилась сбоем, так как для ее завершения было выделено недостаточно памяти.

JET_errInvalidParameter

Один из предоставленных параметров содержал непредвиденное значение или значение, которое не имело смысла в сочетании со значением другого параметра. Это может произойти для JetExternalRestore и т. д., если szTargetCheckpointPath и szTargetInstanceLogPath либо не указаны, либо оба не указаны. Это значит, что они должны совпадать, и оба должны быть указаны или оба не указаны.

JET_errDatabaseCorrupted

Это означает, что база данных повреждена или нераспознанный файл.

JET_errFileNotFound

Операция завершилась сбоем, так как ей не удалось открыть запрошенный файл, так как его не удалось найти по указанному пути.

JET_errInvalidPath

Операция завершилась сбоем, так как не удалось найти указанный путь.

JET_errRestoreOfNonBackupDatabase

Эта ошибка возвращается, если файл базы данных, указанный во время восстановления, не является базой данных, резервное копирование в которую было выполнено с помощью внешней резервной копии.

JET_errStartingRestoreLogTooHigh

Эта ошибка возвращается, если один из файлов журнала в szBackupLogPath имеет ниже поколение журнала, указанное в genLow или pLogInfo.ulGenLow.

JET_errEndingRestoreLogTooLow

Эта ошибка возвращается, если один из файлов журнала в szBackupLogPath имеет выше поколение журнала, указанное в genHigh или pLogInfo.ulGenHigh.

JET_errBadRestoreTargetInstance

Указанный szTargetInstanceLogPath не принадлежит инициализированному экземпляру. Эта ошибка будет возвращена только в Windows XP и более поздних версиях.

JET_errRunningInOneInstanceMode

Ядро СУБД не может выполнять внешнее восстановление или жесткое восстановление в режиме одного экземпляра. Эта ошибка будет возвращена только в Windows XP и более поздних версиях.

При успешном выполнении все базы данных из rgrstmap полностью восстанавливаются и находятся в чистом или согласованном состоянии. На этом этапе базу данных можно повторно подключить к существующему экземпляру.

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

Комментарии

Чтобы понять, как работает "трудное" восстановление, необходимо понимать, что есть три этапа восстановления, а второй этап может состоять из двух частей. На первом этапе для обеспечения согласованности резервной копии базы данных требуются журналы (или можно использовать начальный набор добавочных журналов). На этапе 2 все доступные дополнительные журналы наката используются для обеспечения согласованности базы данных. Также можно воспроизвести дополнительные журналы наката. Этап III — это этап отмены восстановления.

Этап I. Выполняется воспроизведение набора журналов, которые необходимо восстановить, чтобы база данных была приведена в согласованное состояние (или исходный набор файлов журнала). По сути, это воспроизведение набора файлов журнала, которые не являются необязательными для восстанавливаемых баз данных. Если в этом диапазоне журналов отсутствуют, восстановление завершится ошибкой. Эти журналы следует поместить в каталог, указанный в параметре szBackupLogPath .

Этап II. При необходимости могут существовать некоторые наборы файлов журналов, которые являются файлами журналов наката, которые поступают из добавочных или разностных резервных копий, а также из файлов журнала активного экземпляра. В случае с файлами журналов из добавочных или разностных резервных копий файлы журнала можно поместить в каталоги, указанные в параметрах szBackupLogPath или szTargetInstanceLogPath , причем первый — рекомендуемый каталог. Журналы, используемые для этапа наката (этап II), должны поступать из той же серии журналов, которая воспроизводилась на этапе I, и должны постоянно увеличивать номера журналов без пробелов в журналах этапа I. Чтобы база данных была полностью обновлена с файлами журнала, которые в настоящее время используются активным экземпляром, необходимо указать параметры szTargetInstanceLogPath и szTargetInstanceCheckpointPath . Это можно сделать, даже если к этому набору журналов подключены другие базы данных.

Этап III. На заключительном этапе восстановления выполняется откат всех незафиксированных транзакций, что требует создания новых файлов журнала и обновления файла контрольных точек. Этот этап иногда называют "отменой". Путь к файлу контрольных точек, используемый на этом этапе, соответствует расположению журнала этапа III, то есть, если szLogPath используется для этапа III, будет использоваться szCheckpointFilePath , если szTargetInstanceLogPath используется для этапа III восстановления szTargetInstanceCheckpointPath .

Чтобы понять, как работают пути, используйте следующую блок-схему:

ESE_Documentation_ese1 ESE_Documentation_ese1

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Профессиональная.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлено в Esent.h.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

Юникод

Реализовано как JetExternalRestoreW (Юникод) и JetExternalRestoreA (ANSI).

См. также:

JET_ERR
JET_PFNSTATUS
JET_RSTMAP
JET_LOGINFO
JetBeginExternalBackup
JetInit