Thanks so much, this helps. A saw the backup API's but they looked overly complicated for my situation. A little clarification.
It should be noted that my program is a single thread, and I can assume no other programs or threads should be accessing my database file. Since SQLite auto commits transactions and I won't have any transactions open, I'm thinking there shouldn't be any reason I couldn't just copy the file without an exclusive lock, but it sounds like I may be missing something? I'm assuming the BEGIN EXCLUSIVE will get a file lock. Will the BEGIN EXCLUSIVE statement block, waiting until it can get an exclusive lock, or if it fails to get an exclusive lock, will it immediately return to the caller (if called by sqlite3_get_table() for example)? Are there other ways to lock or sync the database than this? How would this work?: runsql("sync database somehow?"); //do I need this? runsql("BEGIN EXCLUSIVE"); copydatabasefile(); runsql("ROLLBACK"); Thanks! Josh > On Fri, Sep 10, 2010 at 12:09:58PM -0700, Josh scratched on the wall: >> Hello all, >> >> I think this is a simple question... >> >> I am using the C api to open and read/write a SQLite database (ie. >> sqlite3_open_v2() etc.). I would like to have a function in my program to >> backup the database file (using the OSes copy command). > > You might also be able to use the backup APIs. > > See: http://sqlite.org/c3ref/backup_finish.html > >> I can guarentee >> that my program will not write to the database. Do I need to sync or lock >> the database file before I do the copy command? > > That would be a good idea. > >> I believe that as long as >> I have no open write transactions the file should be fine to copy, is this >> correct? > > No, not exactly. Transactions are normally lazy about getting locks. > To force the transaction to get the locks, issue the command: > > BEGIN EXCLUSIVE > > If that works, you know nobody else can touch the database. You're > then free to copy it. Once the copy is done, you can rollback the > transaction. > > -j > > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users