Я пытаюсь прочитать базу данных ESE (.edb) с использованием библиотек ManagedEsent. Тем не менее, я получаю сообщение об ошибке при создании базы данных. Кажется, что ошибка возникла во время присоединения базы данных (вызов JetAttachDatabase()).Проблемы с попыткой доступа к базе данных ESE с помощью ManagedEsent
Сообщение об ошибке, которое я получаю: «Мягкое восстановление предназначено для резервной базы данных, вместо этого следует использовать восстановление».
Ниже мой код:
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, который я прикрепляю, недействителен?
Спасибо Мартину за ваш ответ. База данных находится в стороннем приложении (например, не в базе данных Microsoft/Windows). Резервные файлы базы данных отличаются от файлов данных в реальном времени (.edb)? (Я ранее пытался запустить JetRestore в моем .edb-файле, но это не сработало, возможно, потому что это не настоящий файл резервной копии?) – Joe
Да, они действительно немного разные. Причина связана с днями ленточных резервных копий, когда вам приходилось писать файл последовательно. Заголовок базы данных изменяется при записи большого файла базы данных, и к концу копирования большого количества данных вам необходимо написать обновленный заголовок. Это застревает в конце файла. JetRestore должен знать, как справиться с этой разницей. –