我正在使用managedEsent接口进行一些测试,我想知道是否有人可以澄清这一点: 在事务内部,我进行更新(插入记录),然后回滚事务。 如果我使用EseDatabaseView(http://www.nirsoft.net/)查看数据库,我可以看到"未提交的"表中列出的记录。再次访问esent.dll并没有给我记录。 因此,使用esent api记录未提交且不可见并且使用EDV(我猜它直接从文件读取)记录就在那里。 这是"正常"行为,是否会出现" allways"将记录写入文件,如果没有提交,它只是不读取它?这是EDV中的一个错误吗?或者我在这里遗漏了什么?
答案 0 :(得分:0)
与大多数数据库一样,esent正在使用事务。它们存储在LOG文件中,您可以在EDB文件所在的目录中找到它们。如果要访问事务LOG文件中的数据,则需要将它们刷新到数据库中。使用以下命令执行此操作: eseutil / MH database.edb
有关esent的事务日志的更多信息: http://support.microsoft.com/kb/240145/en-us
答案 1 :(得分:0)
根据EseDatabaseView的描述判断('esent.dll(可扩展存储引擎的dll文件)不需要读取数据库。'),听起来他们试图直接读取数据库文件,而不是使用ESE的API。
数据库是否先干净地关闭?使用转储数据库标头的esentutl -mh [database name]
进行确认。寻找像'Dirty Shutdown'或'Clean Shutdown'这样的东西。
Dirty Shutdown:您可能会看到尚未提交(或回滚)的事务。您需要事务日志文件中的信息才能使其处于干净状态。 干净关机:一切都处于干净状态。如果需要,您可以删除日志文件。
我的猜测是数据库在脏状态下关闭,该工具正在读取尚未回滚的数据。
-Martin