On 2018/05/08 9:37 AM, Donald Shepherd wrote:
I've long assumed that when using the online backup API on a SQLite
database, other processes will not be able to write to the source database
for the duration of the sqlite3_backup_step call.  However under some
testing I've been performing, I've found that this doesn't appear to be the
case.  Instead writes are prevented for a very small subset of that time,
if at all.

Is that the expected behaviour, or is there a flaw in my testing
somewhere?  What defines the subset of time if it is correct?

I'm testing a WAL database if that affects it.

Expected and documented indeed. The basic rule that backup abides by is this:

"Copy the database in a completely wholesome state to the destination."
"If the data changes (and it can) then restart the backup process from start on the new data state."

This works well for 90% of cases, but care is to be exercised for a really big + busy database (where writes are likely within the period of backup), the backup can infinitely restart. If this is the case, the controlling software needs an intervening step - and I don't think it can be done with an immediate transaction either, because the backup too will wait for that, but this is not tested by me, I might be wrong.

It would actually be real nice if the backup API had a parameter or flag like "sqlite3_lockduringbackup".



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to