我正在尝试通过esent.dll读取未安装的EDB文件。一切都适用于4k分页数据库,但当我尝试读取8k分页数据时,它返回错误-1414 - >辅助索引已损坏,数据库必须进行碎片整理。 但是使用eseutil进行碎片整理并不能解决问题。 (eseutil来自同一个Exchange服务器的bin文件夹,创建了.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 :(得分: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页面。
答案 1 :(得分:0)
有几个JET数据库引擎。 您可以在Microsoft Jet Database Engine
阅读有关它的摘要JET Blue适用于Exchange Server和Active Directory,可扩展存储引擎(ESE)。 esent.dll 适用于Active Directory数据库。 ese.dll 是Exchange Server的一种实现。我想使用esent.dll来读取和修改Exchange数据库会破坏它。
用于Microsoft Access的JET Red存储引擎。