InterBase数据库是一种中级数据库,它短小精悍免维护,可以满足百万记录级别的数据库应用,又有开放源码版本,个人认为是一种比较适合中小型数据库应用环境的数据库管理系统(DBMS)。Delphi内建了对InterBase数据库的支持,因此用Delphi编写以InterBase为后台数据库的软件很是方便。
在实际应用中,偶尔会碰到InterBase数据文件损坏的问题。损坏的原因多种多样,可能是由于读写文件的时候突然断电导致文件损坏,或者可能是不当的操作引发的;如果没有合适的工具,很多情况下损坏的数据库文件就只有废弃不用,造成数据的丢失,其实,InterBase本身提供了一组修复命令行程序,如果能合理的利用它们,的确可以修复大部分损坏的InterBase数据库文件。
假设现在有一个损坏的InterBase数据库文件IBBadDB.gdb,修复方法如下:
1、确定InterBase正常运行,而受损的数据库文件IBBadDB.gdb没有被任何程序打开;
2、将安装以后的InterBase文件夹下的bin子文件夹内的两个程序gfix.exe,gbak.exe拷贝到受损的数据库文件IBBadDB.gdb所在的文件夹内;
3、打开DOS命令行界面,用DOS命令先进入IBBadDB.gdb所在的目录(文件夹)下;
4、定义两个全局变量,分别赋值为IBBadDB.gdb的用户名和密码(默认情况下,是SYSDBA和masterkey),接下来的修复程序能使用它们顺利打开受损的数据库文件:
SETISC_USER=SYSDBA
SET ISC_PASSWORD=masterkey
5、检查数据库文件是否损坏:
gfix-v -full IBBadDB.gdb
6、如果检查结果中报告有问题,运行下面修复文件的命令:
gfix-mend -full -ignore IBBadDB.gdb
7、然后检查此时的数据库文件是否已经修复:
gfix-v -full IBBadDB.gdb
8、如果检查结果中仍旧有问题,应该运行一次完整的数据库备份和恢复命令(此例中假设备份以后的数据库文件名称是IBBadDB_bak.gbk),首先是备份:
gbak-backup -v -ignore IBBadDB.gdb IBBadDB_bak.gbk
9、如果上述备份命令的运行遇到问题,是因为冗余数据收集(garbage collection)而产生的,那就继续执行下面的(数据库冗余清理)命令:
gbak-backup -v -ignore -garbage IBBadDB.gdb IBBadDB_bak.gbk
10、如果上述命令的运行遇到问题,是因为边际事务处理(limbotransaction,可能翻译的不准确)的缘故,那就在上述命令行参数中加上“-limbo”开关:
gbak-backup -v -ignore -garbage -limbo IBBadDB.gdb IBBadDB_bak.gbk
11、最后根据这个修复的备份文件,产生一个新的数据文件(此例中假设新数据库文件名称是IBBadDB_new.gdb),
gbak-create -v IBBadDB_bak.gbk IBBadDB_new.gdb
注:
1、此方法经过实际应用中多次实践的考验,证明相当有效,对InterBase数据库文件的修复成功率至少在75%以上;
2、以上步骤基本是是翻译至原始资料,但根据笔者实际应用中的经验,上述每一步的执行均对其他步骤无干扰,所以无论上一步执行结果如何,下一步都应该运行一次;
3、这个修复方法依赖于InterBase系统提供的gfix.exe,gbak.exe两个程序,如果有可能,将上述所有步骤做成批处理文件,和这两个程序拷贝到一起,这样就可以一次性运行之,也便于反复使用。