mssql數(shù)據(jù)庫(kù)遠(yuǎn)程備份的job
/*在遠(yuǎn)程機(jī)器操作系統(tǒng)的計(jì)算機(jī)管理里建立一個(gè)用戶名為dbbackup的用戶,密碼為1234,同時(shí)在那臺(tái)機(jī)器的非系統(tǒng)盤里建一個(gè)名為backup的共享文件夾,為了安全另外設(shè)置這個(gè)文件夾只有這個(gè)dbbackup用戶可以訪問(wèn)。*/
declare @sql varchar(500)
select @sql='\\10.2.0.12\backup\dbname'+'_db_'+convert(varchar(10),getdate(),112) +
substring(convert(varchar(10),getdate(),108),1,2) +'.bak'
exec master..xp_cmdshell 'net use \\10.2.0.12\backup 1234 /user:remotehost\dbbackup'
backup database dbname to disk=@sql --備份數(shù)據(jù)庫(kù),這里的10.2.0.12為遠(yuǎn)程機(jī)器的ip,remotehost為遠(yuǎn)程機(jī)器的機(jī)器名,dbname為本地sqlserver服務(wù)器要備份的數(shù)據(jù)庫(kù)
go
declare @sql varchar(500)
select @sql='del '+'\\10.2.0.12\backup\dbname'+'_db_'+convert(varchar(10),dateadd(day,-7,getdate()),112) +
substring(convert(varchar(10),dateadd(day,-7,getdate()),108),1,2) +'.bak'
exec master..xp_cmdshell @sql --刪除7天前的備份,也就是只保留7個(gè)最新備份
最近我在為公司的框架程序(以數(shù)據(jù)應(yīng)用為導(dǎo)向的應(yīng)用體系)做數(shù)據(jù)管理模塊,這個(gè)模塊的需求比較簡(jiǎn)單:備份、恢復(fù)和清理日志。我公司的軟件基本上以C/S為基本架構(gòu),所以數(shù)據(jù)管理模塊中兩個(gè)主要的功能‘備份與恢復(fù)’都可能會(huì)在Client端操作,備份與恢復(fù)’的文件也都有可能存儲(chǔ)在client端,因而這個(gè)數(shù)據(jù)管理模塊就必須能夠?qū)崿F(xiàn)在遠(yuǎn)程備份與恢復(fù)數(shù)據(jù)庫(kù)。 文章的前提闡述完了,就該說(shuō)說(shuō)如何具體實(shí)現(xiàn)吧。其實(shí)都很簡(jiǎn)單,我想寫個(gè)遠(yuǎn)程備份的測(cè)試實(shí)例
給大家看,就能夠很清楚的描述吧!
實(shí)例說(shuō)明:
環(huán)境:win2k sqlserver 2K 查詢分析器
SQLSERVER服務(wù)實(shí)例名稱:mainserver
需要備份的數(shù)據(jù)庫(kù)名稱: msdb
本地機(jī)器名稱(Client端):david
本地用戶:zf 密碼:123
本地域名:domain
本地提供備份需求的文件夾:e:\test 第一步: 建立共享文件夾
在程序代碼中調(diào)用(或者CMD窗口) net share test=e:\test
或者用NetShareAdd這個(gè)API
簡(jiǎn)要說(shuō)明:
net share : 是WINDOWS內(nèi)部的網(wǎng)絡(luò)命令。
作用:建立本地的共享資源,顯示當(dāng)前計(jì)算機(jī)的共享資源信息。 字串8
語(yǔ)法:參見 net share /?
第二步: 建立共享信用關(guān)系
master..xp_cmdshell 'net use \\david\test 123 /user:domain\zf'
簡(jiǎn)要說(shuō)明:
1:xp_cmdshell :是SQLSERVER的擴(kuò)展存儲(chǔ)過(guò)程。
作用,以操作系統(tǒng)命令行解釋器的方式執(zhí)行給定的命令字符串,
并以文本行方式返回任何輸出。
語(yǔ)法:參見SQLSERVER聯(lián)機(jī)幫助
2:net use : 是WINDOWS內(nèi)部的網(wǎng)絡(luò)命令。
作用,將計(jì)算機(jī)與共享資源連接或斷開,或者顯示關(guān)于計(jì)算機(jī)
連接的信息。該命令還控制持久網(wǎng)絡(luò)連接。
語(yǔ)法:參見 net use /? 第三步:備份數(shù)據(jù)庫(kù)
backup database msdb to disk='\\david\test\msdb.bak'
這個(gè)不需要說(shuō)明吧,語(yǔ)法參見SQLSERVER聯(lián)機(jī)幫助 第四步: 刪除共享文件夾
在程序代碼中調(diào)用(或者CMD窗口) net share test /delete
或者用NetShareDel這個(gè)API
結(jié)果:
已處理 1376 頁(yè),這些頁(yè)屬于數(shù)據(jù)庫(kù) 'msdb' 的文件 'MSDBData'(位于文件 1 上)。
字串1
已處理 1 頁(yè),這些頁(yè)屬于數(shù)據(jù)庫(kù) 'msdb' 的文件 'MSDBLog'(位于文件 1 上)。
BACKUP DATABASE 操作成功地處理了 1377 頁(yè),花費(fèi)了 3.653 秒(3.086 MB/秒)。 這樣mainserver服務(wù)器上的msdb就備份到了david機(jī)器的E:\test\msdb.bak文件了,使用起來(lái)很簡(jiǎn)單吧?恢復(fù)數(shù)據(jù)庫(kù)操作也是一樣,只要將第三個(gè)步驟的語(yǔ)句改為'restore database msdb from disk='\\david\test\msdb.bak'就可以啦。。你看完了也可以試試呀?!(最簡(jiǎn)單的測(cè)試工具查詢分析器 CMD窗口)備注:xp_cmdshell 這個(gè)擴(kuò)展存儲(chǔ)過(guò)程只能SA級(jí)別的用戶調(diào)用,而且是SQLSERVER的安全隱患之一,許多DBA都喜歡將其刪除或者禁用,所以開發(fā)人員使用時(shí)要倍加小心哦。
文章中的例子只是簡(jiǎn)要的說(shuō)明了應(yīng)如何利用擴(kuò)展存儲(chǔ)過(guò)程實(shí)現(xiàn)遠(yuǎn)程備份與恢復(fù),沒有涉及安全以及其他方面的考慮,希望讀者在代碼中自行完善。
go