數(shù)據(jù)庫要怎么維護(hù)(一)
數(shù)據(jù)庫維護(hù)工作是系統(tǒng)管理員的重要職責(zé)。其內(nèi)容主要包括以下幾個(gè)部分:
一、備份系統(tǒng)數(shù)據(jù)
SYBASE 系統(tǒng)的備份與恢復(fù)機(jī)制保證了在系統(tǒng)失敗時(shí)重新獲取數(shù)據(jù)的可能性。SQL Server 提供了兩種不同類型的恢復(fù)機(jī)制:一類是系統(tǒng)自動完成的恢復(fù),這種措施在每次系統(tǒng)啟動時(shí)都自動進(jìn)行,保證了在系統(tǒng)癱瘓前完成的事務(wù)都寫到數(shù)據(jù)庫設(shè)備上,而未完成的事務(wù)都被回退;另一類是人工完成的恢復(fù),這是通過 DUMP 和 LOAD 命令來執(zhí)行人工備份和恢復(fù)工作。因此定期備份事務(wù)日志和數(shù)據(jù)庫是一項(xiàng)十分重要的日常維護(hù)工作。
1、備份數(shù)據(jù)庫
每一個(gè)數(shù)據(jù)庫都應(yīng)在創(chuàng)建之后卸出,從而提供一個(gè)裝入基點(diǎn)。在此之后按排定的時(shí)間周期表卸出。比如每周五卸出數(shù)據(jù)庫。對一般數(shù)據(jù)庫系統(tǒng)卸出數(shù)據(jù)庫周期建議為每周一次。
除了按計(jì)劃周期卸出數(shù)據(jù)庫之外,還需在每次運(yùn)行沒有日志的操作后卸出數(shù)據(jù)庫。例如:
·每次強(qiáng)制地運(yùn)行了 DUMP TRAN WITH NO_LOG (因?yàn)閿?shù)據(jù)庫的磁盤空溢出);
·每次用 sp_dboption 允許 select into/bulkcopy 做快速拷貝,或用 SELECT INTO 命令創(chuàng)建一個(gè)永久性的表,或使用了 WRITETEXT 命令。
卸出數(shù)據(jù)庫的命令為:
DUMP DATABASE database_name
TO dump_device
database_name 是要卸出的數(shù)據(jù)庫名稱,dump_device 是卸出設(shè)備的名稱。用系統(tǒng)過程 sp_helpdevice 可以獲得設(shè)備的信息。
下面一條命令用來卸出數(shù)據(jù)庫 my_db :
DUMP DATABASE my_db
TO db_bk_dev
2、備份事務(wù)日志
如果事務(wù)日志與數(shù)據(jù)庫放在同一個(gè)設(shè)備上,則事務(wù)日志不應(yīng)與數(shù)據(jù)庫分開備份。master 數(shù)據(jù)庫和小于 4M 的用戶數(shù)據(jù)庫就是這種情況。一般數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)庫和日志分別放在不同的設(shè)備上,因此,可以用 DUMP TRAN 命令單獨(dú)備份日志。
備份事務(wù)日志的周期直接影響數(shù)據(jù)的恢復(fù)程度,因此建議每天備份。
備份事務(wù)日志的命令格式為:
DUMP TRANsaction database_name
[TO dump_device]
[WITH TRUNCATE_ONLY|WITH NO_LOG|WITH NO_TRUNCATE]
其中 database_name 是要備份事務(wù)的數(shù)據(jù)庫名稱,dump_device 是備份設(shè)備名稱,僅當(dāng)包含了 WITH TRUNCATE_ONLY 或 WITH NO_LOG 子句時(shí),才可以備份到設(shè)備。
注意:如果總是用 DUMP DATEBASE (備份數(shù)據(jù)庫及其日志),而不用 DUMP TRAN ,事務(wù)日志將不會刷新,而變得非常龐大。
對于 master 數(shù)據(jù)庫和小型數(shù)據(jù)庫每次運(yùn)行 DUMP DATEBASE 之后應(yīng)當(dāng)運(yùn)行 DUMP TRANsaction 命令刷新日志 。
下面一條命令備份數(shù)據(jù)庫 db160 的事務(wù)日志到備份設(shè)備上:
DUMP TRANsaction db160
TO db_log_bk_dev
WITH TRUNCATE_ONLY
3、備份數(shù)據(jù)庫及其日志間的相互作用
在至少卸出一次數(shù)據(jù)庫前,卸出事務(wù)日志是毫無意義的。下圖顯示了備份數(shù)據(jù)庫及其日志間的關(guān)系
如果在星期二下午5:01出現(xiàn)非硬件故障,需要做的所有工作是裝入磁帶5(參見下一節(jié):數(shù)據(jù)恢復(fù)),由于磁帶5是下午5:00剛備份的,因此只有備份和裝入之間的一分鐘內(nèi)的數(shù)據(jù)損失。
但是,如果在星期二下午4:49失效會怎么樣呢?在這種情況下,要裝入磁帶1(在星期五下午5:00的卸出)。然后,依次裝入磁帶2,3以及4。這樣,系統(tǒng)將恢復(fù)到星期二上午10:00點(diǎn)的狀態(tài),星期二的大部分工作丟失了。此例顯示了經(jīng)常卸出事務(wù)的重要性。