Восстановить полную внешнюю резервную копию ESENT

Я написал код, который создает полные резервные копии моей базы данных ESENT, используя API JetBeginExternalBackup.

Следуя указаниям MSDN, я создал резервную копию каждого файла, возвращенного JetGetAttachInfo и JetGetLogInfo.

Я сделал резервную копию, стер старую базу данных и скопировал данные резервной копии в папку базы данных. Движок БД не смог запуститься, код ошибки JetInit - "JET_errMissingLogFile".

Я проверил резервную копию, она содержит только файл базы данных и файлы журнала "XXXXX.log". В нем отсутствует текущий файл журнала (я использую циклическое ведение журнала, кстати).

Есть ли способ восстановить такую ​​резервную копию?

Я не хочу использовать JetExternalRestore API, потому что он слишком сложный: мне не нужно восстанавливать в другое место, я не понимаю, почему есть 3 входных папки, а не 2, и я не знаю значений для предоставления в аргументах genLow и genHigh.

Мне нужны внешние резервные копии: база данных ESENT используется ASP.NET на удаленном сервере, и я создаю резервную копию через Интернет.

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

Заранее спасибо!

PS У меня нет прав для охвата процессов на моем веб-сервере, поэтому использование eseutil.exe не вариант.

1 ответ

Решение

Распакуйте все резервные копии в одну папку.

Возьмите имя вашего основного файла базы данных. Заменить расширение на .pat, Создать файл нулевой длины с таким именем, например database.pat,

После этого простого шага вызовите API JetRestoreInstance, он восстановит резервную копию из этой папки.

Другие вопросы по тегам