使用SQLSERVER的擴充套件儲存過程實現遠端備份與恢復 (轉)

worldblog發表於2008-01-22
使用SQLSERVER的擴充套件儲存過程實現遠端備份與恢復 (轉)[@more@]

標題很長,但內容簡單。。這是小弟的第一篇習作,寫的不好,望大家海涵。

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

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

  第一步: 建立共享資料夾
  在程式程式碼中(或者CMD視窗)  share test=e:test
  或者用NetShareAdd這個
  簡要說明:
  net share  : 是內部的命令。
  作用:建立本地的共享資源,顯示當前的共享資源資訊。
  語法:參見 net share /? 
  第二步: 建立共享信用關係
  master..xp_cmd use  123 /user:domainzf'
  簡要說明:
  1:xp_cmdshell :是SQLSERVER的擴充套件。
  作用,以操作命令列直譯器的方式給定的命令字串,
  並以文字行方式返回任何輸出。
  語法:參見SQLSERVER聯機幫助
  2:net use  : 是WINDOWS內部的網路命令。
  作用,將計算機與共享資源連線或斷開,或者顯示關於計算機
  連線的資訊。該命令還控制持久網路連線。
  語法:參見 net use /?

  第三步:備份資料庫
  backup database msdb to disk='davidtestmsdb.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:testmsdb.bak檔案了,使用起來很簡單吧?恢復資料庫操作也是一樣,只要將第三個步驟的語句改為'restore database msdb from disk='davidtestmsdb.bak'就可以啦。。你看完了也可以試試呀?!(最簡單的測試工具查詢分析器+CMD視窗)

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


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998121/,如需轉載,請註明出處,否則將追究法律責任。

相關文章