可定製的資料庫備份和恢復程式 tashanzhishi [原作]
關鍵字 資料庫 備份 恢復
出處 在我們做資料庫系統的程式時,經常需要為客戶做乙個資料庫的備份和恢復程式,特別是對於一些非專業的資料庫使用者,這個程式更是必不可少,而且操作必需足夠簡單。因為在很多系統中,資料庫的備份恢復功能都是相近的,因此,我們最好做乙個通用的資料庫備份恢復程式,這樣就不必每個系統都開發一套了。
要開發這樣一套系統,我個人認為應該滿足以下要求:
1. 備份恢復操作應該有歷史記錄(必需有乙個備份列表,列出備份檔案的相關資訊),便於使用者查詢以往的備份。
2. 對於每一次備份和恢復應允許使用者記錄備份和恢復的原因。
3. 系統應允許使用者進行簡單的配置,並且配置可以儲存。
4. 備份和恢復應該足夠簡單,最好類似與檔案的複製,對於已經進行的備份,應允許使用者從備份列表恢復。
5. 即使因為某種原因使要恢復的資料庫正在占用,也應該允許使用者恢復(這一點很重要,因為你不能指望使用者自己保證資料庫的獨占性)。
6. 實時顯示備份或恢復的當前進度。
要達到以上的要求,我想我們應該這樣設計系統:
1. 對於每一次的資料庫備份和恢復,我們都記下當時的資料庫伺服器名,資料庫名,備份檔案全路徑名,備份時間,進行備份或恢復的原因等資訊,並把這些資訊以xml的形式儲存,下面是我得乙個備份檔案例項:
<?xml version="1.0" encoding="gb2312"?>
20040205 10:41:21
hrmjx4
測試備份
e:/ricatex2003.bak
20040205 10:43:58
hrmjx4
每週例行備份
e:/hrmjx4040205.bak20.
book
sa2iuc94tkpsg=
上面依次記錄了備份程式的名稱(顯示在備份窗體的標題欄,無實際用處),備份歷史最大記錄數,備份的資料庫伺服器名稱,備份的資料庫名稱,使用者名稱,密碼(已經過加密)等資訊。我們在程式剛開始啟動時,就自動把這些資訊應用到使用者介面上去,這樣就不用使用者重新設定了。
3. 備份時我們採取直接備份到檔案的方法,使用者只需使用儲存檔案對話方塊指定要備份的位置和檔名即可,其餘的工作通過程式完成,恢復也一樣,只需通過開啟檔案對話方塊指定從其中恢復的檔案即可。
4. 我們在恢復時,先殺死要恢復的資料庫所關聯的所有使用者執行緒,然後再進行恢復,這樣就不會存在因為資料庫獨占性引起的恢復錯誤。
5. 對於實時顯示備份和恢復的進度問題,我們採取sql-dmo的**函式的方式實現。
2. 資料庫的備份和實時進度顯示**:
public bool backupdb(string strdbname,string strfilename, progressbar pgbmain)
catch(exception err)
finally }
private void step(string message,int percent)
其中,這兩個語句實現了進度的實時顯示:
sqldmo.backupsink_percent***pleteeventhandler pceh = new sqldmo.backupsink_percent***pleteeventhandler(step);
bak.percent***plete += pceh;
step就是上面private void step(string message,int percent) 的方法名稱,它用來顯示進度條的當前進度。
3. 資料庫的恢復和殺死程序的**:
public bool restoredb(string strdbname,string strfilename, progressbar pgbmain)
else if (strname.toupper().trim() == "dbname")
if (icolpidnum != -1 && icoldbname != -1)
break ;
} for(int i=1;i<=qr.rows;i++)
sqldmo.restore res = new sqldmo.restoreclass() ;
res.action = 0 ;
sqldmo.restoresink_percent***pleteeventhandler pceh = new sqldmo.restoresink_percent***pleteeventhandler(step);
res.percent***plete += pceh;
res.files = strfilename ;
res.database = strdbname ;
res.replacedatabase = true ;
res.sqlrestore(svr) ;
return true ;
} catch(exception err)
finally }
其中這個語句取得了所有的程序列表:
sqldmo.queryresults qr = svr.enumprocesses(-1) ;
下面的語句找到和要恢復資料庫相關的程序並殺死:
int icolpidnum = -1 ;
int icoldbname = -1 ;
for(int i=1;i<=qr.columns;i++)
else if (strname.toupper().trim() == "dbname")
if (icolpidnum != -1 && icoldbname != -1)
break ;
} for(int i=1;i<=qr.rows;i++)
C 可定製的資料庫備份和恢復程式
可定製的資料庫備份和恢復程式 tashanzhishi 原作 關鍵字 資料庫 備份 恢復 出處 在我們做資料庫系統的程式時,經常需要為客戶做乙個資料庫的備份和恢復程式,特別是對於一些非專業的資料庫使用者,這個程式更是必不可少,而且操作必需足夠簡單。因為在很多系統中,資料庫的備份恢復功能都是相近的,因...
C 可定製的資料庫備份和恢復程式
可定製的資料庫備份和恢復程式 tashanzhishi 原作 關鍵字 資料庫 備份 恢復 出處 在我們做資料庫系統的程式時,經常需要為客戶做乙個資料庫的備份和恢復程式,特別是對於一些非專業的資料庫使用者,這個程式更是必不可少,而且操作必需足夠簡單。因為在很多系統中,資料庫的備份恢復功能都是相近的,因...
C 可定製的資料庫備份和恢復程式
可定製的資料庫備份和恢復程式 tashanzhishi 原作 關鍵字 資料庫 備份 恢復 出處 在我們做資料庫系統的程式時,經常需要為客戶做乙個資料庫的備份和恢復程式,特別是對於一些非專業的資料庫使用者,這個程式更是必不可少,而且操作必需足夠簡單。因為在很多系統中,資料庫的備份恢復功能都是相近的,因...