Error database disk image is malformed sqlite の解決方法
スポンサーリンク
このドキュメントの内容は、以下の通りです。
- はじめに
- MediaWikiとリレーショナルデータベースの関係
- database disk image is malformed sqlite との遭遇
- 日本語の意味は?
- 直すための試行錯誤
- 解決方法
- 解決方法2
- 注意事項
- 予防措置
はじめに
SQLiteとは、エスキューライトと読みます。 SQLiteは、ファイルベースのコンパクトで軽量なリレーショナルデータベースエンジンです。オラクルやMySQL/MariaDBといったメジャーのリレーショナルデータベースがありますが、それらは、データベースサービスのプログラムが必要です。 SQLiteは、 Mysqlサーバなどのサーバプロセスを必要としません。プログラムからSQLiteのライブラリを通して、直接、データベースのファイルを読み書きします。MediaWiki のデータベースに使っている、 SQLite でエラーが発生しました。SQLiteのデータベースが壊れた、と思いました。データベースが壊れたときに、データベースを修復するために、いろいろ試そうとされると思いますが、何かする前に、データベースのファイルのバックアップをとっておくことをお勧めします。修理をするために、いろいろ試しているうちに、自分で破壊してしまうこともあると思います。バックアップは非常に大事だと思います。
また、このようなエラーと遭遇する前に、バックアップをとっておくべき、ということを付け加えておきます。
MediaWikiとリレーショナルデータベースの関係
MediaWikiとは、WikiPedia でも採用されている Wikiのエンジンです。MediaWikiは、オープンソースソフトウェアの1つです。
MediaWikiを利用して、 Wiki(ウィキ) を作成しています。 MediaWikiでは、書き込まれたデータを管理するために、リレーショナルデータベースを利用します。たとえば、データの書き込み先に MySQL を利用することができます。いろいろなリレーショナルデータベースを利用でき、その1つに SQLiteもあります。
database disk image is malformed sqlite との遭遇
MediaWikiの SQLiteのデータベースにアクセスしたときに、
database disk image is malformed sqlite
というエラーが発生しました。
データベースにアクセスが完全にできないわけではないのですが、特定のテーブルにアクセスしようとすると、上記のエラーが出ました。
日本語の意味は?
そもそも、このメッセージの意味はなんでしょうか?それとなく、データベースディスクイメージがおかしいよ、という風に見えますね。
database disk image is malformed sqlite
Google翻訳さんに日本語の意味を教えてもらいました。
データベースのディスクイメージが不正な形式のsqliteです
要するに、SQLite のデータベースディスク・ファイルが壊れているようです。
直すための試行錯誤
最初にも書きましたが、いろいろ試行錯誤する前に、SQLiteのデータベースファイルのバックアップをとっておくようにしてください。バックアップがない場合、データベースの中身やデータベースのファイルを破壊してしまうと、元の状態に戻すのは難しいでしょう。SQLiteには、 PRAGMA integrity_check があります。 英単語のintegrityというのは、完全性といった意味ですが、 integrity check は、整合性チェックということのようです。
SQLiteで pragma integrity_check を実行して、完全性/整合性のチェックをしてみると、エラーが出てきました。 integrity check は、問題がなければ、 OK が返ってきます。
解決方法
やり方は、一度、データベースをダンプして、それから新しいデータベースにインポートします。まずは、sqlite コマンドを利用して、データベースファイルを開き、以下の命令を利用して、データベースをダンプします。
sqlite dbname sqlite> .mode insert sqlite> .output db.sql sqlite> .dump sqlite> .exit
sqliteコマンドを利用して、新しいデータベースを作ります。ここでは sqlite3 を利用しました。
sqlite3 newfile < db.sql
そして、データベースを入れ替えます。
これは、古いファイル(1)を別のファイル名(2)にして、バックアップとしてとっておきます。新しいファイルを「古いファイル(1)」にします。
mv dbname old mv newfile dbname
解決方法2
もう少し簡単な方法は、以下のコマンドです。このやり方のほうが、新しいファイルを簡単に作成できます。sqlite3 dbname .dump | sqlite3 newfile mv dbname old mv newfile dbname
注意事項
しかしながら、必ずしも、うまくいくわけでもないようです。500MB ほどある データベースファイルをダンプしたところ、 10MB のファイルができました。
おそらく、途中までしか読めなかったのではないでしょうか。
予防措置
日頃からデータベースのバックアップは、きちんと とっておいたほうがいいでしょう。データが壊れてからでは、何もできません。また、バックアップから元に戻せることも、確認しておくべきです。バックアップをとってあるから大丈夫と思っていても、ちゃんとバックアップがとれているかどうかは、確認してみないとわかりません。また、バックアップを戻すときには、試験環境を作ってやることをお勧めします。間違った手順で、本番の環境を破壊してしますと困ります。スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12