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() }).
的問題不時出現的時候,我覺得後一個無效的記錄被插入到數據庫。我現在添加了一個記錄驗證功能來避免這種情況,但問題仍然存在,即如何通過刪除存儲事務中的無效值來恢復數據庫?
請顯示您準確得到的錯誤 –