如何在代码中修复可扩展存储引擎(JetBlue)?

时间:2010-02-26 05:59:30

标签: c++ database extensible-storage-engine

我在应用程序中使用ESE(JetBlue),当调用JetAttachDatabase时,它返回JET_errDatabaseDirtyShutdown。我应该在我的应用程序中做什么?我希望删除任何未公开的交易

2 个答案:

答案 0 :(得分:1)

日志恢复将通过调用JetInit自动完成,JetInit将自动回滚未注释的事务。为了让JetInit工作,它必须找到日志文件,所以在这种情况下你可能有:

  1. 删除了日志文件。不要那样做。
  2. 未正确设置日志文件路径。始终在初始化时设置相同的日志文件路径,以便ESE可以找到日志。
  3. 移动了数据库。日志包含数据库的硬编码路径,因此移动数据库会中断恢复。要处理此问题,您可以将备用恢复路径系统参数设置为包含数据库的目录。

答案 1 :(得分:0)

您可以将应用程序配置为自动尝试清除"脏关机"通过在JetCreateInstance()之后和JetInit()之前添加以下内容。是的,这些事情的顺序很重要:

Api.JetSetSystemParameter(instance, JET_SESID.Nil, Server2003Param.AlternateDatabaseRecoveryPath, 0, Path.GetDirectoryName(databasePath));

(上面的示例是在C#中,但你明白了......)

最后一个参数是您希望修复数据库出现的位置,因此很可能与脏数据库文件位于同一目录。