無料ブログはココログ

« (247)MindMapの考え方は○、インストラクターは× | トップページ | (249)ゴム足代替品:トンボのノック式消しゴム »

2008年5月31日 (土)

(248)200LXのDataBaseファイルが壊れた.

Scrn0000 ここ数日のことです。とつぜん、200LXのデータベースがファイルを読み込めなくなってしまいました。 

私は、200LXのDataBaseをおもにTODOとして使っています。TODOは「しなければならないことリスト」なんですが、私の場合、本屋さんでチェックをするべき「本」をTODOに書いていることが多いんです。

最初は、ちょっとパニックになってしまって、何がおこったのかわかりませんでした。データベースのレコードの数はわずかに1000くらいなので、アプリケーションのデータ上限にひっかかるはずがありません。Note部分も、32Kの制限を超えているはずもないんです。

Scrn0001 そこで、まずは、garlic で修復を試みました。 

   

Scrn0002 そしたら、あまりにひどく壊れているから修復できないというメッセージが表示されます。  

Scrn0003 しかたがないので、バイナリファイルをむりやりVZエディターに読み込んで、最近入力した文字列の部分だけを救い出しました。  

Scrn0004 この救い出したデータを、バックアップしてあるファイル(画像)に合体して、Scrn0005 壊れてしまったデータベースを復元(画像)しようと考えたんです。

   

P1020705 ところが、合成しようとすると、Mergeができません。 いつまでも、この画面のままで、「終了」しません。

   

Scrn0009 じゃあ、全データをExtractして別のデータベースとして保存しておこうと考えたのですが、、、、

Scrn0006Extractもできません。  どうも、ExtractとかMergeとかの機能は、新たにデータベースを作ることなので、壊れたレコードが含まれていると、どちらの機能も働かないらしいんです。

だったら、その特性を利用して、壊れたレコードを特定して、それを取り除けばデータベースファイルを正常なものに戻せるはずです。

ということで、壊れたレコードを特定するために、全レコードを少しづつextractしていくことにしました。

具体的には、約1000のレコードを半分に分けて、extractできる(壊れたレコードが含まれていない)ほう(500レコード)を、臨時のファイル名をつけて保存しました。

保存できない(500レコード)ほうをさらに半分にして、extractできるほう(250レコード)を保存しました。そして、また、その半分(125レコード)を保存し、、、、というのを繰り返して、数個の壊れているレコードを特定しました。

Scrn0008 壊れているレコードをみてみると、フィールドタイプを[date]にしてあるところに、余分な空白が入り込んでいたことがわかりました。つまり、本来とフィールドタイプ違うデータに変わってしまっていたわけです。 

変わってしまっていたフィールドを修正することで、正しいデータベースに修復することができました。

最終的に、修復したデータベースに、復元したデータを合体(Merge)して、壊れる前のデータベースを再構築しました。

データベースを修復したあとで、壊れていたデータベースとファイル容量を比べてみたら、壊れていたデータベースは、正常なものの約1.5~2倍の容量になっていました。

結局のところ、200LXのデータベースがなぜ壊れてしまったのかは不明のままですし、、壊れたデータベースがなぜ肥大していたのかも不明のままです。

今回のことでわかったのは、一見正常に見えるデータベースでも、壊れたレコードが含まれていると、mergeもextractもできないということです。また、ファイル容量も変わってしまっているということです。

この特性は、200LX上で、同じデータベースエンジンを使っているNotetakerもPhonebookもAppointも同じではないかと思います。

« (247)MindMapの考え方は○、インストラクターは× | トップページ | (249)ゴム足代替品:トンボのノック式消しゴム »

7. 200LXの操作」カテゴリの記事

コメント

こういう場合には、ガーリックは使えないのでしょうか。

たこ さん、コメントをありがとうございました。

ガーリックが使えるとよかったのですが、本文にも書いたとおり、ガーリックでは修復できませんでした。

ガーリックでデータベースが修復できるのは、壊れている程度が軽くて、条件がよいときだけのようです。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

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

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/175746/41381317

この記事へのトラックバック一覧です: (248)200LXのDataBaseファイルが壊れた.:

« (247)MindMapの考え方は○、インストラクターは× | トップページ | (249)ゴム足代替品:トンボのノック式消しゴム »