2014-11-06 80 views
0

我正在測試使用eMMC的嵌入式Linux系統在beaglebone嵌入式Linux系統上發生停電時SQLite數據庫的完整性。嵌入式系統上的SQLite數據庫損壞

PRAGMA synchronous = FULL 
PRAGMA journal_mode = WAL 

配置的數據庫,並保持書面的數據庫,而電力是通過繼電器切斷。測試會自動運行幾個小時。

一段時間後,數據庫被破壞併產生以下錯誤:

INTEGRITY_CHECK:***在數據庫主*** 頁50861:btreeInitPage()返回錯誤代碼11 在樹頁50820細胞83 :兒童頁深度不同, 第50862:btreeInitPage()返回錯誤代碼11 第50863:btreeInitPage()返回錯誤代碼11 第50864:btreeInitPage()返回錯誤代碼11 第50865:btreeInitPage()返回錯誤代碼11 頁面50866:btreeInitPage()返回錯誤代碼11 頁面50867:btreeInitPage()返回錯誤代碼11 第50868:btreeInitPage()返回錯誤代碼11 第50869:btreeInitPage()返回錯誤代碼11 第50870:btreeInitPage()返回錯誤代碼11 第50871:btreeInitPage()返回錯誤代碼11 第50872 :btreeInitPage()返回錯誤代碼11 頁50873:btreeInitPage()返回錯誤代碼11 在樹頁50820細胞96:子頁面深度不同,

我讀過有關的SQLite下面的文章:

https://www.sqlite.org/howtocorrupt.html

https://www.sqlite.org/atomiccommit.html

我該怎麼做才能防止數據庫損壞?

如果不可行,我的選擇是什麼,因爲我不關心丟失一些數據。

回答

1

SQLite允許在停電期間發生損壞,但只能在正在編寫的那些扇區中使用。

您正在使用的閃存芯片可能會損壞大量不相關的扇區。 這是不可能檢測;使用此硬件無法防止數據丟失。

+1

使用ext3分區解決了我的數據庫損壞問題。但你認爲閃存芯片也可能會破壞無關的行業。 – Vincent 2014-11-12 17:35:10