【问题标题】:Esent database engine limited to specific page sizes?Esent 数据库引擎仅限于特定页面大小?
【发布时间】:2011-02-17 16:24:03
【问题描述】:

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

到现在为止。我有一个不完全关闭的数据库。我假设,使用 JET_paramRecovery=On,JetInit 会自动进行恢复并让我读取数据库。但如果我尝试这样做,我会得到那个旧的 -1213 错误。

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

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

【问题讨论】:

    标签: esent edb


    【解决方案1】:

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

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

    如果您正确设置了所有这些参数,那么恢复将正常工作。如果您没有正确执行此操作,则其他应用程序可能无法恢复其数据库!

    【讨论】:

      【解决方案2】:

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

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

      由于这确实是一个 hack,您应该自担风险使用它!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        • 2018-08-01
        • 2016-03-11
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        相关资源
        最近更新 更多