我在应用程序中使用 ESE (JetBlue),当调用 JetAttachDatabase 时,它返回 JET_errDatabaseDirtyShutdown。我应该在我的应用程序中做什么?我希望删除任何未完成的交易
问问题
773 次
2 回答
2
日志恢复将通过调用 JetInit 自动完成,JetInit 将自动回滚未提交的事务。为了让 JetInit 工作,它必须找到日志文件,所以在这种情况下,您可能有:
- 删除了日志文件。不要那样做。
- 没有正确设置日志文件路径。初始化时始终设置相同的日志文件路径,以便 ESE 可以找到日志。
- 移动了数据库。日志包含数据库的硬编码路径,因此移动数据库会中断恢复。为了解决这个问题,您可以将备用恢复路径系统参数设置为包含数据库的目录。
于 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 回答