仝虎 周進(jìn)
摘 要:數(shù)據(jù)庫是應(yīng)用系統(tǒng)的核心,數(shù)據(jù)庫備份極其重要。以SQL Server2008 R2數(shù)據(jù)庫為例,介紹了利用SQL Server代理創(chuàng)建作業(yè)實(shí)現(xiàn)數(shù)據(jù)庫自動(dòng)異地備份功能的具體方法。該方法思路清晰,操作簡單,能夠有效實(shí)現(xiàn)數(shù)據(jù)庫的異地備份、多機(jī)備份。
關(guān)鍵詞:數(shù)據(jù)庫;SQL Server;自動(dòng)本地備份;自動(dòng)異地備份
中圖分類號(hào):TP301
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2015)005-0060-02
作者簡介:仝虎(1979-),男,河南修武人,碩士,南京旅游職業(yè)學(xué)院電教中心工程師,研究方向?yàn)閿?shù)據(jù)庫管理系統(tǒng)與決策支持系統(tǒng)。
0 引言
近年來,以數(shù)據(jù)庫為核心的計(jì)算機(jī)管理信息系統(tǒng)的普及,使得現(xiàn)代企事業(yè)單位的工作效率大大提高,但同時(shí)也加大了現(xiàn)代企事業(yè)單位對(duì)計(jì)算機(jī)軟硬件的依賴。單位的業(yè)務(wù)數(shù)據(jù)大都存儲(chǔ)在數(shù)據(jù)庫服務(wù)器上,因而數(shù)據(jù)庫安全問題尤為重要。保障數(shù)據(jù)庫安全的最主要方法就是做好數(shù)據(jù)庫備份工作,不但要做好手工備份,更要做好自動(dòng)備份;不但要做好本地備份,更要做好異地備份,以防止工作服務(wù)器出現(xiàn)災(zāi)難性硬件故障從而造成不可挽回的損失。本文介紹了如何利用SQL Server代理服務(wù)器創(chuàng)建作業(yè)來實(shí)現(xiàn)數(shù)據(jù)庫的自動(dòng)異地備份功能,思路清晰,操作簡單。
測(cè)試環(huán)境如下:兩臺(tái)數(shù)據(jù)庫服務(wù)器(可以是實(shí)體機(jī),也可以是虛擬機(jī)):服務(wù)器A、服務(wù)器B。服務(wù)器A做主機(jī),IP地址10.0.0.1;服務(wù)器B做備用機(jī),IP地址10.0.0.2。操作系統(tǒng):Windows2008 R2。數(shù)據(jù)庫:SQL Server2008 R2。數(shù)據(jù)庫名:lyxy。
1 自動(dòng)本地備份
自動(dòng)本地備份是自動(dòng)異地備份的基礎(chǔ),先介紹如何利用SQL Server作業(yè)實(shí)現(xiàn)本地定時(shí)自動(dòng)備份數(shù)據(jù)庫。每天備份的文件以日期時(shí)間命名,存放在工作服務(wù)器A(10.0.0.1)的文件夾E:\\DB_BK\下。具體操作步驟[1]如下:
步驟1:打開SSMS(SQL Server Management Studio)。
步驟2:啟動(dòng)SQL Server代理服務(wù),如圖1所示。
步驟3:點(diǎn)擊作業(yè)—新建作業(yè),在[常規(guī)]選項(xiàng)中輸入作業(yè)名稱lyxy_fullbk_job。
步驟4:點(diǎn)擊新建按鈕,新建步驟,輸入名稱lyxy_fullbk_bz,類型選T-SQL,數(shù)據(jù)庫選擇master,在命令的空白處輸入如下語句,然后點(diǎn)擊確定,返回。
DECLARE @strPath NVARCHAR(200)
set @strPath = convert(NVARCHAR(19),getdate(),120)
set @strPath = REPLACE(@strPath,':' ,'')
set @strPath = 'E:\\DB_BK\' + 'lyxy'+@strPath + '.bak'
BACKUP DATABASE [lyxy] TO DISK = @strPath WITH NOINIT ,NOUNLOAD ,NOSKIP ,STATS = 10,NOFORMAT
步驟5:點(diǎn)擊新建按鈕,添加計(jì)劃,輸入名稱lyxy_fullbk_plan,設(shè)置好執(zhí)行頻率和具體觸發(fā)時(shí)間等。
步驟6:點(diǎn)擊確定,完成。完成后,可以選中該作業(yè),然后點(diǎn)擊右鍵,選中“作業(yè)開始步驟”,測(cè)試該作業(yè)是否成功執(zhí)行,若成功則會(huì)出現(xiàn)如圖2所示界面。
2 自動(dòng)異地備份
SQL Server數(shù)據(jù)庫異地備份主要通過映射網(wǎng)絡(luò)盤和執(zhí)行cmdshell命令來實(shí)現(xiàn)[2-3]。假設(shè)登錄服務(wù)器B(10.0.0.2)的帳號(hào)為administrator,密碼為111, 首先在備用服務(wù)器B上創(chuàng)建文件夾E:\\DB_BK。執(zhí)行過程同創(chuàng)建自動(dòng)本地備份作業(yè)的過程一樣,區(qū)別在于步驟4中T-SQL語句的不同,異地備份要在備份命令語句BACKUP DATABASE前加上一條語句:exec master..xp_cmdshell 'net use \\10.0.0.2\\E$ 111 /user:10.0.0.2\\administrator'。
作業(yè)創(chuàng)建完成后,可以選中該作業(yè),然后點(diǎn)擊右鍵,選中“作業(yè)開始步驟”,測(cè)試該異地備份是否成功執(zhí)行。這時(shí)很可能會(huì)執(zhí)行失敗,出現(xiàn)一條和xp_cmdshell相關(guān)的錯(cuò)誤信息[4],即“基于安全考慮,在SQL Server2008 R2版本中xp_cmdshell 默認(rèn)是關(guān)閉狀態(tài)[4-5]”。所以在執(zhí)行異地備份數(shù)據(jù)庫之前必須打開它,具體命令語句可參考文獻(xiàn)[5]。啟用xp_cmdshell后,即可成功執(zhí)行備份作業(yè)?;诎踩紤],在執(zhí)行完備份操作后還應(yīng)將xp_cmdshell功能關(guān)閉。為了實(shí)現(xiàn)真正的自動(dòng)異地備份功能,可以將開啟和關(guān)閉xp_cmdshell的過程也寫到作業(yè)里。具體做法是,編輯上述自動(dòng)異地備份作業(yè)lyxy_ydfullbk_job,在步驟4中,將T-SQL語句進(jìn)行擴(kuò)充并完善如下:
--允許配置高級(jí)選項(xiàng)并啟用xp_cmdshell
EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE
--執(zhí)行異地備份
DECLARE @strPath NVARCHAR(200)
set @strPath = convert(NVARCHAR(19),getdate(),120)
set @strPath = REPLACE(@strPath,':' ,'')
set @strPath = '\\10.0.0.2\\E$\\DB_BK\' + 'lyxy'+@strPath + '.bak'
exec master..xp_cmdshell 'net use \\10.0.0.2\\E$ 111 /user:10.0.0.2\\administrator'
BACKUP DATABASE [lyxy] TO DISK = @strPath WITH NOINIT ,NOUNLOAD ,NOSKIP ,STATS = 10,NOFORMAT
--關(guān)閉xp_cmdshell并禁用配置高級(jí)選項(xiàng)
EXEC sp_configure 'xp_cmdshell',0
RECONFIGURE
EXEC sp_configure 'show advanced options',0
RECONFIGURE
執(zhí)行頻率、觸發(fā)時(shí)間等都不變,至此可以完全實(shí)現(xiàn)真正的自動(dòng)異地備份功能。若想實(shí)現(xiàn)多機(jī)備份,則多創(chuàng)建幾個(gè)類似作業(yè)即可。
3 結(jié)語
本文以SQL Server2008 R2數(shù)據(jù)庫為例,先描述了利用作業(yè)實(shí)現(xiàn)數(shù)據(jù)庫自動(dòng)本地備份的過程,然后在此基礎(chǔ)上介紹了如何創(chuàng)建自動(dòng)異地備份數(shù)據(jù)庫作業(yè),最后指出作業(yè)執(zhí)行失敗的原因和改正辦法,并完善了自動(dòng)異地備份數(shù)據(jù)庫作業(yè),實(shí)現(xiàn)了真正意義上的數(shù)據(jù)庫自動(dòng)異地備份功能。實(shí)踐證明,可以利用該備份方法實(shí)現(xiàn)數(shù)據(jù)庫的異地備份、多機(jī)備份。
參考文獻(xiàn):
[1] CHRIS LEITER,DAN WOOD.SQL Server2008 DBA入門經(jīng)典[M].張德群,譯.北京:清華大學(xué)出版社,2010.
[2] CHRISTIAN BOLTON,JUSTIN LANGFORD,BRENT OZAR,et al.Professional SQL server 2008 internals and troubleshooting [M].Wiley,2009.
[3] 劉笑凱,張水平,毛云飛.SQL Server 的備份策略應(yīng)用[J].計(jì)算機(jī)工程,2003,29(6):193-194.
[4] 吳彥,張冬.SQL Server自動(dòng)異地備份的研究與應(yīng)用[J].電腦知識(shí)與技術(shù),2009(5):9617-9619.
[5] JONATHAN KEHAYIAS,TED KRUEGER.Troubleshooting SQL Server——a guide for the accidental DBA[M].Red gate books,2011.
(責(zé)任編輯:孫 娟)