2017-12-03 211 views
1

請耐心等待 - 我會嘗試在這個問題中使用正確的術語。我有一個iOS應用程序,允許用戶現在創建其Core Data支持的.sqlite數據庫的備份。出於某種原因,遙想當年,我爲journal_mode爲「MEMORY」設置選項編譯指示,這意味着每個已經取得了過去幾年的備份沒有WAL或SHM文件。我正在重寫我的所有數據庫代碼,並且我知道iOS的當前默認journal_mode是「WAL」。當我導入與journal_mode「MEMORY」做了備份,我想與該文件在WAL模式(我希望所有新的備份是一樣的 - 在WAL模式)莫名其妙地結束了,但我不知道,如果這甚至有可能。一個沒有WAL或SHM文件的.sqlite可以被迫開始創建它們嗎?我試圖用NSPersistentStore方法來創建備份,現在恢復的數據,看完記得,在整個過程中使用的選項(即journal_mode)需要保持一致(我將發佈的鏈接,這一點,如果我能找到它)。我相信,因爲我沒有WAL文件,所以我需要使用「MEMORY」或「DELETE」journal_mode進行導入。但是,我不確定這是否意味着該文件將永遠不需要WAL文件就能運行,或者我可以做些什麼來使其在WAL模式下運行。我希望這是有道理的 - 這對我來說有點令人困惑,但我希望對如何解決這個問題有任何想法。沒有WAL文件的核心數據.sqlite備份可以恢復到WAL模式嗎?

回答

2

您可以隨時更改數據庫的日誌模式,只要你有獨佔訪問;只需打開它,然後執行PRAGMA。 (事實上​​,這是爲了讓WAL模式的唯一方法。)

請注意,只有WAL模式的持久存儲在數據庫中的文件;任何其他日記模式都是連接的屬性;當打開非文件WAL時,它默認處於DELETE模式。

+0

真棒。謝謝。 – SAHM