国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

客戶端備份與恢復(fù)MSSQL Server數(shù)據(jù)庫

2024-08-31 00:46:07
字體:
供稿:網(wǎng)友

摘要:本文以SQL SERVER為例,總結(jié)了常用的幾種備份和恢復(fù)數(shù)據(jù)庫的方法,分析了作業(yè)機(jī)制的原理,并提出了一種以作業(yè)機(jī)制實(shí)現(xiàn)恢復(fù)和備份數(shù)據(jù)庫的方法。用戶可以不打開數(shù)據(jù)庫管理器,在應(yīng)用程序客戶端就可以方便地實(shí)現(xiàn)數(shù)據(jù)庫的備份和恢復(fù)。

關(guān)鍵詞: 備份 恢復(fù) 作業(yè)機(jī)制 數(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ù)庫的功能。

作為強(qiáng)大數(shù)據(jù)庫SQL SERVER的管理器ENTERPRISE MANAGER,其本身也提供了幾種實(shí)現(xiàn)和恢復(fù)數(shù)據(jù)庫的方法,但這幾種方法實(shí)現(xiàn)起來,都需要用戶對ENTERPRISE MANAGER相當(dāng)熟悉,而且處理步驟較繁鎖,操作起來容易發(fā)生失誤。因此我們就需要一種更加簡便可行的實(shí)現(xiàn)方法。

2.常用的備份和恢復(fù)數(shù)據(jù)庫的方法

在SQL SERVER ENTERPRISE MANAGER是一種強(qiáng)大的管理工具,它能完成很多功能,備份和恢復(fù)數(shù)據(jù)庫是其中的一項(xiàng)基本功能。歸結(jié)起來,借助這個管理工具有三種常用的方法實(shí)現(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è)方式實(shí)現(xiàn)的,但是管理員必須打開數(shù)據(jù)庫管理器,而且要在繁多的作業(yè)中進(jìn)行選擇。一旦選擇錯誤并執(zhí)行之,有可能帶來意想不到的損失。

⑶ 全自動方式。在數(shù)據(jù)庫管理器里面,管理員事先建立好恢復(fù)或者備份數(shù)據(jù)庫的作業(yè),然后定制一個執(zhí)行計(jì)劃,讓計(jì)算機(jī)在特定的條件下自己執(zhí)行備份和恢復(fù)操作。這種方式看起來簡單、省事,但是機(jī)器在異常情況(如掉電)下,就不能按照計(jì)劃執(zhí)行了。

3.作業(yè)機(jī)制的工作原理

作業(yè)是ENTERPRISE MANAGER提供的一種定期處理數(shù)據(jù)的一種方法,前面提到的半手工方式和全自動方式雖然利用了作業(yè),但它需要在ENTERPRISE MANAGER里啟動和關(guān)閉作業(yè);我們要討論的是在應(yīng)用程序客戶端啟動和關(guān)閉作業(yè)的機(jī)制。

作業(yè)機(jī)制的工作原理,由控制體和執(zhí)行體兩大部分構(gòu)成。

控制體顧名思義就是控制作業(yè)執(zhí)行的實(shí)體,靠具體編程實(shí)現(xiàn)。實(shí)現(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è)機(jī)制實(shí)現(xiàn)數(shù)據(jù)庫的備份和恢復(fù)

為了便于解釋我們以POWER BUILDER實(shí)現(xiàn)的一個具體系統(tǒng)為示例,首先看數(shù)據(jù)庫備份的實(shí)現(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 控制體的實(shí)現(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

//運(yùn)行系統(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

//運(yùn)行系統(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ù)庫的實(shí)現(xiàn)步驟類似與備份,限于篇幅此處從略。

5. 結(jié)束語

以作業(yè)機(jī)制實(shí)現(xiàn)數(shù)據(jù)庫的恢復(fù)和備份,就是事先在建立備份和恢復(fù)數(shù)據(jù)庫的作業(yè),在應(yīng)用程序客戶端用控制體啟動相應(yīng)的執(zhí)行體來實(shí)現(xiàn)之。用這種方式實(shí)現(xiàn)數(shù)據(jù)庫的備份和恢復(fù),用戶不必打開數(shù)據(jù)庫管理器進(jìn)行操作,用戶可以在任何一個應(yīng)用程序客戶端完成操作。

作業(yè)機(jī)制打破了我們常規(guī)對大型數(shù)據(jù)庫備份和恢復(fù)必須在數(shù)據(jù)庫管理器里進(jìn)行的局限性,利用作業(yè)機(jī)制解決了在應(yīng)用程序客戶端對數(shù)據(jù)庫備份和恢復(fù)的難題,為在應(yīng)用程序客戶端實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)庫維護(hù)提供了一個思路。
客戶端備份與恢復(fù)MSSQL Server數(shù)據(jù)庫

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九江市| 唐山市| 光泽县| 平江县| 甘泉县| 韶山市| 呼伦贝尔市| 电白县| 涪陵区| 简阳市| 新邵县| 同心县| 孙吴县| 杂多县| 观塘区| 南皮县| 巴彦淖尔市| 雷山县| 浦北县| 洛宁县| 滨州市| 德兴市| 枣强县| 富顺县| 高要市| 根河市| 乐山市| 平邑县| 贺兰县| 资中县| 玉门市| 青阳县| 全州县| 鹤山市| 蒙自县| 察哈| 德格县| 上饶县| 化隆| 南汇区| 永新县|