摘要:數字化校園網系統的數據庫存儲學校日常運作的各種數據,系統必須提供有效的備份和恢復能力,以確保數據庫在出現錯誤后,數據能夠盡快的可以被應用所訪問。
關鍵詞:Delphi;SQLDMO;WINRAR;MD5;MS SQL
中圖分類號:TP3文獻標識碼:A 文章編號:1009-3044(2010)21-5672-02
Digital Campus Network Backup Solution for MS SQL Database
DENG Jie-hai, ZHONG Cai-hua, ZHOU Hong-juan
(Jiangxi College of Traditional Chinese Medicine, Fuzhou 344000, China)
Abstract: Digital Campus Network System database to store all data in the daily operation of schools, the system must provide an effective backup and recovery capabilities to ensure that the database error, the data that can be applied as soon as possible accessed.
Key words: Delphi; SQLDMO; WINRAR; MD5; MS SQL
在圖1中,表示層的客戶端正常情況下,通過業務邏輯層的應用服務器訪問數據層的數據中心的數據。如果數據中心癱瘓或出現錯誤,客戶端可通過圖1中的業務邏輯層的備份服務器,訪問備份數據中心的數據。將圖1數據中心的數據安全可靠地傳送到備份數據中心這一過程所使用到的SQL-DMO、WinRar和MD5加密等技術是文章介紹的重點。
1 調用SQL分布式管理對象(SQL-DMO)備份數據庫
SQL-DMO的全稱是SQL Distributed Management Objects,SQL分布式管理對象。它是一個集合,包含一組有雙重接口的COM。通過SQL-DMO可以控制操作SQL Server 的數據庫引擎和復制管理。由于SQL-DMO是一組COM,所以任何可以使用COM的開發工具都可以使用它,包括VB、Delphi、VC、BCB、ASP等等幾乎包括所有的Windows平臺下的開發工具。
第一步:導入sqldmo,生成類型說明文件
打開Delphi,Project菜單->Import Type Library...,在列表框中找到\"Microsoft SQLDMO Object Library(Version 8.0)\",可看到Class names列表框中顯示出相應的類,由于很多類名與vcl本身的類名沖突(比如TApplication,TTable等),需要修改類的名稱(在類的名稱前面全加上 SQL 這3個字母),點擊按鈕\"Create Unit\",進入漫長的等待過程。由于生成的文件比較大(6萬多行的代碼),這個過程很容易被誤認為死機,稍候片刻。
第二步:修改Type Library文件
經過漫長的等待,終于得到了來之不易的SQLDMO_TLB.pas,然而,當我們Compile的時候卻發現這個單元無法編譯,提示大意為ID重復定義,把第二個ID改成xID就可通過。
第三步:生成可視組件
Component菜單->Install Component...->在彈出對話框中點 Browse... 按鈕,找到路徑C:\\Program Files\\Borland\\Delphi7\\Imports\\SQLDMO_TLB.pas然后確認就可,這時會在activeX面板里生成很多控件。
2 使用winrar軟件壓縮數據庫備份文件
WIN32API函數CreateProcess用來創建一個新的進程和它的主線程,這個新進程運行指定的可執行文件,此函數的參數和功能說明,請查參考文獻[2]中對應的內容。在編程實現過程中,需用WIN32 API 函數waitforsingleobject使備份流程處于阻塞等待狀態,直到Winrar執行完成才返回,關鍵代碼如下:
Function ExecWinRar(cmd:pchar;visiable:integer):DWORD;
…//定義變量,初始化變量
CreateProcess(nil, cmd, nil, nil, 1, Create_new_console or Normal_priority_class,
nil, nil, StartupInfo, ProcessInfo); //創建新的進程
//在執行Winrar過程中,程序流程處于阻塞狀態,直到Winrar執行完成才返回
waitforsingleobject(processinfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);//Result獲得Winrar執行狀態參數
end;
如將當前目錄下的sjk.bak文件壓縮成test.rar,調用ExecWinRar函數的程序代碼如下:ExecWinRar ('C:\\Program Files\\WinRAR\\WinRAR.exe a test.rar sjk.bak', SW_HIDE);
調用ExecWinRar函數將當前目錄下的test.rar壓縮文件解壓至c:\\目錄下,程序代碼如下:
ExecWinRar ('C:\\Program Files\\WinRAR\\WinRAR.exe x test.rar c:\\',SW_HIDE);
3 MD5(報文摘要算法)為壓縮文件產生128位的指紋
大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的“數字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。
在圖1中,數據中心的數據庫備份文件首先采用Winrar工具進行壓縮,然后通過MD5算法得到出此壓縮文件的“數字指紋”,并且將“數字指紋”通過XML文件發送給圖1的備份數據中心。備份數據中心通過FTP協議獲得數據中心的數據庫備份壓縮文件之后,進行MD5計算,將計算的結果與數據中心發送過來的“數字指紋”進行比較,就可以判斷數據庫備份壓縮文件在傳輸過程是否被篡改。
在項目編碼過程中,MD5算法的實現參考了RFC1321說明文檔中的源代碼,有關RFC1321文檔的具體內容請看參考文獻[4]指定的網址。
4 結束語
將圖1數據中心的數據庫進行完全備份,如果文件大小超過10Gb時,使用Winrar工具進行壓縮的時間較長。但是,除了第一次對數據庫備份需采用完全備份方式,以后數據庫只需進行增量備份,而增量備份文件經壓縮后非常小。
文章介紹了對Ms SQL數據庫進行備份,如果對Oracle數據庫進行備份,只需將調用SQLDMO部分的程序接口改為調用oracle的exp和imp命令。
參考文獻:
[1] Marco Cantu.Delphi2005從入門到精通[M].北京:電子工業出版社,2006.
[2] 孫鑫,余安萍.VC++深入詳解[M].北京:電子工業出版社,2006.
[3] Robert Vieira.Professional Microsoft SQL Server 2008 Programming[M].北京:清華大學出版社,2010.
[4] R.Rivest.The MD5 Message-Digest Algorithm[EB/OL].http://www.ietf.org/rfc/rfc1321.txt.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文