On 4/27/16, Albert Banaszkiewicz <Albert.Banaszkiewicz at tomtom.com> wrote:
> Hello.
>
> I am new here, thus I would like to apologize in advance if the question I
> am going to rise was already asked in the past.
>
> I am using SQLite 3.11.1 (actually it is a NDS consortium customized version
> based on it).
>
> According to documentation, in case of WAL mode enabled databases, final
> check-pointing is being done when the last connection to DB is about to be
> closed.
>
> We are running into the scenario, where we would like to have a complete
> control over the moment when check-pointing happens. This is easy in case of
> auto-check-pointing, where it can be completely disabled or customized (via
> hooks).
> However, it is possible that during the component life-time there is going
> to be no 'appropriate' moment to schedule it and if the user powers device
> down, we still want to avoid it since modern OSes typically expect running
> applications to terminate within the specified (several seconds usually)
> time intervals. Of course, we don't want to loose any data contained in the
> WAL journal as well and ideally, we would like to be still able to schedule
> check-pointing in the 'appropriate' time after reboot.
>
> So finally, the questions:
>
> 1. Is there a way to control (i.e. disable) check-pointing happening at DB
> closure ? (personally, I could not find anything like this in the code but
> perhaps I missed something)
> 2. If not, are there any plans to introduce it ? Or is it not feasible at
> all ?

There is no documented and supported way of preventing a checkpoint
when the last DB connection closes.  But you can work around that
simply by killing the process without ever calling sqlite3_close().

When you do that, it leaves the -wal and -shm files on disk.  The next
time any process connects to the database, it will read the entire
-wal file from beginning to end in order to reconstruct the -shm file.

-- 
D. Richard Hipp
drh at sqlite.org

Reply via email to