« ドイツ語多読本: Tine Mortier / Kaatje Vermeire: Marie und die Dinge des Lebens | トップページ | ドイツ語多読本: Torben Kuhlmann: Maulwurfstadt »

2016年1月24日 (日)

Kobo: データベースを修復する

kobo端末のデータベースが壊れたときの対処。
mobilereadを"kobo database disk image is malformed"などで検索すると山ほどヒットするので、データベースの障害に出くわす人もけっこういるはず。

修復するには基本、
1. ファクトリー・リセット
もしくは
2. ログアウトして、ログインし直す
(「設定」 > 「アカウント」 > 「楽天Kobo ログアウト」 ログインも同じ手順)
http://www.mobileread.com/forums/showpost.php?p=2494404&postcount=4

ということになるだろうが、ファクトリー・リセットは時間もかかるし、本も消えるし、普通はログアウト。

ログアウトのほうは本は消えないが、それでもメールアドレスやパスワードの入力からやり直しだし、同期に時間がかかったりする。
それに、Kobo eReader.confで設定したフルスクリーンやら本棚同期無効などの設定も消えるし、.kobo内のランチャーやらCFWのファイルやら自分で追加したファイルも消える(あるいは最後に同期を取った時の状態に戻るのかも?)

なので、自分でできる修復方法。
たぶんだらだら同期が終わるのを待つよりはやい。

◎修復方法の前に、データベース(.kobo/KoboReader.sqlite)のチェック方法
◯sqlite3を使う
Windowsの場合はsqlite3をインストールして、たぶんコマンドプロンプトから(http://www.sqlite.org/download.htmlのdllではなく、command line shellが入っているほう)。Macははじめから入っている?

KoboReader.sqliteを端末から持ってきて(もしくはフルパスでKoboReader.sqliteを指定)、

sqlite3 KoboReader.sqlite "PRAGMA integrity_check"

"ok"が出れば、問題なし。
"database disk image is malformed"というメッセージが出たら修復が必要。

Calibreを使う
Calirbreを起動して、KoboをUSBでPCに接続すると、勝手に上のチェックが行われる(あるいは、Kobo Utilities pluginをインストールしているからかも?)。
何もエラーが出なければとりあえず問題なし。
こちらもデータベースが壊れていたら、"database disk image is malformed"というメッセージが出て通信エラーになるので、要修復。

◎修復
ちょっと調べると、ダンプしてデータベースを作り直せば、修復できるという話がたくさん出てくる。たとえば、Calibreの作者さんも。
http://www.mobileread.com/forums/showpost.php?p=503757&postcount=2
ダンプして、sql文のテキストファイルを作り、それを元にデータベースを再構築する、という手順。

◯一挙にやるには、Kobo端末からKoboReader.sqliteをPCの適当な場所にコピーして(もしくは端末のKoboReader.sqliteをそのままフルパス指定で)

sqlite3 KoboReader.sqlite .dump | sqlite3 new_KoboReader.sqlite
とでもすると、新しいデータベースができあがるのだが・・・

ただし、エラーで空のデータベースができてしまうことがあるので注意が必要。このやり方で作り直したときは、できあがったデータベースのサイズをかならず確認すべきだろう。

◯なので、dumpした一時ファイルを確認してから、データベースを作り直す
1. dumpする

sqlite3 KoboReader.sqlite .dump > dump.txt

dump.txtをチェック。dump.txtの末尾が
COMMIT;
となっていればOK。

2. データベースを作り直す

cat dump.txt | sqlite3 new_KoboReader.sqlite
これで新しいデータベースができあがる。
(windowsの場合は、"cat dump.txt | ..." ではなく、"type dump.txt | ..."?)

もし、dump.txtの末尾が
ROLLBACK; -- due to errors
となっているいると、作り直したnew_KoboReader.sqliteの中身は空っぽになる。

この場合は、エディタで"ROLLBACK; -- due to errors"を"COMMIT;"に書き直してから作り直すと、データベースはできあがる。が、エラーでロールバックしたのを無視してデータベースを作ることになるわけで、問題が発生する可能性は残るかも。(参考「Kobo touchのKoboReader.sqliteを修復する」

ROLLBACKされたら、最初に挙げたログアウト方式でデータベースを更新したほうが安全かもしれない。

こんな感じだが、コマンドを打つのはちょっと、という人は、「Kobo: ひもづけなしで端末を使いたい」でも紹介したsqlitebrowserでダンプ・再構築作業はできるので、そちらで。(コマンド操作なら、上で書いたように1行か2行で終わるんだけど・・・)

1. dump(Export)
sqlitebrowserでKoboReader.sqliteを読み込んだら("Open Database")、
メニューの「File」 > 「Export」 > 「Database to SQL file...」 と進む。ダイアローグが現れるのでtalbleをすべて選択して「OK」、そして、適当な名前をつけて(dump.txtなど)保存。
Dbbrowser_export_2

2. 上述のように、ROLLBACKされてないか、dump.txtの末尾をチェックする

3. データベース作り直し(Import)
sqlitebrowserを起動したら、
・メニューの「File」 > 「Import」 > 「Database from SQL file...」 と進み、
Dbbrowser_import
・「Choose a file to import」のダイアローグが現れるので、さっき作ったdump.txtを指定して、「Open」。
・次に「Choose a filename to save under」のダイアローグが現れるので、保存するデータベースのファイル名を入力(new_KoboReader.sqliteなど)、そして「Save」。

あとは、できあがったnew_KoboReader.sqliteを端末のKoboReader.sqliteと入れ換える。

|

« ドイツ語多読本: Tine Mortier / Kaatje Vermeire: Marie und die Dinge des Lebens | トップページ | ドイツ語多読本: Torben Kuhlmann: Maulwurfstadt »

kobo」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Kobo: データベースを修復する:

« ドイツ語多読本: Tine Mortier / Kaatje Vermeire: Marie und die Dinge des Lebens | トップページ | ドイツ語多読本: Torben Kuhlmann: Maulwurfstadt »