没有WAL文件的Core Data .sqlite备份是否可以恢复为在WAL模式下运行?

时间:2017-12-03 05:29:57

标签: ios sqlite core-data restore wal

请耐心等待我 - 我将尝试在此问题中使用正确的术语。我有一个iOS应用程序,允许用户创建其Core Data支持的.sqlite数据库的备份已有好几年了。出于某种原因,回过头来,我将journal_mode的pragma选项设置为" MEMORY",这意味着过去几年中所做的每个备份都没有WAL或SHM文件。我正在重写我的所有数据库代码,并且我知道iOS的当前默认journal_mode是" WAL"。当我导入使用journal_mode" MEMORY"制作的备份时,我想以某种方式最终得到以WAL模式运行的文件(我希望所有新备份都是相同的 - 在WAL模式下)但我我不确定这是否可能。从未有过WAL或SHM文件的单个.sqlite是否可以强制开始创建它们?我正在尝试使用NSPersistentStore方法来创建备份并立即恢复数据,我记得读过整个过程中使用的选项(即journal_mode)需要保持一致(如果我能找到它,我会发布链接) )。我相信,因为我没有WAL文件,所以我需要使用" MEMORY"或"删除" journal_mode用于导入。但是,我不确定这是否意味着文件将永远不必在没有WAL文件的情况下运行,或者如果有什么我可以做以使其在WAL模式下运行。我希望这是有道理的 - 这对我来说有点混乱,但我很感激有关如何处理这个问题的任何想法。

1 个答案:

答案 0 :(得分:2)

只要您具有独占访问权限,您就可以随时更改数据库的日记帐模式;只需打开它,然后执行PRAGMA。 (事实上​​,这是启用WAL模式的唯一方法。)

请注意,只有WAL模式持久存储在数据库文件中;任何其他日志模式都是连接的属性;当打开非文件WAL时,它默认处于DELETE模式。