Will Leshner <[EMAIL PROTECTED]> wrote:
> On Jan 20, 2006, at 7:41 AM, [EMAIL PROTECTED] wrote:
>
> > The database might be completely unusable. It depends on
> > which writes completed and which had not at the time of the
> > crash.
>
> Am I right in thinking that that would be more likely to happen in,
> say, a hardware failure, and less likely to happen if the crash
> occurs because of a bug in my code? In other words, if every SQLite
> call returns successfully, is it unlikely that the database is in an
> unusable state?
>
Deleting a hot journal after a power loss or OS crash is more
likely to result in severe database corruption, but database
corruption is possible from deleting a hot journal after an
ordinary program crash.
Here is one scenario for generating reasonably severe database
corruption by crashing a program:
(1) Start a transaction
(2) Make *many* changes to the database - so many that
the internal cache overflows and has to spill to disk.
(3) Crash the program.
(4) Delete the journal file
Another way to get database corruption from a program crash
is to crash the program during a COMMIT and then delete the
journal. This might happen, for example, if one thread is
doing a COMMIT and a different thread happens to segfault at
the same time. (Yet another reason to not used threads!)
--
D. Richard Hipp <[EMAIL PROTECTED]>