[Sqlite] 1802 error 의 정체는? |
https://sqlite.org/rescode.html#ioerr_fstat
-
Sqlite 의 1802 error 는 SQLITE_IOERR_FSTAT 이다.
이는 SQLITE_IOERR 의 확장 에러 코드로 VFS layer 에서 fstat() 함수를 호출하면서 발생한 I/O 에러를 이야기한다.
-
VFS(Virtual File System) 는 무엇인가?
http://aroundck.tistory.com/4925
간단히 이야기하면, SQLite 가 OS 와 communicate 하는 channel 이라고 보면 된다.
-
그럼 fstat 은 무엇인가?
stat, lstat 등과 함께 fstat 은 아래와 같은 형태의 파일 정보를 읽어오는 함수이다.
struct stat {
dev_t st_dev; /*ID of device containing file */
ino_t st_ino; /*inode number*/
mode_t st_mode; /*protection*/
nlink_t st_nlink; /*number of hard links*/
uid_t st_uid; /*user ID of owner*/
gid_t st_gid; /*group ID of owner*/
dev_t st_rdev; /*device ID (if special file)*/
off_t st_size; /*total size, in byte*/
blksize_t st_blksize; /*blocksize for file system I/O*/
blkcnt_t st_blocks; /*number of 512B blocks allocated*/
time_t; st_atime; /*time of last access*/
time_t; st_mtime; /*time of last modification*/
time_t st_xtime; /*time of last status change*/
};
-
필자가 해당 에러를 마딱뜨렸던 케이스는
Android 에서 앱 업데이트하면서 background 에서 DB Table 을 지우는 케이스였다.
해당 Table 을 지우는 코드 직전에 또 다른 Table 을 지우는 것이 성공한 것으로 보아,
앱 업데이트 과정에서 file update 등이 발생하고, 그러면서 fstat 을 호출하는 것에서 exception 이 발생한 것으로 보인다.
( 혹시 다른 원인을 찾아내면 해당 글을 다시 업데이트 하겠다. )
위의 가정이 맞다면, 이는 피할 수 없는 에러의 형태 중 하나이기 때문에 try catch 로 방어해야한다고 생각한다.
'프로그래밍 놀이터 > Database' 카테고리의 다른 글
[SQLite] GLOB vs. LIKE (0) | 2019.01.19 |
---|---|
[Database] -journal 파일의 정체는 뭘까? ( + WAL, temp files ) (2) | 2019.01.15 |
[SQLite3] Appendix. SQLite3 커맨드 라인 도구, 관리도구 (0) | 2018.05.26 |
[SQLite3] 09. 안드로이드와 데이터베이스 (0) | 2018.05.25 |
[SQLite3] 06. 임베디드 SQLite3 최적화 #2 (0) | 2018.05.23 |
댓글