2013-07-31 1 views
1

write-ahead 로깅을 사용하는 SQLite 데이터베이스가 체크 포인트가없는 트랜잭션 (정전 등으로 인해)으로 중단 된 다음 임시 파일이없는 상태로 다시 열면 데이터베이스가 마지막 상태로 깨끗하게 열립니다 체크 포인트, 또는 어떤 방식으로 손상 될 것인가?SQLite에서 -wal 파일이 사라지는 이유는 무엇입니까?

우리는 SQLite가 iCloud와 함께 작동하도록 노력하고 있습니다 (네, 그렇다고 생각 합니다만, Windows와 Android 앱을 만들고 크로스 플랫폼 데이터베이스 솔루션이 필요합니다). WAL이 데이터베이스의 두 복사본을 유지해야하는 것을 피할 수있는 잠재적 인 방법을 제공한다고 생각합니다. -wal 파일을 iCloud 외부에 보관하고 기본 데이터베이스를 저장하므로 iCloud가 롤백 저널을 백업하는 문제 (또는 백업 이러한 저널이없는 트랜잭션 중간 트랜잭션).

답변

3

file format documentation에는 "핫 WAL 파일"이 언급되어 있지만이 정보는 커밋되지 않은 데이터에만 적용됩니다.

데이터베이스 파일 자체에는 -wal 파일의 커밋 된 데이터에 대한 정보가 없습니다. 즉, 검사 점 이전의 트랜잭션은 일반적으로 주 데이터베이스 파일을 전혀 변경하지 않습니다. 따라서 -wal 파일을 삭제하면 데이터베이스가 마지막 검사 점 이후의 상태 (구형이지만 일관성이 있음)로 복원됩니다. 나중에 커밋 된 모든 트랜잭션은 손실됩니다.

1

SQLite의 Write-Ahead Logging의 "검사 점"섹션을 참조하십시오. 내가 아는 바로는 WAL 파일의 데이터는 단순히 커밋되지 않습니다.

즉, 아직 커밋되지 않은 .WAL 파일의 데이터는 손실되지만 주 데이터베이스 자체는 완벽해야합니다.

0

검사 점 작업 중에 WAL 파일이 삭제되면 db가 손상 될 수 있습니다. 완료되지 않은 db 수정의 경우 WAL 파일이 변경 사항을 완료하는 데 필요합니다. 그렇지 않으면 db 파일이 일시적 상태가됩니다.
DB 및 WAL 파일은 db 상태의 전체 그림을 만듭니다.
https://www.sqlite.org/howtocorrupt.html#delhotjrnl에는
에 "충돌 또는 전원 장애로부터 복구하려면 SQLite에서 저널 파일을 확인해야합니다."라고 명시 적으로 명시되어 있습니다.

관련 문제