2013-10-20

SQLITE 3 "Error: database disk image is malformed" は、私のせいであった

PHP 5 で、Sqlite 3 を PDO を利用して操作しておりました。

 *** in database main ***
 On tree page 2 cell 3: invalid page number 112
 On tree page 2 cell 3: Child page depth differs
 On tree page 2 cell 4: Child page depth differs
 Error: database disk image is malformed

たかだかテーブル 1 つ(1000行インサートした程度)で、まだ 100kB のファイルサイズで、もう綻び!?無償だし、Lite (お気軽)だからって SQLite 脆弱すぎ、使えないなぁ...と憤慨。しかし、解せないのは途中で vacuum しても、データ処理の順番を変えても、いつも同じ内容データを処理しようとしたときに壊れてしまう。

データ内容が悪いのかな、UTF-8データを扱っていて、sqlite は既定で UTF-8 を扱う設定だし(pragma encodingで確かめても UTF-8 と表示される)、文字列中にコントロールコードでも混じって壊れたのか?

原因は、PHP のほかのコードエラーが発生して PHP スクリプトの動作が停止したので、SQLITE エンジンの処理も途中で強制終了してしまったためみたい。

まりSQLiteデータベースが壊れる原因は、データベース操作のものではなくて(まったく別の個所で)、PHPエラー場合があるということです。

  • http://anond.hatelabo.jp/20131020004606 あれから数時間かけて、結局PHPエラーもないのにSQLITEの例のエラーが出てくる。 TRANSACTIONでくるんでもだめだわ。時間返せよ。 初めからぼろぼろに見せと...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん