我在ios7 SQLite / Core数据堆栈中读过很多关于新WAL默认设置的帖子。
首先看起来好主意......虽然我需要根据我的业务需求不时地向远程Web服务执行数据库副本。目前我只备份SQLITE文件,我无法将其他2个文件添加到我正在使用的webservice操作中。这意味着我的备份显然不是最新的,因此毫无意义。
其他人建议我应该使用journal_mode = DELETE(NSSQLitePragmasOption)禁用WAL,这对我来说是一个可接受的解决方法。不过,我对此并不满意。感觉就像我错过了相当不错的表现。
理想情况下,我希望能够告诉Core Data / SQLite将SHM / WAL同步到主数据文件,然后执行备份。有没有办法在不挖掘疯狂的私有或未记录的API的情况下这样做?
答案 0 :(得分:2)
要move the WAL data to the database file,请打开数据库文件并执行SQL语句PRAGMA wal_checkpoint(RESTART)。
答案 1 :(得分:2)
$ sqlite3 yourFile.sqlite
SQLite version 3.7.12 2012-04-03 19:43:07
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> PRAGMA wal_checkpoint(RESTART);
0|20|20
sqlite> .exit
$