gpt4 book ai didi

windows - edb 数据库中的事务日志文件

转载 作者:可可西里 更新时间:2023-11-01 12:04:56 25 4
gpt4 key购买 nike

在尝试从各种 edb 数据库集合中提取数据(转储和选择性读取列)时,我遇到了一个基本问题。我有一个带有几个日志文件的 edb 数据库。我知道数据库中有哪些信息,但我只提取了其中的一半。我担心剩下的一半睡在日志文件的某个地方。我假设 EDB 引擎知道日志文件在哪里,并在附加数据库时自动加载它们(JET_paramSystemPath、JET_paramLogFilePath 和 JET_paramBaseName 已正确设置)。这是一个错误的假设吗?如果是这样,我应该怎么做才能加载日志?

或者,是否可以简单地将事务提交到 EDB 文件并删除日志?

最佳答案

如果有未提交的事务,则数据库将被标记为“不一致”。您可以使用 ESENTUTL/MH 对数据库进行检查。针对不一致的数据库调用 JetAttachDatabase 将始终失败。

因此,如果您的程序能够附加并打开数据库,那么它就是一致的。有两种方法可以使数据库保持一致:

  1. 彻底关闭 ESENT。
  2. 在 JetInit 时使用日志文件运行恢复。

JetInit 做的第一件事是查找由 JET_paramLogFilePath 和 JET_paramBaseName 指定的日志文件。日志文件包含它们引用的数据库的完整路径,然后日志文件中的事务将提交给数据库。因此,如果您正确设置系统参数,那么 ESENT 将在附加数据库时加载日志。

另一方面,如果您没有正确设置参数,那么您的程序实际上将在不需要恢复的数据库上运行。 JetInit 不会找到任何日志文件,因此它不会执行任何操作并且附加会成功,因为数据库是一致的。

另一个变化是日志文件包含数据库的完整路径。这意味着如果您复制/移动了数据库,则恢复将不起作用。从 Windows Server 2003 开始​​,您可以通过将 JET_paramAlternateDatabaseRecoveryPath 设置为包含数据库的目录来处理此问题。

重要:为了安全起见,您应该始终使用只读标志附加和打开数据库。这将避免错误的日志文件设置引起的任何问题。一个常见的问题是只读应用程序最终会在不同的目录中创建一组日志文件,这会阻止数据库被正确恢复。

关于windows - edb 数据库中的事务日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com