嵌入式系统上的SQLite数据库损坏

时间:2014-11-06 20:22:06

标签: c sqlite embedded-linux beagleboard beagleboneblack

当使用eMMC在beaglebone嵌入式Linux系统上发生断电时,我正在测试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 个答案:

答案 0 :(得分:1)

SQLite允许在断电期间出现损坏,但仅限于正在写入的扇区。

您正在使用的闪存芯片可能会破坏许多不相关的扇区。 这是不可能检测到的;使用此硬件无法防止数据丢失。