2014-11-13 34 views
11

當我嘗試添加一個新行到數據庫「INSERT INTO invited_users VALUES(‘身份證’,USER_NAME')」H2 DB「組塊不再存在」錯誤

我得到這個錯誤:

General error: "java.lang.IllegalStateException: Chunk 2089 no longer exists [1.4.181/9]" 

也許這是數據庫的一些問題,因爲當我試圖添加同一行到一個新的數據庫 - 錯誤消失了。

更新二零一四年十一月二十零日

好消息!我聯繫了H2 db的開發人員,並發現他們將在下一個版本中修復該錯誤。 https://groups.google.com/forum/#!topic/h2-database/i_GHXExjotc

更新2014年12月6日

一個簡單的解決方法是通過附加到禁用MVStore 「; mv_store =假」 到數據庫URL。

但是,如果你需要舊的分貝,這個技巧將無法工作。它會創建新的數據庫,擴展名爲.h2.db而不是.mv.db

要解決此問題您需要創建舊數據庫「.mv.db」的SQL腳本(使用恢復工具),然後使用「runscript ...」運行這個腳本。

+0

可能有趣:https://www.mail-archive.com/[email protected]/msg16976.html和https://groups.google.com/forum/#!topic/h2 - 數據庫/ i1YwSTG8CS8 –

+0

@JimGarrison是的,謝謝。我已閱讀 – klvtsov

+0

給出[最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)。 – philipxy

回答

5

在版本1.4.182中,可能檢測到塊不再被引用的機制有問題。目前,這是reference counting垃圾收集:通過點擊直播 頁面和直播空間。如果達到零,則可以在45秒後覆蓋塊。

一個簡單的解決方法是使用page store存儲機制而不是mv_store,方法是將數據庫連接更改爲使用mv_store=false作爲緩解。

自版本1.4.177 Beta以來,MV_STORE選項自動啓用。

By default, the MV_STORE option is enabled, so it is using the new MVStore storage. The MVCC setting is by default set to the same values as the MV_STORE setting, so it is also enabled by default. For testing, both settings can be disabled by appending ";MV_STORE=FALSE" and/or ";MVCC=FALSE" to the database URL.

+0

@PierAlexandreBouchard沒有人,這個解決方法不適合我。它創建新的數據庫,但我需要舊的數據庫。 – klvtsov

+0

@PierAlexandreBouchard可以克服這個問題嗎? – klvtsov

+0

您不可能複製從舊數據庫到新數據庫的行? –