close

最近我在為公司的框架程式(以資料應用為導向的應用體系)做資料管理模組 ,這個模組的需求比較簡單備份 、恢復和清理日誌。我公司的軟體基本上以C/S為基本架構,所以資料管理模組中兩個主要的功能備份與恢復都可能會在Client端操作,備份與恢復的檔也都有可能存儲client端,因而這個資料管理模組就必須能夠實現在遠端備份與恢復資料 庫。

  文章的前提闡述完了,就該說說如何具體實現吧。其實都很簡單,我想寫個遠端備份的測試實例
給大家看,就能夠很清楚的描述吧!
 
實例說明:
          
環境:win2k+sqlserver 2K+查詢分析器
           SQLSERVER
服務實例名稱:mainserver
          
需要備份的資料庫名稱: msdb
          
本地機器名稱(Client端):david
          
本地用戶:zf 密碼:123
          
本地功能變數名稱:domain
          
本地提供備份需求的檔夾:e:\test

  第一步: 建立共用文件夾
    
在程式 中調用(或者CMD視窗)  net share test=e:\test
    
或者用NetShareAdd這個API
    
簡要說明:
            net share     :
WINDOWS內部的網路命令。
                           
作用:建立本地的共用資源,顯示當前電腦 的共用資源資訊。

                            語法:參見 net share /? 
  第二步: 建立共用信用關係
     master..xp_cmdshell 'net use  \\david\test 123 /user:domain\zf'
     簡要說明:
           1xp_cmdshell :是SQLSERVER的擴展存儲過程。
                            作用,以作業系統 命令行解釋器的方式執行給定的命令字串,
                            並以文本行方式返回任何輸出。
                            語法:參見SQLSERVER聯機幫助
           2:net use      : WINDOWS內部的網路命令。
                            作用,將電腦與共用資源連接或斷開,或者顯示關於電腦
                            連接的資訊。該命令還控制持久網路連接。
                            語法:參見 net use /?

  第三步:備份資料庫
     backup database msdb to disk='\\david\test\msdb.bak'
     這個不需要說明吧,語法參見SQLSERVER聯機幫助

  第四步: 刪除共用檔夾
     在程式碼中調用(或者CMD視窗)  net share test /delete
     或者用NetShareDel這個API
  結果:
      已處理 1376 頁,這些頁屬於資料庫 'msdb' 的檔 'MSDBData'(位於文件 1 上)。
      已處理 1 頁,這些頁屬於資料庫 'msdb' 的檔 'MSDBLog'(位於文件 1 上)。
      BACKUP DATABASE 操作成功地處理了 1377 頁,花費了 3.653 秒(3.086 MB/秒)。

  這樣mainserver伺服器 上的msdb就備份到了david機器的E:\test\msdb.bak檔了,使用起來很簡單吧?恢復資料庫操作也是一樣,只要將第三個步驟的語句改為'restore database msdb from disk='\\david\test\msdb.bak'就可以啦。。你看完了也可以試試呀?!(最簡單的測試工具查詢分析器+CMD窗口)

備註:xp_cmdshell 這個擴展存儲過程只能SA級別的用戶調用,而且是SQLSERVER的安全隱患之一,許多DBA都喜歡將其刪除或者禁用,所以開發人員使用時要倍加小心哦。
     文章中的例子只是簡要的說明了應如何利用擴展存儲過程實現遠端備份與恢復,沒有涉及安全以及其他方面的考慮,希望讀者在代碼中自行完善。

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 hsiung03 的頭像
    hsiung03

    hsiung.博格 ERP軟體

    hsiung03 發表在 痞客邦 留言(0) 人氣()