摘 要:應用系統的重要數據一般都存儲在數據庫中,為了避免這些數據遭到破壞或者丟失,加強數據庫的備份就很有必要。采用ASP.NET技術,在VS.NET_2003和SQL SERVER 2000環境下,應用C#語言和SQLDMO組件設計并實現了數據庫的自動備份功能,不僅保證了系統中數據的安全,也方便了用戶的操作;最后給出并分析了實現方法的關鍵代碼。
關鍵詞:ASP.NET;數據庫;SQL分布式管理對象;自動備份
中圖分類號:TP309.3文獻標識碼:B
文章編號:1004-373X(2008)08-118-03
Implement of Database Automatic Backup in Application Program
WANG Xifeng,ZHANG Xiaoluan
(Baoji University of Arts Sciences,Baoji,721007,China)
Abstract:Nowadays,much important data of application systems are stored in databases,in order to avoid losing or destroying the data,it is significant to strengthen the functions of database′ backup function.Under VS.NET_2003 and SQL Server 2000 condition,the article implements database automatic backup manners by C# and SQLDMO,the ordinary users can operate the database conveniently.Moreover,it is assured the security of database.Finally,the article presents and analyzes some main source codes of the instance.
Keywords:ASP.NET;database;SQLDMO;automatic backup
收稿日期:2007-10-16
1 引 言
對于任何應用系統而言,數據的安全性和可靠性都是至關重要的。但在計算機系統中普遍存在硬件故障、軟件錯誤、操作失誤等危及數據安全的因素,為了避免數據遭到破壞或丟失帶來不可挽回的損失,不論是C/S還是B/S結構的應用系統,都應該加強數據庫的備份功能以確保系統重要數據的安全。通常,數據庫系統都提供了備份功能,但其操作復雜而且需要一定的專業知識,并不適合普通用戶。因此,在應用系統中通過程序給普通用戶提供操作簡便且功能強大的數據庫管理功能是很有必要的。
2 數據庫管理
備份是數據庫管理的重要功能,文獻[1]調用數據庫實用工具命令完成Oracle、Sybase的普通備份;文獻[2]給出了應用ASP技術實現SQL數據庫遠程備份和恢復的方法;文獻[3]提出并論證了數據庫實時備份的優勢與安全性;在文獻[4]中設計并實現了常用的數據庫本地和異地等多種方式的備份和恢復功能,滿足了用戶的基本需求;不足的是這些功能都需要用戶實時手工操作才能進行,給用戶使用帶來一些不便。事實上,數據庫備份是一項需要定期和重復進行的工作,因而作為一種輔助的備份形式,自動備份的優勢是顯而易見的。
自動備份就是在固定的時間,系統根據用戶的實際需求,自動啟動備份作業對數據庫進行備份,用戶僅需要配置一次自動備份的信息即可。在本文中,基于SQLDMO組件,在B/S結構下編程實現了3種方式的自動備份功能,進一步完善了數據庫管理的功能,用戶可以根據自己的實際情況來選擇使用。
3 自動備份的設計與實現
3.1 關鍵技術
SQLDMO是SQL Server的COM組件,擁有60多種對象和1 000多種方法,是SQL企業管理器的應用程序接口,其核心對象按照企業管理器的基本分層進行組織,可以根據對象的屬性和與對象關聯的方法編寫各種應用程序管理SQL Server服務器;同時,ASP.NET是功能強大的服務器端技術,其開發的應用系統不僅結構清晰,而且更易于維護和擴展。因此,本文的應用程序是基于B/S結構開發的,所有頁面均采用ASP.NET實現。編程實現時分為WEB和BLL兩層,其中WEB層是前臺,通過調用后臺的功能函數實現自動備份;BLL層作為后臺則封裝了如創建和刪除作業、備份以及獲取備份信息等功能函數。
3.2 建立與數據庫的連接
由于SQLDMO是來自COM對象的SQLDMO.dll,在使用前需要將SQLDMO的類型庫添加到C#的引用中,然后創建SQLDMO對象的實例,設置對象的方法以連接到SQL服務器上,最后運用該對象的方法實現功能。在實現自動備份前,首先需要應用SQLServer對象的connect()方法建立系統與數據庫服務器的連接,其主要代碼如下[2,5]:
Private SQLDMO.SQLServer server = 1;//創建一個對象
server.Connect(serverName,login,pwd); //和數據庫系統建立連接
…
server.DisConnect(); //完成操作后斷開和數據庫的連接
3.3 自動備份的設計與實現
在實現數據庫自動備份時,采用定時自動備份的方式,需要在BLL層使用SQLDMO組件創建SQLServe和Job的實例對象,再應用其方法和屬性完成獲取備份信息函數GetMessage()、創建作業CreatJob()和刪除作業RemoveJob()等功能函數,然后在實現WEB層的自動備份方式時,調用相應的函數直接創建或撤銷SQL Server 2000→企業管理器→管理→SQL Server代理→作業下的一個定時作業。圖1給出了自動備份的頁面效果圖:
圖1 數據庫自動備份頁面
在圖2中,啟動自動定時備份功能以后,用戶只要選擇好備份方式(每天,每周,每月)、備份文件保存路徑、備份時間等參數,確認后便相應地在SQL Server中新加了一個自動定時備份的新作業,備份文件將按照用戶配置信息按時自動備份到相應的目錄下。
3.3.1 每天定時備份的實現
每天定時備份就是在每一天的某個固定時間,系統自動執行備份作業將數據庫信息備份到用戶選定的目錄下。實現時,首先從頁面獲取存儲路徑path、備份方式type、備份時間hour,minute,second等相關信息,然后調用BLL層的dayback()等函數來完成。選擇備份目錄時,用戶可以使用系統默認的目錄,也可以選擇服務器上現有的目錄或自己新建目錄來存儲備份文件,選擇存儲目錄如圖2所示。
選擇好存儲目錄以后,就可以設置每天定時備份的其他配置,確認后就可以在SQL Server代理下創建一個新的作業并刪除以前的其他作業,其關鍵代碼如下[2,5,6]:
private SQLDMO.Job oJob = 1;//創建一個作業實例
…
SQLDMO.JobStep oJobStep = 1;//添加作業步驟備份數據庫文件
oJob.Name = \"Backup_DbCida\";//新建作業名
server.JobServer.Jobs.Add(oJob);//添加作業
oJob.BeginAlter();
oJobStep.Command =\"declare @filename nvarchar(100)\" +\"set \" + savepath +\"print @filename BACKUP DATABASE [DbCida] TO DISK = @filename WITH NOINIT ,NOUNLOAD ,NAME = N′DbCida備份′,NOSKIP ,STATS = 10,NOFORMAT\";//備份數據庫
oJob.JobSteps.Add(oJobStep);//添加作業步驟
…
oJob = server.JobServer.Jobs.Item(\"Backup_DbCida\");//得到備份類型
SQLDMO.JobSchedule schedule = oJob.JobSchedules.Item(\"backup\");
oJob = server.JobServer.Jobs.Item(\"Backup_DbCida\");//得到每天調度計劃的詳細信息
string retStr = schedule.Schedule.ActiveStartTimeOfDay.ToString();//得到備份時間
schedule.Name = \"backup\";//調度任務名稱
….
BLL_Backup backup = new BLL_Backup();//根據備份信息備份
backup.RemoveJob();//判斷是否已有作業,有的話刪除
backup.JobStep(type,\"DbCida\");//根據類型新建作業
backup.dayback(hour,minute,second,starttime);//調用函數進行每天定時備份
backup.DisConnect();//完成備份后斷開和數據庫的連接
在圖2中,用戶確認所選的各項備份信息后,若自動定時備份作業創建成功的話,將彈出一個提示框告訴用戶作業添加完成。
圖2 選擇、創建備份目錄
[BT4+*2]3.3.2 每周定時備份的實現
每周定時備份,即在一周中選擇固定一天的某個時間,自動執行作業將數據庫信息備份到用戶選定的目錄下,備份目錄的選擇和每天備份類似。實現時,首先從頁面得到存儲路徑path、每周備份方式type和備份的具體時間等詳細信息,然后調用weekback()等功能函數完成。在用戶確認各項備份信息后,就成功地設置了一個每周備份的新作業,進行每周備份的關鍵代碼如下[2,5,6]:
private SQLDMO.Job oJob = 1;//創建一個作業實例
oJob = new SQLDMO.JobClass();
.……..
oJob = server.JobServer.Jobs.Item(\"Backup_DbCida\")//;得到周備份詳細信息
SQLDMO.JobSchedule schedule = oJob.JobSchedules.Item(\"backup\");
week = schedule.Schedule.FrequencyInterval.ToString();//得到備份信息是星期幾
string retStr = schedule.Schedule.ActiveStartTimeOfDay.ToString();//得到備份時間
schedule.Schedule.ActiveStartDate = int.Parse(starttime);//定時備份開始時間
………..
backup.JobStep(type,\"DbCida\");//根據類型新建作業
backup.WeekBack(hour,minute,second,starttime,backweek);//進行每周備份
3.3.3 每月定時備份的實現
每月定時備份就是在一月中選擇固定的一天的某個時刻,系統自動將數據庫信息備份到用戶選定的路徑下,備份目錄的選擇與每天備份時類似。在實現時,從頁面得到存儲路徑、每月備份方式、備份具體時間等詳細信息,然后調用BLL層的monthback()等函數來完成該功能。進行每月備份的主要代碼如下[2,5,6]:
oJob = server.JobServer.Jobs.Item(\"Backup_DbCida\");//得到月備份詳細信息
string date1 = schedule.Schedule.FrequencyInterval.ToString();//得到備份具體日期
string retStr = schedule.Schedule.ActiveStartTimeOfDay.ToString();//得到備份時間
……………
SQLDMO.JobSchedule schedule = new SQLDMO.JobScheduleClass();
schedule.Name = \"backup\";//調度任務名稱
schedule.Schedule.ActiveStartDate = int.Parse(starttime);//定時備份開始時間
………..
backup.JobStep(type,\"DbCida\");//根據類型新建作業
backup.MonthBack(hour,minute,second,starttime,backdate);
在確認備份信息后,就可以成功設置一個每月備份的新作業,當然用戶也可以隨時根據具體情況的變化更改自己的自動備份設置。需要注意的是,在進行自動備份時,用戶一定要保證選擇存放備份文件的目錄必須有足夠的空間;另外,數據庫服務器上的SQL Server代理也必須設置為自動隨機啟動,否則設定的自動定時備份作業將不被執行。[LL]
3.4 停用自動備份
當用戶決定不需要使用定時自動備份功能時,可以選擇圖2中的“停止定時備份”單選按鈕來完成相應功能,如圖3所示:
圖3 停止自動定時備份
實現的主要代碼如下[5,6]:
…
backup.RemoveJob();//根據作業名刪除所有作業
4 結 語
在目前Internet非常普及而網絡又不太安全的環境下,加強數據庫的備份功能有著十分重要的現實意義。本文中,我們應用SQLDMO組件在ASP.NET環境下編程實現了數據庫備份功能的自動化,方便了用戶操作;同時,也為應用程序客戶端實現數據庫維護自動化提供了一個解決方法,具有一定的實用價值。接下來,將繼續實現數據庫的差異備份和事務日志備份等功能,進一步完善數據庫管理功能。
參 考 文 獻
[1]鄧健青,石崗.應用程序中數據庫備份與恢復的實現[J].計算機應用研究,2004(5):143144.
[2]王德剛,潘新,王德強,等.通過ASP實現SQL數據庫的遠程備份和恢復[J].內蒙古農業大學學報,2005,26(3):8386.
[3]鄭阿奇.SQL Server 2000 數據庫實時備份[J].計算機工程與設計,2006,27(1):126128.
[4]王西鋒,張曉孿,李乃乾.基于SQLDMO的數據庫備份和恢復的設計與實現[J].陜西理工學院學報,2007,23(3):4650.
[5]Microsoft SQL Server Books Online[Z].http://msdn2.microsoft.com/zhcn/library/ms131955.aspx,2005.
[6]李萬寶.ASP.NET技術詳解與應用實例[M].北京:機械工業出版社,2005.
作者簡介 王西鋒 男,1978年出生,漢族,陜西渭南人,講師,碩士。主要從事計算機網絡應用技術的研究。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文