Hello,

is there anybody willing to help analyze corrupted database for
possible bug in SQLite?

It is a database file taken from one of our test machines and it is
only few days old at most. The database file was only ever accessed
with SQLite 3.7.0.1. It has page size of 1024, WAL mode,
synchronous=FULL and incremental vacuum. No power failure happened on
that machine. Apparently somewhere during the course of execution of
our application the database free page list become corrupted. This is
for the third time this week the same error happened, but only this
time I have a copy of the database file. It is 887 Mb big (although
the real data consume less than 2 Mb) and so it is rather problematic
to provide the file. A copy is available at
http://www.emclient.com/temp/mail_data.zip.

The database was accessed on Windows machine using SQLite 3.7.0.1
64-bit build. The following statements are the only ones that were
executed against the database besides SELECTs and initial schema
definition:

INSERT INTO LocalMailContents (
   "id", "partName", "contentType", "contentId",
   "contentDescription", "contentTransferEncoding",
   "contentMD5", "contentDisposition", "contentLanguage",
   "contentLocation", "partHeader", "partBody",
   "synchronizationKey", "contentLength")
   VALUES
   (@id, @partName, @contentType, @contentId, @contentDescription,
    @contentTransferEncoding, @contentMD5, @contentDisposition,
    @contentLanguage, @contentLocation, @partHeader, @partBody,
    @synchronizationKey, @contentLength)
UPDATE LocalMailContents SET synchronizationk...@synchronizationkey
WHERE i...@id AND partna...@partname
UPDATE LocalMailContents SET parthead...@partheader WHERE i...@id AND
partna...@partname
UPDATE LocalMailContents SET partbo...@partcontent WHERE i...@id AND
partna...@partname
DELETE FROM LocalMailContents WHERE id IN (<list of oids>);
PRAGMA freelist_count;
PRAGMA incremental_vacuum(<a number between 24 and 4096>);

The error messages produced by "pragma integrity_check" are

*** in database main ***
Main freelist: invalid page number 866828
Page 396 is never used
Page 473 is never used
Page 14780 is never used
Page 14915 is never used
Page 153649 is never used
Page 210894 is never used
Page 319247 is never used
Page 397006 is never used
Page 416545 is never used
Page 416636 is never used
Page 416704 is never used
Page 416705 is never used
Page 416706 is never used
Page 416707 is never used
Page 416708 is never used
Page 416710 is never used
Page 416711 is never used
...

I tried to locate the missing freelist pages in the database file and
they definitely were there at some point, but I am not familiar enough
with the file format to track the whole freelist and find where the
corruption exactly happen. All I know is that page 388 is corrupted
and points to a location outside of the database file.

Thanks,
Filip Navara
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to