2014-11-06 3 views
0

eMMC를 사용하는 Beaglebone 임베디드 Linux 시스템에서 정전이 발생하면 SQLite 데이터베이스의 무결성을 테스트합니다. 임베디드 시스템에서 SQLite 데이터베이스 손상

나는

PRAGMA synchronous = FULL 
PRAGMA journal_mode = WAL 

와 데이터베이스를 구성하고 전원이 릴레이에 의해 절단되는 동안 데이터베이스에 기록을 유지. 이 테스트는 몇 시간 동안 자동으로 실행됩니다. 잠시 후

, 데이터베이스는 다음과 같은 오류가 손상되면 :

integrity_check을 : *** 주요 데이터베이스에 *** 페이지 50861을 : btreeInitPage은() 트리 페이지 50820 전지에 오류 코드 (11) 를 반환 (83) : 하위 페이지 깊이가 다른 페이지 50862 : btreeInitPage()는 오류 코드 11 페이지 50863을 반환 btreeInitPage() 반환 오류 코드 11 페이지 50865 : btreeInitPage()가 반환하는 오류 코드 (11) btreeInitPage()는 오류 코드 11 페이지 50864을 반환 페이지 50866 : btreeInitPage() 오류 코드 11을 반환합니다. 페이지 50867 : btreeInitPage()가 반환합니다. 오류 코드 11 페이지 50868은 : btreeInitPage()는 오류 코드 11 페이지 50869 반환 btreeInitPage() 반환 오류 코드를 11 페이지 50870 : btreeInitPage()가 오류 코드 11 페이지 50872을 반환 btreeInitPage()는 오류 코드 11 페이지 50871 반환 : btreeInitPage는() 오류 코드 (11) 페이지 50873을 반환

https://www.sqlite.org/howtocorrupt.html : 하위 페이지 깊이 내가 SQLite는 대한 다음 기사를 읽었습니다

을 다릅니다 btreeInitPage은() 50,820 전지 (96)는 트리 페이지에서 오류 코드 (11) 를 반환

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

데이터베이스 손상을 방지하려면 어떻게해야합니까?

가능하지 않은 경우 데이터 손실에 신경 쓰지 않아 어떤 옵션이 있습니까?

답변

1

SQLite는 정전 중에 손상을 허용하지만 기록중인 섹터에서만 손상을 허용합니다.

사용중인 플래시 칩이 관련없는 많은 섹터를 손상시킬 수 있습니다. 이것은 감지 할 수 없습니다. 이 하드웨어로 데이터 손실을 막는 것은 불가능합니다.

+1

ext3 파티션을 사용하면 데이터베이스 손상 문제가 해결되었습니다. 하지만 플래시 칩이 관련없는 섹터를 부패시킬 수도 있다는 당신의 말이 맞습니다. – Vincent