Seize the day

POST : Android Dev Study

Room DB 백업 및 복구

Room db  생성할 때 속성을 별도로 지정하지 않으면 -shm, -wal 이 붙은 파일이 같이 생성된다. 여기에 대한 정보를 모아보면..  

https://androidexplained.github.io/android/room/2020/10/03/room-backup-restore.html  를
https://smparkworld.com/blog/detail/26  를
https://www.sqlite.org/wal.html 를
https://www.sqlite.org/c3ref/wal_checkpoint_v2.html 를 참고했다.   

JournalMode.TRUNCATE로 생성하면 깔끔하게 하나의 db 파일로 관리된다.  하지만 그냥 기본값으로 지정하면 디바이스 메모리를 고려하여 더 낫게 동작하므로 강제로 TRUNCATE로 지정하지 않고 3개 파일 모두를 백업하도록 하겠다. 

Room.databaseBuilder(context, AppDatabase::class.java, name)
    .setJournalMode(RoomDatabase.JournalMode.TRUNCATE)
    .build()

 

백업하기 전에  wal_checkpoint를 실행해서 혹시 모를 정보도 모두 db 파일에 저장하도록 한다. 

interface UserDao {
    @RawQuery
    fun checkpoint(supportSQLiteQuery: SupportSQLiteQuery?): Single<Int>
}
userDao.checkpoint((SimpleSQLiteQuery("pragma wal_checkpoint(full)")))

 

실제로 백업을 실행하기 직전에 DB 연결을 close해야 안전할 듯.

AppDatabase.getInstance(activity).close()

 

DB 파일만 필요한 것이 아니라 다른 여러 정보가 필요하므로 meta.json 파일에 저장하여 같이 백업할 필요가 있다. 따라서 결국에는 zip 파일 형태로 백업을 하고, 복구도 zip 파일에서 하여야 한다. 

https://injunech.tistory.com/402  zip 파일 생성과 풀기는 여기를 참고했다. 

https://github.com/rafi0101/Android-Room-Database-Backup/blob/master/core/src/main/java/de/raphaelebner/roomdatabasebackup/core/RoomBackup.kt 
https://fastbikri.com/blog/implementing-backup-and-restore-feature-of-sqlite-database-to-comply-with-scoped-storage-android-11/  백업과 복구는 여기를 참고했다. 

 

top

posted at

2024. 6. 8. 23:06


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크