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

Я пытаюсь прочитать несмонтированные файлы EDB через esent.dll. Все работает с 4k-страничными базами данных, но когда я пытаюсь прочитать 8k-страничную базу данных, она возвращает ошибку-1414 -> Вторичный индекс поврежден, и база данных должна быть дефрагментирована.
Но дефрагментация с помощью eseutil не решит проблему. (eseutil находится в папке bin того же сервера Exchange, который создал .edb)

    JET_ERR err;
JET_INSTANCE instance;
JET_SESID sesid;
JET_DBID dbid;
JET_TABLEID tableid;

JET_COLUMNDEF columndef = { 0 };
JET_COLUMNID columnid;

Call(JetSetSystemParameter(&instance, JET_sesidNil, 64, 8192, NULL));       //JET_paramDatabasePageSize  - 64
Call(JetSetSystemParameter(&instance, JET_sesidNil, 34, 0, NULL));          //JET_paramRecovery  - 34
//Call(JetSetSystemParameter(&instance, JET_sesidNil, JET_paramCircularLog, 1, NULL));
Call(JetCreateInstance(&instance, "instance"));

Call(JetInit(&instance));
Call(JetBeginSession(instance, &sesid, 0, 0));

JET_PCSTR FileName = "C:\\Users\\user\\Desktop\\EDB\\First Storage Group\\Mailbox Database.edb";
Call(JetAttachDatabase(sesid, FileName, 0));`

И он не будет прикреплять базу данных .. В чем проблема, на ваш взгляд?

0

Решение

Прежде всего, не рекомендуется использовать базы данных, созданные с помощью ese.dll, с esent.dll, и наоборот. Хотя API очень похожи, существуют внутренние различия. Кроме того, esent.dll публикуется на MSDN, а ese.dll не публикуется.

Есть ли причина, по которой вы используете esent.dll для чтения базы данных, созданной ese.dll?

Повреждение вторичного индекса обычно происходит из-за изменения порядка сортировки ОС. Дефрагментация базы данных будет считывать все данные из исходной базы данных и создавать совершенно новую базу данных. Вторичные индексы полностью воссозданы.

Поскольку вы сказали, что автономная дефрагментация (eseutil.exe -d, верно?) Не помогает решить проблему, то, вероятно, это не связано с изменением порядка сортировки ОС. Вероятно, это связано с другой внутренней разницей между ese.dll и esent.dll.

О каких версиях ese.dll и esent.dll вы говорите? Exchange не использовал страницы 4k для многих выпусков.

0

Другие решения

Есть несколько движков базы данных JET.
Вы можете прочитать об этом здесь Ядро базы данных Microsoft Jet

JET Blue предназначен для Exchange Server и Active Directory, расширяемого хранилища (ESE). esent.dll подходит для базы данных Active Directory. Ese.dll это реализация для Exchange Server. Я думаю, что использование esent.dll для чтения и изменения базы данных Exchange приведет к ее повреждению.

JET Красный механизм хранения для Microsoft Access.

0

По вопросам рекламы [email protected]