由于页面大小的某些问题,我在打开esent数据库(Windows.edb)时遇到问题。我系统上Windows.edb的页面大小为32K。当我通过JET_paramDatabasePageSize设置它时,JetInit会返回错误-1213 (数据库页面大小与引擎不匹配)。 Laurion Burchall建议在我只需要对数据库进行ReadOnly访问后关闭JET_paramRecovery。这解决了我的问题。
直到现在。我有一个不完全关闭的数据库。我假设,在JET_paramRecovery = On的情况下,JetInit会自动执行恢复并让我读取数据库。但是,如果我尝试,我会得到那个旧的-1213错误。
现在我可以使用ESENTUTL修复我的文件但我的应用程序的虚拟用户将无法修复。有没有办法恢复,仍然能够定义 ANY DatabasePageSize?数据库的位置没有日志文件(我将Logpath设置为同一目录,以确保它们不会写在其他任何地方)。
这是否意味着我的机器上的引擎不支持页面大小或数据库?或者我可以通过设置另一个魔术开关来解决问题吗?
答案 0 :(得分:1)
在另一个应用程序的数据库上运行恢复很棘手。 ESENT是一个嵌入式引擎,每个应用程序都有自己的设置。在运行恢复之前,您需要知道:
如果正确设置所有这些参数,则恢复将正常工作。如果您没有正确执行此操作,则其他应用程序可能无法恢复其数据库!
答案 1 :(得分:0)
有一种简单(但很棘手)的方法来“修复”未正常关闭的EDB数据库。标题中的状态标志位于偏移52处。它是一个4Byte Integer,应该设置为3(如果没有优雅地关闭,你会发现它的值可能是2)。
您可能需要在包含数据库标头副本的第二个数据库页面重复此条目。您可以发现该页面只是数据库的页面大小(通常为4096,8192等)。
因为这真的是一个黑客,你应该自己使用它!