首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除挂起的Mnesia事务

删除挂起的Mnesia事务
EN

Stack Overflow用户
提问于 2012-12-11 09:33:20
回答 1查看 397关注 0票数 4

我有一个Mnesia数据库,当我重新启动我的应用程序时,我会在挂起的事务中得到一个错误(badarg)。我认为一个无效的值即将被插入。如何检查挂起的事务以查找坏值是什么,以及如何在不删除整个数据库的情况下从挂起的事务中删除该值。

更新:

坠机报告如下:

代码语言:javascript
运行
复制
{badarg, [{ets, insert, [{image_db...}, {image_db...}...]

其中image_db是我的结构,被插入到数据库中。不巧的是,要插入的项目列表太长了,所以我没有看到损坏的值。

命令mnesia:info()在启动时向我显示了一个中止的事务。

更新2:

如何读取mnesia db目录中的二进制日志文件?

更新3:

这是一个本地单节点Mnesia表。我将其初始化如下:

代码语言:javascript
运行
复制
mnesia:stop(),
catch(mnesia:create_schema([node()])),
mnesia:start(),
timer:sleep(1000), % vital but ugly as hell
mnesia:create_table(?DBNAME, [{disc_copies, [node()]}, {type, ordered_set},
                              {attributes, record_info(fields, image_db)}]),
mnesia:wait_for_tables(?DBNAME, 1000),

其中image_db记录如下所示:

代码语言:javascript
运行
复制
-type now_time() :: {integer(), integer(), integer() }.

-record(image_db, {time :: now_time(),
                   path :: string(),
                   size :: integer() }).

这个问题不时地出现,我认为在一个无效的记录被插入到数据库之后。为了避免这种情况,我现在添加了一个记录验证函数,但问题仍然存在,如何通过删除存储事务中的无效值来恢复数据库?

EN

回答 1

Stack Overflow用户

发布于 2012-12-15 00:57:31

我想知道您的mnesia是否是一个多节点环境,如果是的话,您是否在等待表在线(可以说是这样)并在开始插入它们之前进行同步?你能给我们更多关于你的配置的信息吗?而且,这种情况是经常发生的还是偶尔发生的?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13817288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档