android p备份数据库恢复后无法正常

我备份数据库只备份db文件和shred文件,将所有文件打包成一个文件,恢复就把这些东西解压出来。

Android8.0时备份数据库是没有问题,升级到9.0以后发现无法正常恢复了,开始怀疑压缩算法有问题,经过一系列排查最后发现坑在9.0直接使用db文件时如果db-shm文件和db-wal文件不匹配也无法使用。

解决方案:

备份的时候不经要备份db文件还要把db-shm和db-wal文件一起备份。具体什么原因还无法判断,可能是为了数据库安全吧。
 

-journal——回滚日志
回滚日志通常位于数据库文件所在的目录,一般在事务开始时创建,事务结束时删除(这取决于日志模式)

日志模式:
DELETE:默认的日志模式,一般在事务开始时创建回滚日志,事务结束时删除回滚日志。
PERSIST:事务结束时不删除回滚日志,而是在日志文件头部覆写0,这样也可以达到删除文件同样的效果,却减少了反复创建删除回滚日志的磁盘开销。
MEMORY:将回滚日志存储在内存而不是磁盘中,但因为在磁盘中没有用于恢复的文件,如果在事务中间发生崩溃或者掉电,那么整个数据库就有可能损坏。
OFF:禁用SQLite原子提交和回滚功能。
-wal——预写日志
作用与-journal文件一样,用于在WAL模式下操作。

当数据库连接首次打开时,wal文件就会被创建。当最后一次数据库连接被正常关闭时,wal文件就会被删除。如果最后一次数据库连接没有正常关闭,wal文件会保存下来,直到下一次打开数据库时才会自动删除。

shm——共享内存文件
共享内存文件用于提供一块共享内存给多个进程在WAL模式中访问相同的数据库。

发布了92 篇原创文章 · 获赞 27 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/zhuxingchong/article/details/88898730
今日推荐