2012-12-11 103 views
4

我有一個Mnesia數據庫,當我重新啓動我的應用程序時,在掛起的交易中出現錯誤(badarg)。我認爲一個無效值即將被插入。 如何檢查未決事務以查找錯誤值,以及如何從未決事務中刪除該值而不刪除整個數據庫。掛起Mnesia交易

更新:

的崩潰報告如下:

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

哪裏image_db是我的結構,其被插入到數據庫中。不幸的是,要插入的項目列表太長了,以至於我看不到損壞的值。

命令mnesia:info()顯示我在啓動1級中止的事務。

更新2:

我怎樣才能讀取Mnesia的數據庫目錄中的二進制日誌文件?

更新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() }). 

的問題不時出現的時候,我覺得後一個無效的記錄被插入到數據庫。我現在添加了一個記錄驗證功能來避免這種情況,但問題仍然存在,即如何通過刪除存儲事務中的無效值來恢復數據庫?

+0

請顯示您準確得到的錯誤 –

回答

2

我,不知道,如果你的Mnesia的是一個多節點環境,如果是這樣,你等着表來上線(這麼說),並開始將其插入得到同步?你能給我們提供關於你的配置的更多信息嗎?此外,這是否始終發生或只是偶爾發生?