2011年05月20日

データベースが壊れた

バックアップファイルを取っていなかった自分がいけないのだけれど、ようやくうまく稼動し始めたデータベースが壊れてしまい、全てのデータを失ってしまった。なんとも情けない話。
何のデータかというと、事業の販売管理データ。これまでずっと表計算(.xls形式。最初はMS Excelで、後にOpenOfficeのCalc)で管理してきたのだけれど、けっこう手間がかかって鬱陶しいのでデータベースに移行しようと思った。それが1ヶ月ちょっと前のこと。使うソフトはOpenOfficeのBase。これがLibreOfficeになってうまく動かなかったりと、いろいろ問題はあったのだけれど、ようやく少し前から順調に動くようになった。それまでは旧システムと併用していたのを、いよいよ完全移行だなあと思った矢先にデータが壊れてしまった。ファイルを開こうと思っても、開けない。無理に開くとCalcかWriterが立ち上がって文字化けしたテキストとして読み込んでしまう。これではどうしようもない。
バックアップを取っていなかったのは、ついこのあいだまで構築中で試行錯誤の只中だったから、バージョンがいくつもできるとややこしいと思ったからだ。だが、完全移行と思ったときに、まっさきにバックアップをとるべきだった。途中1回でもバックアップしておけば回復の見込みはあったのにと、悔やまれてならない。
で、嘆いてばかりいても仕方ないので、これを機に少しOpenOfficeのデータベースのデータ構造を勉強してみることにした。まず気がついたのは、実は拡張子.odbのファイルは、実はzipファイルだということ。だから、拡張子をzipに変えると中身をみることができる。この段階で既にデータは壊れていて、書庫マネージャではエラーで開くことができず、Squeezeでは開くことはできるのだけれど解凍はできない。弱ったなあと思って検索しているとzipファイルの修復ソフトがWindowsにあることがわかった(こちらの記事)。そこで仮想環境のWindowsにこのソフトをインストールして壊れたデータベースファイル(拡張子を.zipにしたもの)を修復すると、無事に解凍できるようになった。

このファイルの.odbに戻したらデータ復活、を期待したのだけれど、これは甘い考えだった。zipファイルの中身は、
Configurations2
database
forms
META-INF
reports
content.xml
mimetype
settings.xml

の4つのフォルダと3つのファイルから構成されている。壊れたデータを修復したファイルからは、content.xmlとsettings.xmlの2つのファイルが失われている。修復前のファイルにはこの2つは含まれているのだが、どうやらこの2つのファイルが読めないのがデータが壊れた原因らしい。
ちなみに、content.xmlにはデータベースやクエリ、フォームの名前やフィールドの情報が収録されているようだ。settings.xmlの方にはたいした情報はなさそうなので、content.xmlさえ回復できればどうにかなりそうだ。だから、仮に早い段階のものでもバックアップファイルがあれば、これを入れ替えることでデータは救出できたような気がする。けれど、大まかにはデータの構造は覚えているものの、ファイルやフィールドの名称をきっちり回復できるほどには私の記憶力はよくない。適当につくってやったのでは不整合を起こしてデータが読めないことになる。いくらか試行して、ここは断念せざるを得なかった。
次に、データの本体をテキストとして読めないかと思った。データの本体は、どうやらdatabaseフォルダ内のdataというファイルに格納されている様子だ。だが、これをテキストエディタで読もうとしても読めない。どうやら圧縮された特殊な形式になっている。いろいろ試して諦めかけたが、ふと、OpenOffice(あるいはLibreOffice)で読めないかと思いついた。やってみると、データの区切り情報がかなり派手に文字化けるものの、テキスト情報そのものはCalcのデータとして読み込むことができることがわかった。
ただし、データの構造がぐちゃぐちゃになってしまっている(これに道筋をつけるのがcontent.xmlで、それが失われているのだから当然と言えば当然なのだけれど)。だから、結局ここからデータを回復するのは断念。そして最終的な結論は、「壊れたものはどうしようもない。バックアップとっておかなかった自分がバカなだけ」というもの。
それでも、負け惜しみをいうなら、今回の失敗のおかげで.odb形式のデータにはだいぶ詳しくなった。こういう理解があれば、今後データを作り直したときに有形無形の役に立つ、かな?
posted by 松本 at 21:28| Comment(0) | Ubuntuでの失敗・トラブル | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。