gpt4 book ai didi

erlang - 删除待处理的 Mnesia 交易

转载 作者:行者123 更新时间:2023-12-01 04:00:27 25 4
gpt4 key购买 nike

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

更新:

崩溃报告如下:

{badarg, [{ets, insert, [{image_db...}, {image_db...}...]

哪里 image_db是我插入到数据库中的结构。不幸的是,要插入的项目列表太长,我看不到损坏的值。

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

更新 2:

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

更新 3:

它是一个本地单节点 Mnesia 表。我像这样初始化它:
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记录看起来像这样:
-type now_time() :: {integer(), integer(), integer() }.

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

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

最佳答案

我想知道您的 mnesia 是否是多节点环境,如果是,您是否在等待表上线(可以这么说)并在开始插入之前同步?你能给我们更多关于你的配置的信息吗?另外,这种情况是一直发生还是偶尔发生?

关于erlang - 删除待处理的 Mnesia 交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13817288/

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