8年近くFirebirdに触れていなかったが、Delphi + Firebird Ver1.0で作成したプロジェクトの修正が発生したため久しぶりに使ってみた。
ここ数年は、SQLServer Express Editionがメインのデータベースで、言語もC#がメインだったので、使い慣れたC#+SQLServerに変えようかとも思ったが、当時のSQLのスキルが低すぎて手直しに時間がかかりそうなので、今回の修正分だけC#に変更しFirebirdをVer1.0から Ver2.5に変更することにした。
ロースペックのマシンではSQLServerが使えるようになるまでに10分以上待たされるケースがあるが、Firebirdは、起動・バックアップ・リストアの全てが速いので慣れの問題を差し引いても開発効率アップが期待できる。
8年前はFirebird=Delphiというイメージを持っていたが、Firebird .NET Providerが無料で使えるようになったのでFirebird=C#もありだな。 また、Delphi7ではUNICODEが使えないがC#だとFirebirdでUNICODEを使えるので社名や氏名に正しい文字が使用できるのでこのメリットも大きい。 正し、UTF8を使うとisqlで文字化けが発生するので注意が必要である。
http://www.firebirdsql.org/en/net-provider/
次にバージョン間のデータの互換性をテストしてみたが、残念ながらVer1.0(32Bit)とVer2.5(64Bit)では互換性がなさそうである。データベースファイルをコピーして旨くいくかと思ったがさすがに甘かった。 gbakでは "Invalid metadata detected. USE -FIX_FSS_METADATA option" というエラーが出るし何らかの変換作業が必要なようである。
ただし、これについてはFBExportというフリーのツールを使うと出来そうなのでトライしてみよう
FBExportのリンクは http://fbexport.sourceforge.net/fbexport.php
全てのテーブルに対してFBExportを実行すれば出来そうではあるが、テーブルが漏れる場合が心配なので、この方法は最終手段とする。
やはりバックアップファイル経由が間違いなさそうなので、バージョンを一気に上げずに試してみることにする。
Firebird Ver1.0ではSQLの基本機能が低く使いにくかったのと、gbakや大量のINSERTをisql経由で実行するとエラーで終わる場合があったためVer2.5では改善されていることを願う。
以下に忘れそうなFirebirdのコマンドを記述しておく
バックアップ例)
gbak -B -user "SYSDBA" -password "masterkey" "localhost:C:\Users\2\Documents\TEMP\ZIP.FDB" "E:\backup\ZIP.bak"
リストア例)
gbak -C -REP -user "SYSDBA" -password "masterkey" "E:\backup\ZIP.bak" "localhost:C:\Users\2\Documents\TEMP\ZIP.FDB"
メタデータのエクスポート例)
isql -x -u SYSDBA -p masterkey "localhost:C:\users\2\Documents\Temp\Zip.fdb"
パスワードの変更)
gsec -user SYSDBA -pass OldPass -mo SYSDBA -pw NewPass