VFP數(shù)據(jù)庫文件備份與恢復(fù)

字號:

VFP數(shù)據(jù)庫文件的備份形式一般有兩種,一種是以記錄格式,即以VFP表格(.dbf)進行存儲,這種方法的優(yōu)點是表的數(shù)據(jù)被按照原樣進行備份,備注字段、通用字段等特殊字段不必進行特殊處理即可很容易地實現(xiàn)數(shù)據(jù)備份和數(shù)據(jù)恢復(fù),缺點是記錄格式一旦丟失,將造成記錄無法恢復(fù);另一種是將記錄以文本格式進行備份,優(yōu)點是文本數(shù)據(jù)比較穩(wěn)定,不容易被損壞,缺點是備注字段、通用字段等特殊字段需要進行特殊處理,不容易實現(xiàn)自動備份和恢復(fù)。
    小型數(shù)據(jù)庫備份與恢復(fù)的原理
    本文所說的小型數(shù)據(jù)庫是指庫文件容量不超過一張磁盤的數(shù)據(jù)庫,對這種數(shù)據(jù)庫,我們常用的備份方法是用: Copy to < 路徑\backup1> 命令直接拷貝庫記錄,并生成backup1.dbf的表文件,如果原數(shù)據(jù)表有備注字段還會同時生成一個名為 backup1.fpt的備注文件,我們再用 Copy index indexfilename to <目標(biāo)路徑\filename1> 命令備份索引文件即可。
    第二種方法是用 Copy to <路徑\backup1.txt> 命令將原數(shù)據(jù)表備份成為一個文本文件 backup1.txt ,并用 Copy structure to <路徑\backup1> 命令將原數(shù)據(jù)表的結(jié)構(gòu)備份為backup1.dbf, 如果原數(shù)據(jù)表有備注字段的話也會生成備注文件backup1.fpt。注意在存儲成文本文件時,如原數(shù)據(jù)表有備注字段時,拷貝命令不要用 Copy to <路徑\backup1.txt> sdf,因為這樣無法生成備注文件backup.fpt?;謴?fù)的辦法是用 Copy structure to 命令恢復(fù)庫結(jié)構(gòu),再用 Append from <路徑\backup1.txt> 命令,即可將數(shù)據(jù)記錄包括備注字段一并恢復(fù)。注意這種情況下一定要保證備份時生成的備注文件backup1.fpt是完好的。
    大型數(shù)據(jù)庫備份與恢復(fù)的原理
    1.問題的提出
    在一個系統(tǒng)中,當(dāng)一個庫文件大于1.44Mb時,無法用一張軟盤進行備份時,本文稱之為大型數(shù)據(jù)庫的備份與恢復(fù)問題,這恰恰是最常見的情況。
    2.分析
    用 Copy to 〈路徑\filename〉[〈scope〉] 命令可以將目前工作區(qū)中數(shù)據(jù)庫的記錄全部或部分拷貝到目標(biāo)數(shù)據(jù)庫文件中去。〈file〉是目標(biāo)文件名,如果不給目標(biāo)文件指定擴展名的話,系統(tǒng)默認(rèn)擴展名為.dbf;用〈scope〉關(guān)鍵字控制記錄拷貝操作,將適當(dāng)?shù)挠涗洈?shù)備份到軟盤上,這樣就可以解決一張磁盤裝不下的問題。而恢復(fù)的動作正好相反,只要利用命令將備份到各個磁盤的數(shù)據(jù)記錄合并就可以了。
    3.具體實現(xiàn)步驟
    (1)對容量進行計算
    設(shè)定默認(rèn)路徑為軟盤所在驅(qū)動器,用diskspace()函數(shù)計算備份軟盤的剩余空間,用recsize()函數(shù)對需要備份的數(shù)據(jù)庫中的每條記錄長度進行計算,然后用測試得的磁盤可用空間除以記錄的長度,確定該軟盤剩余空間能夠備份數(shù)據(jù)庫中多少條記錄,當(dāng)然這是最理想的情況即沒有備注字段等特殊字段,否則還得考慮每條備注字段的大小。
    (2) 將指定的數(shù)據(jù)記錄備份到軟盤
    如果磁盤空間所能備份的記錄數(shù)目大于數(shù)據(jù)庫現(xiàn)有的實際記錄數(shù)目時,直接用 Copy to 〈file〉備份。否則先移動記錄指針到開始備份的記錄號上,然后用 Copy to 〈file〉 Next 〈備份記錄數(shù)〉備份,下一張盤備份時,讓指針后移到需備份的記錄處。
    (3) 作好備份盤號、記錄數(shù)等標(biāo)記
    為了備份盤管理和以后恢復(fù)時能夠按正確的順序進行,我們在拷貝完后,要將每一張盤的備份情況存入備份設(shè)置文件Bak.dbf中,以便恢復(fù)程序能夠識別備份盤。