無料ブログはココログ

« (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)ゴム足代替品:トンボのノック式消しゴム »

5. 200LXの操作(シスマネ内)」カテゴリの記事

コメント

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

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

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

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

コメントを書く

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

トラックバック


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

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