2013-09-25 62 views
5

Tôi đã đọc nhiều chủ đề về cài đặt mặc định WAL mới trong ngăn xếp dữ liệu SQL ios7/Core.cơ sở dữ liệu sqlite ios7 với WAL không bao giờ đồng bộ hóa tệp cơ sở dữ liệu chính

Có vẻ như đây là một ý tưởng hay ngay từ đầu ... Mặc dù tôi cần thực hiện một bản sao cơ sở dữ liệu cho một dịch vụ web từ xa theo thời gian tùy theo nhu cầu kinh doanh của tôi. Hiện tại tôi chỉ sao lưu tệp SQLITE và tôi không thể thêm 2 tệp khác vào hoạt động webservice mà tôi đang sử dụng. Điều này có nghĩa là bản sao lưu của tôi rõ ràng là không cập nhật, vì vậy khá vô nghĩa.

Những người khác khuyên tôi nên tắt tính năng WAL bằng cách sử dụng journal_mode = DELETE (NSSQLitePragmasOption), đối với tôi, giải pháp có thể chấp nhận được. Tuy nhiên, tôi không cảm thấy thoải mái với điều này. Nó cảm thấy như tôi đang bỏ lỡ một vết sưng hiệu suất khá tốt.

Lý tưởng nhất là tôi muốn có thể cho Core Data/SQLite đồng bộ hóa SHM/WAL với tệp dữ liệu chính và sau đó thực hiện sao lưu. Có cách nào để làm như vậy mà không cần đào tạo các API riêng tư hoặc không có giấy tờ không?

+0

r u có giải pháp nào không? –

+0

Tôi đang gặp vấn đề tương tự. Tôi đang chuyển từ ios 6 sang ios 7, ios6 dường như chỉ có tệp .sqlite để lưu trữ dữ liệu. Nhưng ios7 có tệp .shm và .wal. Tôi sử dụng fileWrapper để lưu các tập tin vào một tập tin duy nhất. Nếu trong iOS7 tôi không tắt * .shm và * .wal, thì iOS6 không thể sử dụng tập tin được sao lưu trong iOS7 – JimZ

+0

Tôi đã chọn tùy chọn dễ dàng (chế độ mặc định cũ). Tôi không tìm được giải pháp tốt. –

Trả lời

2

Để move the WAL data to the database file, mở tệp cơ sở dữ liệu và thực thi câu lệnh SQL PRAGMA wal_checkpoint(RESTART).

+0

Bạn có thể cung cấp một ví dụ được không? Có vẻ như nó cũng cần cơ sở dữ liệu? Bạn có thể lấy nó từ managedContext hay gì đó không? –

+3

Không bao giờ có ý tưởng hay khi nói chuyện trực tiếp với SQLite khi sử dụng Dữ liệu cốt lõi. Bạn phải sử dụng các phương pháp Objective C cho điều này, vì lợi ích của riêng bạn. –

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 
$