Я тестирую целостность базы данных SQLite, когда происходит перебои с подачей электроэнергии на встроенную систему Linux с бисером, используя eMMC.Повреждение базы данных 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
Что можно сделать, чтобы предотвратить повреждение базы данных?
Если это невозможно, какие у меня варианты, так как я не хочу потерять некоторые данные.
Использование раздела ext3 позволило решить проблему с повреждением базы данных. Но вы правы, что флеш-чип также может испортить несвязанные сектора. – Vincent