34

I have some sqlite version3 db3 files I copied off a live running production system (I know bad sysadmin bad sysadmin) for various reasons. Is there some sqlite command I can run that will verify that all the data can be read out of these files (I don't mind if it takes a while).

I was considering hacking up some perl which dumps out all data and then re-imports it into new files. I think sqlite will throw an exception if it encounters corrupt data. Is there a better way?

I'm CentOS 5.3 and sqlite-3.3.6-2

1
  • 1
    "bad sysadmin bad sysadmin"? What's that?
    – John
    Oct 9, 2021 at 11:22

1 Answer 1

47

I think you want to try:

pragma integrity_check;

From the documentation:

This pragma does an integrity check of the entire database. The integrity_check pragma looks for out-of-order records, missing pages, malformed records, missing index entries, and UNIQUE and NOT NULL constraint errors. If the integrity_check pragma finds problems, strings are returned (as multiple rows with a single column per row) which describe the problems. [...]

See also the PRAGMA quick_check command which does most of the checking of PRAGMA integrity_check but runs much faster.

2
  • 4
    See also sqlite.org/faq.html#q21
    – Teddy
    Jul 9, 2009 at 10:36
  • Doing this for a gnucash database 13M in size. It returned Ok almost instantly. Seemed too quick to actually check anything, but maybe that database is small potatoes. Gnucash is crashing, which is why I am checking. May 11, 2023 at 0:14

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .