我正在使用ManagedEsent接口进行一些测试,我想知道这里是否有人能澄清这一点:
如果使用EseDatabaseView查看数据库,就可以看到表中列出的“未提交”记录。再去一次esent.dll并没有给我留下任何记录。
因此,使用esent,记录是不提交的(并且不可见);使用EDV (我猜它直接从文件中读取),记录就在那里。
这是“正常”行为吗,ESENT“总是”将记录写入文件,如果没有提交,它就不会读取它吗?那么,这是EDV中的一个bug吗?还是我漏掉了什么?
发布于 2014-11-26 17:59:05
与大多数数据库一样,esent使用的是事务。它们存储在与EDB文件相同的目录中的日志文件中。如果要访问事务日志文件中的数据,则需要将它们刷新到数据库中。使用以下命令执行此操作: eseutil /MH database.edb
有关esent事务日志的更多信息:http://support.microsoft.com/kb/240145/en-us
发布于 2014-11-28 18:24:13
从EseDatabaseView的描述('esent.dll (可扩展存储引擎的dll文件)不需要读取数据库‘)判断,听起来他们似乎试图直接读取数据库文件,而不是使用ESE。
数据库是否首先完全关闭?使用esentutl -mh [database name]确认,这将转储数据库头。寻找类似“肮脏关闭”或“清洁关闭”之类的东西。
脏关机:您可能会看到尚未提交(或回滚)的事务。您需要事务日志文件中的信息才能使其处于干净状态。清洁关机:一切都处于清洁状态。如果需要,可以删除日志文件。
我的猜测是数据库处于一种肮脏的状态中被关闭,并且工具正在读取尚未回滚的数据。
-martin
https://stackoverflow.com/questions/27146241
复制相似问题