Проблемы при попытке доступа / присоединения к базе данных ESE с помощью ManagedEsent

Я пытаюсь прочитать базу данных ESE (.edb), используя библиотеки ManagedEsent. Тем не менее, я получаю сообщение об ошибке во время настройки базы данных. Кажется, ошибка появляется во время присоединения базы данных (вызывая JetAttachDatabase()).

Я получаю сообщение об ошибке: "Мягкое восстановление предназначено для резервной базы данных. Вместо этого следует использовать Восстановление".

Ниже мой код:

JET_INSTANCE instance;
JET_SESID sesid;

Microsoft.Isam.Esent.Interop.SystemParameters.DatabasePageSize = 8 * 1024;

Api.JetCreateInstance(out instance, Guid.NewGuid().ToString());
Api.JetInit(ref instance);

JET_DBID dbid;
JET_COLUMNID columnid;
JET_TABLEID tableid;
JET_COLUMNDEF columndef = new JET_COLUMNDEF();

Api.JetBeginSession(instance, out sesid, null, null);

Api.JetAttachDatabase(sesid, @"Blah.edb", AttachDatabaseGrbit.None);

Api.OpenDatabase(sesid, @"Blah.edb", out dbid, OpenDatabaseGrbit.None);

Исключение, которое я получаю:

Microsoft.Isam.Esent.Interop.EsentSoftRecoveryOnBackupDatabase
Soft recovery is intended on a backup database. Restore should be used instead
at Microsoft.Isam.Esent.Interop.Api.Check(Int32 err) in e:\src\codeplex_svn\codeplex\EsentInterop\Api.cs:line 2894
at Microsoft.Isam.Esent.Interop.Api.JetAttachDatabase(JET_SESID sesid, String database, AttachDatabaseGrbit grbit) in e:\src\codeplex_svn\codeplex\EsentInterop\Api.cs:line 372

Есть идеи, что может быть причиной этого? Возможно, файл.edb, который я прикрепляю, неверен?

2 ответа

Я смог получить доступ к базе данных после запуска утилиты EsentUtl для восстановления файла базы данных:

esentutl /p Blah.edb

После этого я могу присоединить / открыть базу данных и прочитать таблицы в базе данных. Я не уверен, что восстановление фактически сделало с файлом, хотя (например, возможно, теперь он пропускает некоторые данные или что-то).

Где ты взял базу данных? То, что вы сделали, должно работать для чисто выключенной базы данных. Вам не нужны файлы журнала транзакций для этих баз данных. Но есть и грязные базы данных (когда JetTerm не завершился изящно). Для этого вам понадобятся файлы журнала транзакций. А также резервные копии баз данных, которые снова немного отличаются. Для этих баз данных вам нужно вызвать JetRestore.

-Мартин

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