Web環(huán)境下的SQL Server數(shù)據(jù)備份與恢復(fù)
實現(xiàn)磁帶備份數(shù)據(jù)的功能有兩方面的困難:首先,MS SQL Server(以下簡稱SQL)所提供的數(shù)據(jù)庫的整體備份及恢復(fù)功能不能直接滿足本系統(tǒng)要求的數(shù)據(jù)滾動備份。其次,需要解決如何在Web環(huán)境下實現(xiàn)磁帶數(shù)據(jù)備份功能。
利用SQL中現(xiàn)有的數(shù)據(jù)庫備份和恢復(fù)的命令以及NT中的IDC技術(shù),實現(xiàn)SQL數(shù)據(jù)庫中數(shù)據(jù)滾動備份到磁帶的功能。本系統(tǒng)所實現(xiàn)功能既能保證近一段時間的數(shù)據(jù)總在數(shù)據(jù)庫中,又能保證系統(tǒng)管理員可隨時恢復(fù)備份數(shù)據(jù),供用戶查詢。本文所實現(xiàn)的功能具有普遍的意義,特別適用于中小型企業(yè)開發(fā)基于Intranet技術(shù)的管理信息系統(tǒng)。
2、磁帶數(shù)據(jù)備份及恢復(fù)的工作過程
為了充分利用SQL中現(xiàn)有的數(shù)據(jù)庫備份與恢復(fù)功能,以降低實現(xiàn)磁帶數(shù)據(jù)備份的代價,我們特地在硬盤上建立了一個與磁帶的容量相當(dāng)?shù)臄?shù)據(jù)庫,我們稱之為橋數(shù)據(jù)庫,如FJJDBBK。可方便地實現(xiàn)數(shù)據(jù)的滾動備份了。其工作過程是:管理員把某月的數(shù)據(jù)從主數(shù)據(jù)庫移到橋數(shù)據(jù)庫中;然后用SQL的備份功能把橋數(shù)據(jù)庫備份到磁帶上。用戶需要查看磁帶中的歷史數(shù)據(jù)時,系統(tǒng)又用SQL的恢復(fù)備份功能把磁帶中的數(shù)據(jù)恢復(fù)到橋數(shù)據(jù)庫中,用戶直接在橋數(shù)據(jù)庫中查閱歷史數(shù)據(jù)。此外,在數(shù)據(jù)備份到磁帶后,在進(jìn)行下次數(shù)據(jù)備份前,必須清空備份數(shù)據(jù)庫中的數(shù)據(jù)。為了提高工作效率,我們建立了一個空白橋數(shù)據(jù)庫(沒有數(shù)據(jù)時的橋數(shù)據(jù)庫)。每次進(jìn)行磁帶備份數(shù)據(jù)之前,就用此空白數(shù)據(jù)庫恢復(fù)橋數(shù)據(jù)庫。空白數(shù)據(jù)庫文件建立后要保存好,不可隨便刪除。
建立該備份空白數(shù)據(jù)庫過程為:先建立主數(shù)據(jù)庫FJJDBBK,然后在FJJDBBK中建立與當(dāng)前數(shù)據(jù)庫中一樣結(jié)構(gòu)的表。建立這些表結(jié)構(gòu)時最好的方法是先用Enterprise Manager的Object菜單下的Generate SQL Scripts功能生成建立這些表的Scripts文件,然后選擇FJJDBBK數(shù)據(jù)庫,用Enterprise Manager的Tools菜單下的Query Analyzer功能運行該文件,就建立了這些所需表。顯然,這時的FJJDBBK為空數(shù)據(jù)庫。我們再利用備份命令或運行Tools菜單下的Backup/Restore功能備份該空數(shù)據(jù)庫。
3、磁帶數(shù)據(jù)備份及恢復(fù)的實現(xiàn)
在NT中,Web服務(wù)器IIS(Internet Information Server)提供了完善的訪問SQL的技術(shù)IDC。IDC是一個DLL文件(HTTPODBC.DLL),其實,它通過ODBC接口可訪問各種數(shù)據(jù)庫。在具體實現(xiàn)Web頁面訪問數(shù)據(jù)庫時,需建立兩種類型的文件:IDC文件(*.idc)和HTML模板文件(*.htx)。IDC文件用于控制數(shù)據(jù)庫的訪問。它一般由兩部分組成:
◆文件頭
指明系統(tǒng)數(shù)據(jù)源,模板文件名,用戶名及口令。有時還包括一些有關(guān)檢索數(shù)據(jù)庫方面的參數(shù)設(shè)置。
◆文件主體
這部分內(nèi)容以“SQLStatement:”為起始標(biāo)志,然后寫操縱數(shù)據(jù)庫的標(biāo)準(zhǔn)SQL語句。注意,每條語句以“+”號開頭,它作為區(qū)分每條SQL語句的標(biāo)志。需要強(qiáng)調(diào)的是,對于MS SQL數(shù)據(jù)庫,IDC可用其任何標(biāo)準(zhǔn)的命令及函數(shù)。例如定義變量,控制數(shù)據(jù)流等(見實例)。
IDC的處理流程如下:首先,Web服務(wù)器IIS分析瀏覽器傳來的URL字符串。如果當(dāng)前字符串以“*.idc”結(jié)尾,就將該IDC請求傳給IDC接口模塊,IDC將依次讀取并解釋IDC文件的內(nèi)容,通過ODBC模塊向數(shù)據(jù)庫服務(wù)器發(fā)服務(wù)請求;數(shù)據(jù)庫服務(wù)器將執(zhí)行結(jié)果通過ODBC接口返回給IDC模塊。接著IDC模塊把結(jié)果插入指定的的模板文件,形成一個實際的HTML文件交給IIS;最后由IIS將該HTML返回瀏覽器。
在Web信息系統(tǒng)中要實現(xiàn)完整的磁帶數(shù)據(jù)備份及恢復(fù)功能需要實現(xiàn)以下三個功能:“數(shù)據(jù)備份”功能、“數(shù)據(jù)恢復(fù)”功能和“清理數(shù)據(jù)”功能。“數(shù)據(jù)備份”功能在保證系統(tǒng)管理員操作的前提下,根據(jù)用戶輸入的所要備份數(shù)據(jù)的起始日期和終止日期,從主數(shù)據(jù)庫把要備份的數(shù)據(jù)轉(zhuǎn)存到橋數(shù)據(jù)庫中,然后運用SQL的DUMP命令實現(xiàn)該功能。“數(shù)據(jù)恢復(fù)”功能則在保證系統(tǒng)管理員操作的前提下,提供“恢復(fù)橋數(shù)據(jù)庫”和“恢復(fù)空白橋數(shù)據(jù)庫”的功能。只要運用SQL的LOAD命令就可實現(xiàn)上述功能;同樣,“清理數(shù)據(jù)”功能也要保證在系統(tǒng)管理員操作的前提下,根據(jù)用戶輸入的所要刪除數(shù)據(jù)的起始日期和終止日期,運用SQL中的DELETE命令刪除當(dāng)前數(shù)據(jù)庫中數(shù)據(jù)。因此。為了“數(shù)據(jù)備份”功能和“清理數(shù)據(jù)”功能的順利實施,要求每個表都有歸檔時間字段。
實現(xiàn)本系統(tǒng)磁帶數(shù)據(jù)備份與恢復(fù)功能的部分IDC文件如下:
/*BKUP.IDC*/
Datasource: Web SQL
Template: BKUP.htx
Username: sa
Password: sa
SQLStatement:
+if %jb%=1
+/*判斷系統(tǒng)維護(hù)員*/
+SELECT qsrq=convert(varchar(12),getdate(),1),
zzrq=convert(varchar(12),+dateadd(day,1,getdate()),1)
+/*預(yù)置起始日期和終止日期*/
/*BKUPCZ.IDC*/
Datasource: Web SQL
Template: BKUPCZ.htx
Username: sa
Password: sa
SQLStatement:
+INSERT FJJDBBK.DBO.JKLD SELECT * FROM FJJDB.DBO.JKLD
+where convert(varchar(12),gdsj,1)>=′%QSRQ%′
and convert(varchar(12),gdsj,1)< =′%ZZRQ%′
…………
+/*把當(dāng)前數(shù)據(jù)庫中選定的數(shù)據(jù)轉(zhuǎn)存到橋數(shù)據(jù)庫中*/
+DUMP DATABASE FJJDBBK TO TAPE = ′.tape0′ WITH INIT, NOUNLOAD
+/*備份數(shù)據(jù)*/
+SELECT TS=′備份數(shù)據(jù)庫操作已完成!′
/*HUIF.IDC*/
Datasource: Web SQL
Template: HUIF.htx
Username: sa
Password: sa
SQLStatement:
+if %jb%=1
+begin
+LOAD DATABASE FJJDBBK FROM TAPE=′.TAPE0′ WITH
NOUNLOAD
+/*恢復(fù)備份數(shù)據(jù)*/
+SELECT TS=′恢復(fù)數(shù)據(jù)庫操作已完成!′+/*
+end
/*QLSJKCZ.IDC*/
Datasource: Web SQL
Username: sa
Password: sa
Template: QLSJKCZ.htx
SQLStatement:
+delete FJJDB.DBO.JKLD
where convert(varchar(12),gdsj,1)>=′%QSRQ%′ and
convert(varchar(12),gdsj,1)<=′%ZZRQ%′
…………
+/*刪除當(dāng)前數(shù)據(jù)庫中選定的數(shù)據(jù)*/
+SELECT TS=′刪除操作已完成!′
在本系統(tǒng)中,主數(shù)據(jù)庫保證存儲4個月數(shù)據(jù)。系統(tǒng)規(guī)定,系統(tǒng)管理員每月月初備份上月的數(shù)據(jù)到磁帶。然后刪除前第4個月的數(shù)據(jù)。實現(xiàn)了當(dāng)前數(shù)據(jù)與歷史數(shù)據(jù)的同步查閱,這是Web系統(tǒng)的一個顯著的優(yōu)點。
4、結(jié)束語
本文介紹了一種特殊的數(shù)據(jù)磁帶備份與恢復(fù)的具體實現(xiàn)方法。需要指出的是,數(shù)據(jù)庫備份操作是數(shù)據(jù)庫管理系統(tǒng)非常重要的環(huán)節(jié),而數(shù)據(jù)庫備份操作過程又比較復(fù)雜,因此,要求我們必須建立完善的規(guī)章制度,由專業(yè)的系統(tǒng)管理員進(jìn)行數(shù)據(jù)庫備份和恢復(fù)操作。
