時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
摘要:本文以SQL SERVER為例,總結(jié)了常用的幾種備份和恢復(fù)數(shù)據(jù)庫的方法,分析了作業(yè)機制的原理,并提出了一種以作業(yè)機制實現(xiàn)恢復(fù)和備份數(shù)據(jù)庫的方法。用戶可以不打開數(shù)據(jù)庫管理器,在應(yīng)用程序客戶端就可以方便地實現(xiàn)數(shù)據(jù)庫的備份和恢復(fù)。
關(guān)鍵詞: 備份 恢復(fù) 作業(yè)機制 數(shù)據(jù)庫
1.概述
備份和恢復(fù)是數(shù)據(jù)庫管理員維護(hù)數(shù)據(jù)庫安全性和完整性的重要操作。備份是恢復(fù)數(shù)據(jù)庫最容易和最能防止意外的保證方法。沒有備份,所有的數(shù)據(jù)都可能會丟失。備份可以防止表和數(shù)據(jù)庫遭受破壞、介質(zhì)失效或用戶錯誤而造成數(shù)據(jù)災(zāi)難?;謴?fù)是在意外發(fā)生后,利用備份來恢復(fù)數(shù)據(jù)庫的操作。任何數(shù)據(jù)維護(hù)無論是基于C/S還是B/S的信息管理系統(tǒng)都必須具有備份和恢復(fù)數(shù)據(jù)庫的功能。
作為強大數(shù)據(jù)庫SQL SERVER的管理器ENTERPRISE MANAGER,其本身也提供了幾種實現(xiàn)和恢復(fù)數(shù)據(jù)庫的方法,但這幾種方法實現(xiàn)起來,都需要用戶對ENTERPRISE MANAGER相當(dāng)熟悉,而且處理步驟較繁鎖,操作起來容易發(fā)生失誤。因此我們就需要一種更加簡便可行的實現(xiàn)方法。
2.常用的備份和恢復(fù)數(shù)據(jù)庫的方法
在SQL SERVER ENTERPRISE MANAGER是一種強大的管理工具,它能完成很多功能,備份和恢復(fù)數(shù)據(jù)庫是其中的一項基本功能。歸結(jié)起來,借助這個管理工具有三種常用的方法實現(xiàn)備份和恢復(fù)數(shù)據(jù)庫。
⑴ 完全手工方式。在這種方式下,選擇要備份和恢復(fù)的數(shù)據(jù)庫,單擊鼠標(biāo)右鍵,在快捷菜單中的"ALL TASKS"下選擇備份或者恢復(fù)數(shù)據(jù)庫。這種方式,用戶要進(jìn)行很多步操作,其中要涉及到一些參數(shù),使用起來容易出錯,尤其對新手來講,一旦操作失誤可能帶來很大的損失。
⑵ 半手工方式。這種方式就是管理員事先建立備份或者恢復(fù)數(shù)據(jù)庫的作業(yè),待到備份或者恢復(fù)數(shù)據(jù)庫的時候,管理員打開"SQL SERVER ENTEPRISE MANAGER",在"MANAGER"里找到相應(yīng)的作業(yè),然后執(zhí)行之。這種方式,雖然是基于作業(yè)方式實現(xiàn)的,但是管理員必須打開數(shù)據(jù)庫管理器,而且要在繁多的作業(yè)中進(jìn)行選擇。一旦選擇錯誤并執(zhí)行之,有可能帶來意想不到的損失。
⑶ 全自動方式。在數(shù)據(jù)庫管理器里面,管理員事先建立好恢復(fù)或者備份數(shù)據(jù)庫的作業(yè),然后定制一個執(zhí)行計劃,讓計算機在特定的條件下自己執(zhí)行備份和恢復(fù)操作。這種方式看起來簡單、省事,但是機器在異常情況(如掉電)下,就不能按照計劃執(zhí)行了。
3.作業(yè)機制的工作原理
作業(yè)是ENTERPRISE MANAGER提供的一種定期處理數(shù)據(jù)的一種方法,前面提到的半手工方式和全自動方式雖然利用了作業(yè),但它需要在ENTERPRISE MANAGER里啟動和關(guān)閉作業(yè);我們要討論的是在應(yīng)用程序客戶端啟動和關(guān)閉作業(yè)的機制。
作業(yè)機制的工作原理,由控制體和執(zhí)行體兩大部分構(gòu)成。
控制體顧名思義就是控制作業(yè)執(zhí)行的實體,靠具體編程實現(xiàn)。實現(xiàn)時,要調(diào)用MSDB數(shù)據(jù)庫的系統(tǒng)存儲過程SP_START _JOB,SP_END_JOB等等,同時要訪問表SYSJOBHITORY,獲取作業(yè)執(zhí)行狀態(tài)。
執(zhí)行體就是作業(yè)執(zhí)行的整體,應(yīng)用系統(tǒng)投入使用時建立。應(yīng)用系統(tǒng)安裝時,要建立數(shù)據(jù)庫、備份和恢復(fù)設(shè)備、備份和恢復(fù)作業(yè)。
控制體由用戶觸發(fā),啟動相應(yīng)的作業(yè),交由執(zhí)行體執(zhí)行作業(yè),在執(zhí)行過程中,執(zhí)行體執(zhí)行的每一步狀態(tài)信息都要寫入MSDB數(shù)據(jù)庫的SYSJOBHISTORY表里。同時,控制體不斷獲取執(zhí)行狀態(tài)信息,根據(jù)這些信息,控制體決定繼續(xù)執(zhí)行還是停止該作業(yè)。在作業(yè)執(zhí)行完畢或者出錯停止后,控制體向用戶反饋執(zhí)行結(jié)果。
4.以作業(yè)機制實現(xiàn)數(shù)據(jù)庫的備份和恢復(fù)
為了便于解釋我們以POWER BUILDER實現(xiàn)的一個具體系統(tǒng)為示例,首先看數(shù)據(jù)庫備份的實現(xiàn)步驟。
4.1 執(zhí)行體的建立
(1)建立應(yīng)用系統(tǒng)的數(shù)據(jù)庫XCCXXT。
(2)建立備份數(shù)據(jù)庫所使用的設(shè)備XCCXXTBAK.DAT。
(3)建立備份作業(yè)XCCXXT BACKUP,其中命令行為BACKUP DATABASE XCCXXT TO DISK="C:\MSSQL7\DATA\BACKUP\XCCXXTBAK.DAT"。
4.2 控制體的實現(xiàn)
在相應(yīng)對象的"備份"按鈕的click事件中寫入以下代碼:
//聲明相應(yīng)的變量
string ls_database,ls_pass,ls_date,ls_time
integer li_gs,li_gs_o
transaction login_trans
login_trans = creat transaction
IF MessageBox("提示信息","是否真的要進(jìn)行數(shù)據(jù)備份操作?", &
Exclamation!,OKCancel!,2)<>1 then return
//連接MSDB數(shù)據(jù)庫
login_trans.database = "msdb"
connect using login_trans;
if login_trans.sqlcode <> 0 then
messagebox("數(shù)據(jù)庫錯誤信息",login_trans.sqlerrtext)
return
end if
//檢測上次該執(zhí)行體執(zhí)行結(jié)果,用以區(qū)別本次執(zhí)行狀況
select max(instance_id) into :li_gs_o from sysjobhistory using login_trans;
if isnull(li_gs_o) then li_gs_o =0
login_trans.autocommit = true
ls_pass = login_trans.logpass
//運行系統(tǒng)存儲過程SP_START_JOB,啟動執(zhí)行體
prepare sqlsa from "sp_start_job ?" using login_trans;
if login_trans.sqlcode <> 0 then
messagebox("數(shù)據(jù)庫錯誤信息",login_trans.sqlerrtext)
login_trans.autocommit = false
disconnect using login_trans;
login_trans.database = ls_database
return
end if
EXECUTE sqlsa USING ‘XCCXXT BACKUP’;
//檢測執(zhí)行體啟動是否正常
if login_trans.sqlcode <> 0 then
messagebox("數(shù)據(jù)庫錯誤信息",login_trans.sqlerrtext)
login_trans.autocommit = false
disconnect using login_trans;
return
end if
//檢測執(zhí)行體執(zhí)行的整個過程
DO
uf_sleep (1)
select max(instance_id) into :li_gs from sysjobhistory using login_trans;
if isnull(li_gs) then li_gs =0
LOOP WHILE li_gs<=li_gs_o+1
//運行系統(tǒng)存儲過程SP_END_JOB,關(guān)閉執(zhí)行體
prepare sqlsa from "sp_end_job ?" using login_trans;
if login_trans.sqlcode <> 0 then
messagebox("數(shù)據(jù)庫錯誤信息",login_trans.sqlerrtext)
login_trans.autocommit = false
disconnect using login_trans;
login_trans.database = ls_database
return
end if
EXECUTE sqlsa USING ‘XCCXXT BACKUP’;
//返回執(zhí)行結(jié)果
li_gs_o=li_gs - 1
select run_
----------------------------------------------
s,run_date,run_time into :li_gs,:ls_date,
:ls_time from sysjobhistory where instance_id =:li_gs_o using login_trans;
if li_gs = 1 then
st_3.text = left(ls_date,4)+'年'+mid(ls_date,5,2)+'月'
+right(ls_date,2)+'日'+' '+&
left(ls_time,2)+':'+mid(ls_time,3,2)+':'+right(ls_time,2)
messagebox('提示',"數(shù)據(jù)庫備份操作成功!")
else
messagebox('提示',"數(shù)據(jù)庫備份操作失敗!")
end if
//斷開與數(shù)據(jù)庫MSDB的連接
login_trans.autocommit = false
disconnect using login_trans;
if login_trans.sqlcode <> 0 then
messagebox("數(shù)據(jù)庫錯誤信息",login_trans.sqlerrtext)
end if
4.3 備份數(shù)據(jù)庫
用戶單擊"備份"按鈕,系統(tǒng)就會備份XCCXXT數(shù)據(jù)庫。結(jié)束時,會有相應(yīng)成功與否的信息向用戶提示。
備份是對數(shù)據(jù)庫的進(jìn)行讀操作,執(zhí)行體執(zhí)行之前不需要檢查用戶對數(shù)據(jù)庫的使用狀態(tài)。而恢復(fù)則是對整個數(shù)據(jù)庫進(jìn)行寫操作,在啟動執(zhí)行體之前一定要檢查是否有數(shù)據(jù)庫進(jìn)行寫操作,否則容易導(dǎo)致失敗。其他恢復(fù)數(shù)據(jù)庫的實現(xiàn)步驟類似與備份,限于篇幅此處從略。
5. 結(jié)束語
以作業(yè)機制實現(xiàn)數(shù)據(jù)庫的恢復(fù)和備份,就是事先在建立備份和恢復(fù)數(shù)據(jù)庫的作業(yè),在應(yīng)用程序客戶端用控制體啟動相應(yīng)的執(zhí)行體來實現(xiàn)之。用這種方式實現(xiàn)數(shù)據(jù)庫的備份和恢復(fù),用戶不必打開數(shù)據(jù)庫管理器進(jìn)行操作,用戶可以在任何一個應(yīng)用程序客戶端完成操作。
作業(yè)機制打破了我們常規(guī)對大型數(shù)據(jù)庫備份和恢復(fù)必須在數(shù)據(jù)庫管理器里進(jìn)行的局限性,利用作業(yè)機制解決了在應(yīng)用程序客戶端對數(shù)據(jù)庫備份和恢復(fù)的難題,為在應(yīng)用程序客戶端實現(xiàn)復(fù)雜的數(shù)據(jù)庫維護(hù)提供了一個思路。
關(guān)鍵詞標(biāo)簽:客戶端,備份,恢復(fù),MSS
相關(guān)閱讀
熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系
人氣排行 配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠(yuǎn)程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠(yuǎn)程導(dǎo)入(導(dǎo)出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法