tracのdbがぶっこわれた模様です

おひさしぶりです。


ちょっと放置してた trac をひさしぶりに覗いてみると

Trac detected an internal error:

DatabaseError: database disk image is malformed

まじかー。

リポジトリは見えるけどチケットのDBがぶっこわれている模様
どーせーっちゅうねん!!!pythonわからにょ。。。


とりあえずsqliteを攻めてだめだったらあきらめ。。。うーん。


まぁ、やれる事はやってみよう

integrity checkしてみる

$ sqlite3 trac.db "PRAGMA integrity_check;"
*** in database main ***
Multiple uses for byte 386 of page 638
SQL error: database disk image is malformed

うん。見事。

民間療法を試す

一回dumpしてimportしなおすという民間療法を試してみる

$ sqlite3 trac.db ".dump" | sqlite3 trac.db.new
$

あら、おとなしいこと。

で?民間療法の効果は?

$ sqlite3 trac.db.new "PRAGMA integrity_check;"
ok

ワロタ

てか仏様ありがとう!!!

と、思ったら???

さっそくウキウキ(死語)でtracを覗いてみると。。。

 Trac detected an internal error:

OperationalError: no such table: version

仏様のバカヤロウ!!!

versionがないだと?

作り直したDB

$ sqlite3 trac.db
SQLite version 3.3.6
Enter ".help" for instructions
sqlite> .tables
attachment         milestone          session            ticket_change
auth_cookie        node_change        session_attribute  ticket_custom
component          permission         system             wiki
enum               revision           ticket

元々のDB

$ sqlite3 trac.db.bak
SQLite version 3.3.6
Enter ".help" for instructions
sqlite> .tables
attachment         node_change        session_attribute  version
auth_cookie        permission         system             wiki
component          report             ticket
enum               revision           ticket_change
milestone          session            ticket_custom

versionだけじゃなくてreportもないじゃん。

version, reportの中には何が入っていたのか?

とりあえずいきなりselectとか恐いので行数を見てみる

sqlite> select count(*) from version;
21
sqlite> select count(*) from report;
8


ふむ。select * from...してみますかね。

とかいいながらdumpする

BEGIN TRANSACTION;
CREATE TABLE version (
    name text PRIMARY KEY,
    time integer,
    description text
);
INSERT INTO "version" VALUES('0.1.0-RC1', 1176906922, '');
INSERT INTO "version" VALUES('0.1.0-RC2', 1180434776, '');
INSERT INTO "version" VALUES('0.1.0-RC3', 1180642142, '');
INSERT INTO "version" VALUES('0.1.0-RC4', 1180646377, '');
INSERT INTO "version" VALUES('0.1.0', 1181046437, '');
INSERT INTO "version" VALUES('0.1.1', 1181301146, '');
INSERT INTO "version" VALUES('0.1.2', 1181568710, '');
INSERT INTO "version" VALUES('0.1.3', 1181847006, '');
INSERT INTO "version" VALUES('0.2.0', 1184591297, '');
INSERT INTO "version" VALUES('0.2.1', 1184757962, '');
INSERT INTO "version" VALUES('0.2.2', 1185174502, '');
INSERT INTO "version" VALUES('0.3.0', 1188560129, '');
INSERT INTO "version" VALUES('0.2.3', 1185350102, '');
INSERT INTO "version" VALUES('0.2.4', 1185428476, '');
INSERT INTO "version" VALUES('0.4.0', 1199775825, '');
INSERT INTO "version" VALUES('0.4.1', 1200373083, '');
INSERT INTO "version" VALUES('0.4.2', 1207314697, '');
INSERT INTO "version" VALUES('0.4.3', 1215505976, '');
INSERT INTO "version" VALUES('0.4.4', 1225958638, NULL);
INSERT INTO "version" VALUES('0.5.0', 1234940400, NULL);
INSERT INTO "version" VALUES('0.5.1', 1235031200, NULL);
COMMIT;

あぁ。そういう事?ふーん。


じゃ、reportは。。。割愛します。


まぁともあれこれ、貼り付ければいいだけじゃね?


という事でversionのdumpを直したつもりのDBへ貼り付ける。
貼り付いた。

tracを見てみる。。。。。


おおおおおおお、復活ぅぅぅぅぅ!!!!


reportはいらないのかな?
気持悪いのでreportもdumpを貼り付けておきました。



なんで一回でうまくいかなかったのかが謎だけど。。。
いやーよかったよかった。