2013-09-25 3 views
5

ios7 SQLite/Core Dataスタックの新しいWALデフォルト設定について、多くのスレッドを読んでいます。ios7 WALを使用したsqliteデータベースはメインデータベースファイルを同期しません

最初は良いアイデアのようでした...私のビジネスニーズに応じて、離れたWebサービスにデータベースコピーを実行する必要があります。現時点では、私はSQLiteファイルのみをバックアップしています。私が使用しているwebservice操作に2つのファイルを追加することはできません。これは、私のバックアップが明らかに最新ではないので、とても無意味であることを意味します。

他の人には、私には許容可能な回避策であるjournal_mode = DELETE(NSSQLitePragmasOption)を使用してWALを無効にすることをお勧めします。それでも、私はこれに慣れていません。かなり上品なパフォーマンスバンプに欠けているような気がする。

理想的には、コアデータ/ SQLiteにSHM/WALをメインデータファイルと同期させてバックアップを実行するように伝えたいと思っています。奇妙なプライベートAPIまたはドキュメント化されていないAPIを掘り起こすことなく、そうする方法はありますか?

+0

どのような解決方法がありますか? –

+0

私は同じ問題を抱えています。私はios6からios7に移行していますが、ios6には.sqliteファイルしか保存されていないようです。しかし、ios7には.shmと.walファイルがあります。私はfileWrapperを使用してファイルを1つのファイルに保存します。 iOS7で* .shmと* .walを無効にしていない場合、iOS6はiOS7にバックアップされたファイルを使用できません。 – JimZ

+0

簡単なオプション(以前のデフォルトモード)に行きました。私は良い解決策を見いだせなかった。 –

答えて

2

move the WAL data to the database fileには、データベースファイルを開き、SQL文PRAGMA wal_checkpoint(RESTART)を実行します。

+0

例を挙げてください。それはデータベースが必要なようにも見えますか?あなたはmanagedContextか何かからそれを得ることができますか? –

+3

コアデータを使用しているときにSQLiteと直接話すことは絶対にお勧めしません。あなた自身の利益のために、これにObjective Cのメソッドを使用することになっています。 –

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 
$ 
関連する問題