2011-02-17 31 views
1

由于页面大小存在问题,我在打开esent数据库(Windows.edb)时遇到了问题。我的系统上的Windows.edb的页面大小是32K。当我通过JET_paramDatabasePageSize设置它时,JetInit将返回错误-1213(数据库页面大小与引擎不匹配)。一旦我只需要ReadOnly访问数据库,Laurion Burchall建议关闭JET_paramRecovery。这解决了我的问题。当前数据库引擎仅限于特定的页面大小?

直到现在。我有一个不完美的关机数据库。我假设,使用JET_paramRecovery = On时,JetInit将自动执行恢复并让我读取数据库。但是,如果我尝试得到旧的-1213错误。

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

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

回答

1

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

  1. 当日志文件的位置(JET_paramLogFilePath)
  2. 日志文件大小(JET_paramLogFileSize)
  3. 数据库页面大小(JET_paramDatabasePageSize)
  4. 日志文件基名(JET_paramBaseName )

如果您正确设置所有这些参数,则恢复将正常工作。如果你不这样做,那么其他应用程序可能会在恢复数据库时遇到问题!

0

有一个简单(但棘手)的方法来“修复”一个没有正常关闭的EDB数据库。在偏移量为52的头部有一个状态标志。它是一个4Byte整数,应该设置为3(如果没有正常关闭,你会发现它的值可能是2)。

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

由于这实在是一个黑客,你应该使用它在你自己的风险!