資源描述:
《VFP數(shù)據(jù)庫的備份和恢復(fù).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、VFP數(shù)據(jù)庫:Howto備份與恢復(fù)VFP數(shù)據(jù)庫文件的備份形式一般有兩種,一種是以記錄格式,即以VFP表格(.dbf)進(jìn)行存儲(chǔ),這種方法的優(yōu)點(diǎn)是表的數(shù)據(jù)被按照原樣進(jìn)行備份,備注字段、通用字段等特殊字段不必進(jìn)行特殊處理即可很容易地實(shí)現(xiàn)數(shù)據(jù)備份和數(shù)據(jù)恢復(fù),缺點(diǎn)是記錄格式一旦丟失,將造成記錄無法恢復(fù);另一種是將記錄以文本格式進(jìn)行備份,優(yōu)點(diǎn)是文本數(shù)據(jù)比較穩(wěn)定,不容易被損壞,缺點(diǎn)是備注字段、通用字段等特殊字段需要進(jìn)行特殊處理,不容易實(shí)現(xiàn)自動(dòng)備份和恢復(fù)。小型數(shù)據(jù)庫備份與恢復(fù)的原理 本文所說的小型數(shù)據(jù)庫是指庫文件容量
2、不超過一張磁盤的數(shù)據(jù)庫,對(duì)這種數(shù)據(jù)庫,我們常用的備份方法是用:Copyto<路徑backup1>命令直接拷貝庫記錄,并生成backup1.dbf的表文件,如果原數(shù)據(jù)表有備注字段還會(huì)同時(shí)生成一個(gè)名為backup1.fpt的備注文件,我們?cè)儆肅opyindexindexfilenameto<目標(biāo)路徑filename1>命令備份索引文件即可?! 〉诙N方法是用Copyto<路徑backup1.txt>命令將原數(shù)據(jù)表備份成為一個(gè)文本文件backup1.txt,并用Copystructureto<路徑ba
3、ckup1>命令將原數(shù)據(jù)表的結(jié)構(gòu)備份為backup1.dbf,如果原數(shù)據(jù)表有備注字段的話也會(huì)生成備注文件backup1.fpt。注意在存儲(chǔ)成文本文件時(shí),如原數(shù)據(jù)表有備注字段時(shí),拷貝命令不要用Copyto<路徑backup1.txt>sdf,因?yàn)檫@樣無法生成備注文件backup.fpt?;謴?fù)的辦法是用Copystructureto命令恢復(fù)庫結(jié)構(gòu),再用Appendfrom<路徑backup1.txt>命令,即可將數(shù)據(jù)記錄包括備注字段一并恢復(fù)。注意這種情況下一定要保證備份時(shí)生成的備注文件backup1.f
4、pt是完好的。大型數(shù)據(jù)庫備份與恢復(fù)的原理 1.問題的提出 在一個(gè)系統(tǒng)中,當(dāng)一個(gè)庫文件大于1.44Mb時(shí),無法用一張軟盤進(jìn)行備份時(shí),本文稱之為大型數(shù)據(jù)庫的備份與恢復(fù)問題,這恰恰是最常見的情況?! ?.分析 用Copyto〈路徑filename〉[〈scope〉]命令可以將目前工作區(qū)中數(shù)據(jù)庫的記錄全部或部分拷貝到目標(biāo)數(shù)據(jù)庫文件中去?!磃ile〉是目標(biāo)文件名,如果不給目標(biāo)文件指定擴(kuò)展名的話,系統(tǒng)默認(rèn)擴(kuò)展名為.dbf;用〈scope〉關(guān)鍵字控制記錄拷貝操作,將適當(dāng)?shù)挠涗洈?shù)備份到軟盤上,這樣就可以解決一張
5、磁盤裝不下的問題。而恢復(fù)的動(dòng)作正好相反,只要利用命令將備份到各個(gè)磁盤的數(shù)據(jù)記錄合并就可以了?! ?.具體實(shí)現(xiàn)步驟 (1)對(duì)容量進(jìn)行計(jì)算 設(shè)定默認(rèn)路徑為軟盤所在驅(qū)動(dòng)器,用diskspace()函數(shù)計(jì)算備份軟盤的剩余空間,用recsize()函數(shù)對(duì)需要備份的數(shù)據(jù)庫中的每條記錄長(zhǎng)度進(jìn)行計(jì)算,然后用測(cè)試得的磁盤可用空間除以記錄的長(zhǎng)度,確定該軟盤剩余空間能夠備份數(shù)據(jù)庫中多少條記錄,當(dāng)然這是最理想的情況即沒有備注字段等特殊字段,否則還得考慮每條備注字段的大小。 (2)將指定的數(shù)據(jù)記錄備份到軟盤 如果磁盤空間
6、所能備份的記錄數(shù)目大于數(shù)據(jù)庫現(xiàn)有的實(shí)際記錄數(shù)目時(shí),直接用Copyto〈file〉備份。否則先移動(dòng)記錄指針到開始備份的記錄號(hào)上,然后用Copyto〈file〉Next〈備份記錄數(shù)〉備份,下一張盤備份時(shí),讓指針后移到需備份的記錄處。 (3)作好備份盤號(hào)、記錄數(shù)等標(biāo)記 為了備份盤管理和以后恢復(fù)時(shí)能夠按正確的順序進(jìn)行,我們?cè)诳截愅旰?,要將每一張盤的備份情況存入備份設(shè)置文件Bak.dbf中,以便恢復(fù)程序能夠識(shí)別備份盤。 (4)恢復(fù)過程 恢復(fù)時(shí)讀取備份設(shè)置文件以確認(rèn)插入正確的備份磁盤,將原庫中的記錄全部刪除
7、,直接用Append命令將備份盤上的數(shù)據(jù)加入到數(shù)據(jù)庫中,當(dāng)考慮庫結(jié)構(gòu)損壞時(shí),先恢復(fù)庫結(jié)構(gòu)再恢復(fù)數(shù)據(jù)。備份與恢復(fù)示例 1.以數(shù)據(jù)表的形式進(jìn)行備份 建立一個(gè)Bak.dbf文件(程序中需要用到),其數(shù)據(jù)庫結(jié)構(gòu)如下:字段名字段類型寬度diskinfo字符10diskno整型4 (1)備份程序 以數(shù)據(jù)表的形式進(jìn)行備份的程序如下: settalkoffsetsafeoffcleaNUMOFDISK=0sele1use<備份的數(shù)據(jù)庫的路徑+名稱>RECSIZE=RECSIZE()+2800RECOUNT=R
8、ECCOUNT()sele2use<路徑Bak.dbf>zapsele1GOTOPdowhil.not.eof()?'請(qǐng)插入第'+STR(NUMOFDISK+1,3,0)+'張備份盤,然后按任意鍵繼續(xù)'wait''SETDEFATOA:DISKSP=DISKSPACE()RECNUM=DISKSP/RESIZEFILE=SYS(3)FILENAME='A:'+FILECOPYTO&&FILENAMENEXTRECNUMSETDEFATO