數(shù)據(jù)庫(kù)日常維護(hù)工作是系統(tǒng)管理員的重要職責(zé)。其內(nèi)容主要包括以下幾個(gè)部分:
一、備份系統(tǒng)數(shù)據(jù)
SYBASE 系統(tǒng)的備份與恢復(fù)機(jī)制保證了在系統(tǒng)失敗時(shí)重新獲取數(shù)據(jù)的可能性。SQL Server
提供了兩種不同類(lèi)型的恢復(fù)機(jī)制:一類(lèi)是系統(tǒng)自動(dòng)完成的恢復(fù),這種措施在每次系統(tǒng)啟動(dòng)時(shí)都自動(dòng)進(jìn)行,保證了在系統(tǒng)癱瘓前完成的事務(wù)都寫(xiě)到數(shù)據(jù)庫(kù)設(shè)備上,而未完成的事務(wù)都被回退;另一類(lèi)是人工完成的恢復(fù),這是通過(guò)
DUMP 和 LOAD 命令來(lái)執(zhí)行人工備份和恢復(fù)工作。因此定期備份事務(wù)日志和數(shù)據(jù)庫(kù)是一項(xiàng)十分重要的日常維護(hù)工作。
1、備份數(shù)據(jù)庫(kù)
每一個(gè)數(shù)據(jù)庫(kù)都應(yīng)在創(chuàng)建之后卸出,從而提供一個(gè)裝入基點(diǎn)。在此之后按排定的時(shí)間周期表卸出。比如每周五卸出數(shù)據(jù)庫(kù)。對(duì)一般數(shù)據(jù)庫(kù)系統(tǒng)卸出數(shù)據(jù)庫(kù)周期建議為每周一次。
2、備份事務(wù)日志
如果事務(wù)日志與數(shù)據(jù)庫(kù)放在同一個(gè)設(shè)備上,則事務(wù)日志不應(yīng)與數(shù)據(jù)庫(kù)分開(kāi)備份。master 數(shù)據(jù)庫(kù)和小于 4M 的用戶(hù)數(shù)據(jù)庫(kù)就是這種情況。一般數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)庫(kù)和日志分別放在不同的設(shè)備上,因此,可以用 DUMP TRAN 命令單獨(dú)備份日志。
備份事務(wù)日志的周期直接影響數(shù)據(jù)的恢復(fù)程度,因此建議每天備份。
3、備份數(shù)據(jù)庫(kù)及其日志間的相互作用
在至少卸出一次數(shù)據(jù)庫(kù)前,卸出事務(wù)日志是毫無(wú)意義的。
二、萬(wàn)一系統(tǒng)失敗時(shí)恢復(fù)數(shù)據(jù)庫(kù)系統(tǒng)
如果用戶(hù)數(shù)據(jù)庫(kù)存儲(chǔ)的設(shè)備失效,從而數(shù)據(jù)庫(kù)被破壞或不可存取,通過(guò)裝入最新的數(shù)據(jù)庫(kù)備份以及后來(lái)的事務(wù)日志備份可以恢復(fù)數(shù)據(jù)庫(kù)。假設(shè)當(dāng)前的事務(wù)日志存在于一個(gè)并沒(méi)有毀壞的設(shè)備上,帶著
WITH NO_TRUNCATE 選項(xiàng)的 DUMP TRANsaction 命令卸出它。
要恢復(fù)數(shù)據(jù)庫(kù)按如下步驟去做:
1、如果日志存在于一個(gè)分離的設(shè)備上,用帶著 NO_TRUNCATE 選項(xiàng)的 DUMP TRANsaction 命令卸出被毀壞的或者不可存取的用戶(hù)數(shù)據(jù)庫(kù)事務(wù)日志。
2、用下面的查詢(xún)檢查設(shè)備分配已毀壞數(shù)據(jù)庫(kù)的設(shè)備使用情況。必須為同一目的賦同樣的空間塊。 下面的查詢(xún)顯示了分配給數(shù)據(jù)庫(kù) mydb 設(shè)備使用和尺寸情況:
SELECT segmap,size FROM sysusages
WHERE dbid = ( SELECT dbid FROM sysdatabases WHERE name = “mydb”)
3、檢查查詢(xún)的輸出。在 segmap 列的 ‘3’代表數(shù)據(jù)分配,‘4’代表日志分配。size 列代表 2K 數(shù)據(jù)塊的數(shù)目。注意此信息的次序、使用和尺寸部分。例如,輸出為:
segmapSize
310240//實(shí)際尺寸為:20M
35120//實(shí)際尺寸為:10M
45120//實(shí)際尺寸為:10M
31024//實(shí)際尺寸為:2M
42048//實(shí)際尺寸為:4M
4、用 DROP DATABASE 命令刪除毀壞設(shè)備上的數(shù)據(jù)庫(kù)。如果系統(tǒng)報(bào)錯(cuò),用DBCC DBREPAIR 命令的 DROPDB 選項(xiàng)。
5、刪除數(shù)據(jù)庫(kù)后,用 sp_dropdevice 刪除毀壞了的設(shè)備。
6、用 DISK INIT 初始化新的數(shù)據(jù)庫(kù)設(shè)備。
7、重建數(shù)據(jù)庫(kù)。用 CREATE DATABASE 命令從老的 sysusages 表拷貝所有的行,并包含第一邏輯設(shè)備。
對(duì)上例,命令為:
CREATE DATABASE mydb
ON datadev1=20,datadev2=10
LOG ON logdev1=10
8、用 ALTER DATABASE 命令重建其余入口。在此例中,在datadev1上分配更多的空間,命令為:
ALTER DATABASE mydb ON datadev1=2
9、用 LOAD DATABASE 重新裝入數(shù)據(jù)庫(kù),然后用 LOAD TRAN 裝入前面卸出的日志。
LOAD DATABASE 命令語(yǔ)法是:
LOAD DATABASE database_name
FROM dump_device
LOAD TRANsaction 命令的語(yǔ)法是:
LOAD TRANsaction database_name
FROM dump_device
卸出數(shù)據(jù)庫(kù)和事務(wù)日志的缺省權(quán)限歸數(shù)據(jù)庫(kù)所有者,且可以傳遞給其他用戶(hù);裝載數(shù)據(jù)庫(kù)和事務(wù)的權(quán)限也歸數(shù)據(jù)庫(kù)所有者,但不能傳遞。
三、產(chǎn)生用戶(hù)信息表,并為信息表授權(quán);
系統(tǒng)維護(hù)人員的另一個(gè)日常事務(wù)是為用戶(hù)創(chuàng)建新的信息表,并為之授權(quán)。創(chuàng)建表以及為表授權(quán)的方法已經(jīng)在講過(guò),在此只將有關(guān)命令語(yǔ)法寫(xiě)出來(lái)。
四、監(jiān)視系統(tǒng)運(yùn)行狀況,及時(shí)處理系統(tǒng)錯(cuò)誤;
系統(tǒng)管理員的另一項(xiàng)日常工作是監(jiān)視系統(tǒng)運(yùn)行情況。主要有以下幾個(gè)方面:
1、監(jiān)視當(dāng)前用戶(hù)以及進(jìn)程的信息
使用系統(tǒng)過(guò)程:sp_who以保證系統(tǒng)正常運(yùn)做;另外亦可監(jiān)視非法用戶(hù)或用戶(hù)使用不屬于自己使用范圍的數(shù)據(jù)庫(kù)等情況。
2、監(jiān)視目標(biāo)占用空間情況
使用系統(tǒng)過(guò)程:sp_spaceused 日常要監(jiān)視的主要目標(biāo)有:用戶(hù)數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)日志表(syslogs)以及計(jì)費(fèi)原始數(shù)據(jù)表等。如果發(fā)現(xiàn)占用空間過(guò)大,對(duì)日志表要進(jìn)行轉(zhuǎn)儲(chǔ);對(duì)其他目標(biāo)則應(yīng)擴(kuò)充空間或清楚垃圾數(shù)據(jù)。
3、監(jiān)視 SQL Server 統(tǒng)計(jì)數(shù)字
使用系統(tǒng)過(guò)程:sp_monitor