Esent数据库引擎仅限于特定的页面大小?

时间:2011-02-17 16:24:03

标签: esent edb

由于页面大小的某些问题,我在打开esent数据库(Windows.edb)时遇到问题。我系统上Windows.edb的页面大小为32K。当我通过JET_paramDatabasePageSize设置它时,JetInit会返回错误-1213 (数据库页面大小与引擎不匹配)。 Laurion Burchall建议在我只需要对数据库进行ReadOnly访问后关闭JET_paramRecovery。这解决了我的问题。

直到现在。我有一个不完全关闭的数据库。我假设,在JET_paramRecovery = On的情况下,JetInit会自动执行恢复并让我读取数据库。但是,如果我尝试,我会得到那个旧的-1213错误。

现在我可以使用ESENTUTL修复我的文件但我的应用程序的虚拟用户将无法修复。有没有办法恢复,仍然能够定义 ANY DatabasePageSize?数据库的位置没有日志文件(我将Logpath设置为同一目录,以确保它们不会写在其他任何地方)。

这是否意味着我的机器上的引擎不支持页面大小或数据库?或者我可以通过设置另一个魔术开关来解决问题吗?

2 个答案:

答案 0 :(得分:1)

在另一个应用程序的数据库上运行恢复很棘手。 ESENT是一个嵌入式引擎,每个应用程序都有自己的设置。在运行恢复之前,您需要知道:

  1. 日志文件的位置(JET_paramLogFilePath)
  2. 日志文件大小(JET_paramLogFileSize)
  3. 数据库页面大小(JET_paramDatabasePageSize)
  4. 日志文件基名(JET_paramBaseName)
  5. 如果正确设置所有这些参数,则恢复将正常工作。如果您没有正确执行此操作,则其他应用程序可能无法恢复其数据库!

答案 1 :(得分:0)

有一种简单(但很棘手)的方法来“修复”未正常关闭的EDB数据库。标题中的状态标志位于偏移52处。它是一个4Byte Integer,应该设置为3(如果没有优雅地关闭,你会发现它的值可能是2)。

您可能需要在包含数据库标头副本的第二个数据库页面重复此条目。您可以发现该页面只是数据库的页面大小(通常为4096,8192等)。

因为这真的是一个黑客,你应该自己使用它!