1

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

4

2 回答 2

2

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

  1. 删除了日志文件。不要那样做。
  2. 没有正确设置日志文件路径。初始化时始终设置相同的日志文件路径,以便 ESE 可以找到日志。
  3. 移动了数据库。日志包含数据库的硬编码路径,因此移动数据库会中断恢复。为了解决这个问题,您可以将备用恢复路径系统参数设置为包含数据库的目录。
于 2010-03-03T06:36:11.243 回答
1

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

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

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

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

于 2016-11-20T16:56:47.820 回答