2014-11-06 139 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