InterBase資料庫檔案損壞的修復方法

上海赛亿数据恢复發表於2024-07-09

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兩個程式,如果有可能,將上述所有步驟做成批處理檔案,和這兩個程式複製到一起,這樣就可以一次性執行之,也便於反覆使用。

相關文章