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