gpt4 book ai didi

c++ - ESENT 二级索引已损坏,必须对数据库进行碎片整理

转载 作者:行者123 更新时间:2023-11-30 17:13:32 25 4
gpt4 key购买 nike

我正在尝试通过 esent.dll 读取未安装的 EDB 文件。一切都适用于 4k 分页数据库,但当我尝试读取 8k 分页数据库时,它返回错误 1414 -> 二级索引已损坏,必须对数据库进行碎片整理。但使用 eseutil 进行碎片整理并不能解决问题。 (eseutil 来自创建 .edb 的同一交换服务器的 bin 文件夹)

    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));`

并且它不会附加数据库。您认为问题是什么?

最佳答案

首先,不建议您将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 页面。

关于c++ - ESENT 二级索引已损坏,必须对数据库进行碎片整理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30798521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com