1

我正在使用ManagedEsent接口进行一些测试,我想知道这里是否有人可以澄清这一点:

  • 在事务中,我进行更新(插入记录),然后回滚事务

如果我使用EseDatabaseView查看数据库,我可以看到表中列出的“未提交”记录。再次访问 esent.dll并没有给我记录。

因此,使用 esent api 记录未提交(并且不可见);并使用 EDV(我猜它直接从文件中读取)记录就在那里。

这是“正常”行为吗,ESENT 是否“总是”将记录写入文件,如果它没有提交,它只是不读取它?那么它是EDV中的一个错误吗?或者我在这里遗漏了什么?

4

2 回答 2

0

从EseDatabaseView的描述来看('esent.dll(Extensible Storage Engine的dll文件)不需要读取数据库。'),听起来他们试图直接读取数据库文件,而不是使用ESE API。

数据库是否首先干净地关闭?用 确认esentutl -mh [database name],转储数据库标头。寻找诸如“脏关机”或“干净关机”之类的内容。

Dirty Shutdown:您可能会看到尚未提交(或回滚)的事务。您需要事务日志文件中的信息将其置于干净状态。清洁关机:一切都处于清洁状态。如果需要,您可能会删除日志文件。

我的猜测是数据库在脏状态下被关闭,并且该工具正在读取尚未回滚的数据。

-马丁

于 2014-11-28T18:24:13.290 回答
0

与大多数数据库一样,esent 使用的是事务。它们存储在 LOG 文件中,您可以在与 EDB 文件相同的目录中找到这些文件。如果要访问事务 LOG 文件中的数据,则需要将它们刷新到数据库中。使用以下命令执行此操作:eseutil /MH database.edb

有关 esent 事务日志的更多信息:http: //support.microsoft.com/kb/240145/en-us

于 2014-11-26T17:59:05.470 回答