Как программно восстановить базу данных ESENT после грязного завершения работы?

#esent

Вопрос:

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

К сожалению, похоже, что нет такой функции, как «JetRecoverDatabase», или флага, который я мог бы передать функциям инициализации или присоединения для автоматического восстановления. Есть JetRestore , но для этого требуется позвонить JetBackup в какой-то момент до сбоя приложения.

Потеря данных-это нормально для моего приложения, но было бы неплохо, если бы хотя бы некоторые из существующих данных можно было восстановить в случае сбоя (примечание: мое приложение не просто постоянно выходит из строя. В настоящее время я тестирую различные сбои, которые могут возникнуть). То, что я сейчас делаю, — это просто удаляю базу данных и воссоздаю ее заново, но опять же, восстановление некоторых данных предпочтительнее.

Есть несколько хороших примеров того, как использовать ESENT, поэтому это была крутая кривая обучения. Пара примеров кода, которые я нашел на GitHub для этой конкретной ошибки, просто говорят о запуске esentutl.exe в базе данных. Хотя я полагаю, что мог бы выполнить программу, чтобы попытаться исправить это, я бы предпочел сделать это программно.