FirebirdというDBを修復する必要に迫られた話

スポンサーリンク

とあるソフトの中で使用されていたFirebirdというデータベースが壊れたっぽく、対応を迫られた。Firebirdの日本語情報も少なかったため、そのときにとった対応を最低限メモとして残す。

f:id:kojikoji75:20150113211050j:plain
photo credit: AndiH via photopin cc

サマリー

1.Firebirdに触れることになった背景
2.Firebirdの特徴
3.Firebirdの基本的な使い方
4.Firebirdのバックアップ・修復(←メイン)

1.Firebirdに触れることになった背景

医療業界の話になるが、介護認定の際には「主治医の意見書」というものの提出が求められる。この意見書を作成・管理するためのソフトの一つに「医見書」がある。「医見書」は日本医師会が日医総研に命じてオープンソースソフトウエアとして開発させたORCAプロジェクトによる成果物の一つ。(その他の成果物の有名なものに「日医標準レセプトソフト」がある。)

f:id:kojikoji75:20150113202625p:plain

この「医見書」が使用しているデータベースソフトが件の「Firebird」であった。
ユーザより依頼があって数台にダウンロード&インストール&データベース設定をして以来、全く触ったこともなかったこのソフトだが、ある日ユーザから「更新しようとするとエラーが出る」との障害報告を受け、調査した結果、どうやらデータベースが壊れているらしいことがわかった。

MySQLのrepairみたいなコマンドがきっと用意されているはず!と思い、FirebirdというDBを触わるにあたっての最低限の前提情報を調べてみた。

2.Firebirdの特徴

  • オープンソース
  • 軽量で、設定や管理が簡単なのに強力
  • ストアドプロシージャとトリガーをフルサポート
  • 非力なハードウェアでも十分に動作する
  • 1データベース:1ファイルの構造のためわかりやすい
  • バックアップの際には1ファイルをコピーするだけ

日本ではあまり普及していないようだが、海外ではかなりの普及率を誇る(それ故に日本語の情報は少ない模様)。

3.Firebirdの基本的な使い方

今回の環境はWindows7 + Firebird2.0。
Firebirdには「Firebird ISQL Tool」というツールがあり、ここからデータベースをいろいろ触わることができる。

下記にFirebird ISQL Toolのチュートリアルっぽいものがある。MySQLでいうところのMySQLモニタを使用する感覚で使用可能。
http://tech.firebird.gr.jp/firebird-jp-doc/qsg15-ja/qsg15-databases-ja.html

4.Firebirdのバックアップ・修復

gfixとgbakコマンドで壊れたDBの修復を試みて、最終的にはデータを取り出し、それを正常なDBに戻すという方法が一般的であるようだ。

とりあえずgfixによる修復を試してみる。コマンドプロンプトから操作。

使用前にFirebirdのbinフォルダにパスを通しておくと楽だが、自分の場合は今回の件はすぐに解決し、二度とFirebirdは触らない気がしたのでパスは通さず。

>gfix -v -f -user sysdba -password masterkey “d:\ikensyo\data\ikensyo.fdb”

ちなみに引数は下記の通り。

引数 説明
-v validate:修復実行の指定。未使用領域の開放と破損DBのレポート
-f full:レコードとページの修復と、未割り当てエリアの
フラグメントも行われる

これで返ってきた結果は…

database file appears corrupt ()

  • bad checksum
  • checksum error on database page 26899

チェックサムエラーで修復が完了していない模様。

f:id:kojikoji75:20150113202454p:plain

そこで引数を変えてみる。

>gfix -m -f -i -user sysdba -password masterkey “d:\ikensyo\data\ikensyo.fdb”

ちなみに引数は下記の通り。

引数 説明
-m mend:修復時に破損レコードを使用不可としてマークする
-i ignore:修復時にチェックサムエラーを無視する

f:id:kojikoji75:20150113202547p:plain

結果、一応修復完了。

スキップされた部分はどうしようもできないので、もうこれ以上何も考えないことにする。今後は定期的にバックアップをとるということで。

Firebird 徹底入門

Firebird 徹底入門

Firebird―オープンソースデータベースの導入と運用の実際

Firebird―オープンソースデータベースの導入と運用の実際

タイトルとURLをコピーしました